Witam,
próbuję zaktualizować rekord w tabeli MySQL. Dane są pobierane przez formularz ale po kliknięciu popraw nic się nie zmienia, pozostają stare dane.
[php]
piotrooo89
25.03.2009, 08:29:22
po 1 wywal te@
<?php
or
die('Brak połączenia z serwerem MySQL');or
die('Nie mogę połączyć się z bazą danych')?>
i tu powinno być zamiast:
<?php
elseif($a == 'save')
?>
<?php
elseif($_POST['a'] == 'save')
?>
zmieniłem ale nadal nie działa... masz może jeszcze jakiś pomysł? bo 5 dni przeszukuję internet i nie mogę znaleźć rozwiązania... wszystko działa tylko nie to...
redelek
25.03.2009, 09:10:15
A zwraca Ci jakiś błąd ?
Ja mam taki problem na WebSrv i WampSrv, że musi być to ujęte w takich apostrofach
<?php
mysql_query("UPDATE test SET `kod`='$kod' WHERE `id`='$id'") ?>
Zobacz co dodałem w polach
kod i
id takie smieszne pazurki
``.
Nie wiem dlaczego tak jest, na serwerach roboczych faktycznie nie jest to wymagane.
Dodatkowo zrób sobie
echo danych które odbierasz z formularza, może nie wykonuje on się poprawnie.
Pozdrawiam
Redelek
dzięki redelek ale dalej bez zmian...
formularz odczytuje dane dla ID z tabeli, wyświetla pole do edycji, pozwala zmienić zawartość pola ale po wciśnięciu POPRAW w wylistowanej tabeli pojawiają się te same dane co przed edycją...
batman
25.03.2009, 09:30:09
Proszę dodać bbcode oraz poprawić temat. Same tagi nie są tematem.
poprawione, przepraszam...
i oczywiście nadal szukam podpowiedzi gdzie może leżeć problem... może coś z ID jest nie tak...
czy może być to wina tego, że pobieram tylko jedno pole z rekordu a nie wszystkie? Może resztę powiniennem ukryć poleceniem "hidden"...
kazag
25.03.2009, 10:53:25
Kod
/* uaktualniamy tabelę test */
mysql_query("UPDATE test SET kod='$kod' WHERE id='$id'")
or die('Błąd zapytania');
echo 'Dane zostały zaktualizowane';
moze to nie ma znaczenia, ale zrób:
$sql=mysql_query("UPDATE test SET kod='$kod' WHERE id='$id'")
a nie samo mysql_query.
potem np:
if(!$sql)
{
echo "Kupa, dane nie zostały zaktualizowane";
exit();
}
Poza tym, to zapytanie jest poprawne moim zdaniem... Czy jesteś pewien, ze masz zmieną "id" w ogole? Mże sie nie przesyła?
tak, mam zmienną ID (autonumerowanie), klucz podstawowy...
pobiera odpowiednie ID ale coś jest nie tak z przesłaniem poprawionej zmiennej KOD...
spróbuję Twój pomysł...
kazag
25.03.2009, 11:03:06
chodzi nie o to, czy masz pole id w bazie, ale czy formularz działa, daj sobie echo $id."-".$kod; i zobacz, czy pokazą ci sie te wartosci, ktore chcesz wstawic do bazy.
Kod
/* odbieramy zmienne z formularza */
$id = $_POST['id'];
$kod = $_POST['kod'];
echo $id."-".$kod;
hmm... teraz to już nic nie rozumiem... wpisałem linijkę kodu z ECHO... i nic się nie zmieniło - czyli nie czyta zmiennych... dobrze rozumiem?
kazag
25.03.2009, 11:52:02
rozumiem, ze dostałeś tylko ten myślnik, który jest między nimi, tak?
jesli widzisz tylko ten myślnik, to znaczy ni mniej ni wiecej tyle, że zmienne id i kod gdzieś giną.
poza tym:
$a nigdy nie będzie "save", ponieważ wysyłasz formularz postem, a zmienne odczytujesz z $_GET... zmień na:
$a=$_POST['a'] i $id=$_POST['id'], albo zmień method na "get".
nie, nawet myślnika nie pokazało...
zmieniłem POST na GET i też bez rezultatu...
Spawnm
25.03.2009, 12:25:12
pokaż jak teraz wygląda twój kod
Kod
<?php
// łączymy się z bazą danych
$connection = mysql_connect('localhost', 'xxx', 'yyy')
or die('Brak połączenia z serwerem MySQL');
$db = mysql_select_db('zzz', $connection)
or die('Nie mogę połączyć się z bazą danych');
$a = $_GET['a'];
$id = $_GET['id'];
if($a == 'edit' and !empty($id)) {
/* zapytanie do tabeli */
$wynik = mysql_query("SELECT * FROM test WHERE id='$id'")
or die('Błąd zapytania');
/*wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0 */
if(mysql_num_rows($wynik) > 0) {
/* odczytujemy zawartość wiersza z tabeli */
$r = mysql_fetch_assoc($wynik);
/* wczytujemy dane do formularza */
/* w formularz znajdują się ukryte pola "a" z wartością "save" i pole "id" z wartością zmiennej id */
echo '<form action="st_dro_1.php" method="get">
<input type="hidden" name="a" value="save" />
<input type="hidden" name="id" value="'.$id.'" />
kod:<br /><input type="text" name="kod" value="'.$r['kod'].'" /><br />
<input type="submit" value="popraw" />
</form>';
}
}
elseif($_POST['a'] == 'save')
{
/* odbieramy zmienne z formularza */
$id = $_POST['id'];
$kod = $_POST['kod'];
echo $id."-".$kod;
/* uaktualniamy tabelę test */
mysql_query("UPDATE test SET kod='$kod' WHERE id='$id'")
or die('Błąd zapytania');
echo 'Dane zostały zaktualizowane';
}
?>
Spawnm
25.03.2009, 12:38:47
echo '<form action="st_dro_1.php" method="get">
nie działa bo teraz wysyłasz get a chcesz odebrać post
miałem wcześniej POST i też nie działało...
Spawnm
25.03.2009, 12:41:13
to zmień teraz i będzie działało ,
wcześniej miałeś post i odbierałeś get , teraz masz get i odnierasz post
zmieniłem get na post i dalej nie zmienia...
redelek
25.03.2009, 12:48:43
U mnie działa bez problemu
Nie chciało mi się robić więcej więc spreparowałem link

Odbierasz tak dane z innego formularza prawda
http://localhost/PHP_forum/Problem_z_aktua...a=edit&id=2Po wpisaniu tych danych pokazał mi się formularz. Zmieniłem coś w nim i wybrałem POPRAW.
Poprawił w bazie bez problemów.
Tak wygląda mój kod
<?php
// łączymy się z bazą danych
$connection = mysql_connect('localhost', 'root', '') // ZMIEŃ NA SWOJE DANE !!! or
die('Brak połączenia z serwerem MySQL'); or
die('Nie mogę połączyć się z bazą danych');
$a = $_GET['a']; // te dane odbierasz z innego formularza
$id = $_GET['id'];// te dane odbierasz z innego formularza
if($a == 'edit' and
!empty($id)) { /* zapytanie do tabeli */
$wynik = mysql_query("SELECT * FROM zzz WHERE id='$id'") or
die('Błąd zapytania'); /*wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0 */
/* odczytujemy zawartość wiersza z tabeli */
/* wczytujemy dane do formularza */
/* w formularz znajdują się ukryte pola "a" z wartością "save" i pole "id" z wartością zmiennej id */
/* action ZMIEŃ NA SWOJ PLIK ja dałem ind.php !!!!! */
echo '<form action="ind.php" method="POST"> <input type="hidden" name="a" value="save" />
<input type="hidden" name="id" value="'.$id.'" />
kod:<br /><input type="text" name="kod" value="'.$r['kod'].'" /><br />
<input type="submit" value="popraw" />
</form>';
}
}
elseif($_POST['a'] == 'save')
{
/* odbieramy zmienne z formularza */
$id = $_POST['id'];
$kod = $_POST['kod'];
/* uaktualniamy tabelę test */
mysql_query("UPDATE zzz SET kod='$kod' WHERE id='$id'") or
die('Błąd zapytania'); echo 'Dane zostały zaktualizowane'; }
?>
Zobacz może się uda. Pierwsze masz dobrze chyba bo odbierasz coś GET z innego formularza. W formularzu do poprawy już uzywasz metody POST
to i dane odbieraj post.
Drobne modyfikacje i działa jak szalone
Przed:
id kod
1 test1
2 test2
3 test3
Po wysłaniu
1 zmiana_test1
2 zmiana_test2
3 zmiana_test3
Redelek
dzięki za pomoc przy problemie ale nadal nic...
wkleiłem Twój skrypt (zmieniłem dane połączenia, nazwę tabeli po SELECT, plik action="..." i ta dole tabelę do UPDATE...
po zmianie treści pola, kliknięciu popraw, przechodzę do strony podaniej w action="..." i widzę to samo co było przed zmianą...
dalej proszę: POMOCY !
redelek
25.03.2009, 13:35:57
Jak wygląda przejście z poprzedniego formularza do edycji danych możesz pokazać?
Bo jakoś przechodzisz na ten formularz do edycji ?
Albo wyślij mi wszystko na e-mail piotr.redel[ET]gmail.com
Pozdrawiam
Redelek
kod porzedniego formularza wygląda następująco:
Kod
<link rel="stylesheet" href="style.css" type="text/css" />
<a href="b_main.php">STRONA GŁÓWNA</a><br><br>
PRZESYŁKI W DRODZE DO ODBIORCY<br>
<?php
// łączymy się z bazą danych
$connection = @mysql_connect('localhost', 'xxx', 'yyy')
or die('Brak połączenia z serwerem MySQL');
$db = @mysql_select_db('zzz', $connection)
or die('Nie mogę połączyć się z bazą danych');
/* zapytanie do konkretnej tabeli */
$wynik = mysql_query("SELECT * FROM test WHERE status='droga'")
or die('Błąd zapytania');
/*
wyświetlamy wyniki, sprawdzamy,
czy zapytanie zwróciło wartość większą od 0
*/
if(mysql_num_rows($wynik) > 0) {
/* jeżeli wynik jest pozytywny, to wyświetlamy dane */
echo "<table cellpadding=\"2\" border=1>";
while($r = mysql_fetch_assoc($wynik)) {
echo "<tr>";
echo "<td>".$r['id']."</td>";
echo "<td>".$r['datodb']."</td>";
echo "<td>".$r['nrzam']."</td>";
echo "<td>".$r['paleta']."</td>";
echo "<td>".$r['paczka']."</td>";
echo "<td>".$r['kod']."</td>";
echo "<td>".$r['miasto']."</td>";
echo "<td>".$r['status']."</td>";
echo "<td>
<a href=\"edit.php?a=edit&id={$r['id']}\">EDIT</a>
</td>";
echo "</tr>";
}
echo "</table>";
}
?>
a po kliknięciu EDIT mamy kod:
Kod
<?php
// łączymy się z bazą danych
$connection = mysql_connect('localhost', 'xxx', 'yyy')
or die('Brak połączenia z serwerem MySQL');
$db = mysql_select_db('zzz', $connection)
or die('Nie mogę połączyć się z bazą danych');
$a = $_GET['a']; // te dane odbierasz z innego formularza
$id = $_GET['id'];// te dane odbierasz z innego formularza
if($a == 'edit' and !empty($id)) {
/* zapytanie do tabeli */
$wynik = mysql_query("SELECT * FROM test WHERE id='$id'")
or die('Błąd zapytania');
/*wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0 */
if(mysql_num_rows($wynik) > 0) {
/* odczytujemy zawartość wiersza z tabeli */
$r = mysql_fetch_assoc($wynik);
/* wczytujemy dane do formularza */
/* w formularz znajdują się ukryte pola "a" z wartością "save" i pole "id" z wartością zmiennej id */
/* action ZMIEŃ NA SWOJ PLIK ja dałem ind.php !!!!! */
echo '<form action="st_dro_1.php" method="POST">
<input type="hidden" name="a" value="save" />
<input type="hidden" name="id" value="'.$id.'" />
kod:<br /><input type="text" name="kod" value="'.$r['kod'].'" /><br />
<input type="submit" value="popraw" />
</form>';
}
}
elseif($_POST['a'] == 'save')
{
/* odbieramy zmienne z formularza */
$id = $_POST['id'];
$kod = $_POST['kod'];
/* uaktualniamy tabelę test */
mysql_query("UPDATE test SET kod='$kod' WHERE id='$id'")
or die('Błąd zapytania');
echo 'Dane zostały zaktualizowane';
}
?>
redelek
25.03.2009, 13:43:05
Cytat(ttb @ 25.03.2009, 13:41:17 )

<a href=\"edit.php?a=edit&id={$r['id']}\">EDIT</a>
A co to jest
amp; 
Dlaczego id={$r['id']} ? bez tych klamrowych nawiasów.
Straszne kombinacje masz w tym linku
Zrób sobie zmienną
$id_edit=$r['id'];
I zobacz nie ładniej wygląda link?
<a href=\"edit.php?a=edit&id=$id_edit\">EDIT</a>
teraz po kliknięciu edytuj pokazuje mi się pusta strona
a link wygląda tak:
http:// ... edit.php?a=edit&id=
czyli nie wybiera rekordu z ID
redelek
25.03.2009, 13:58:52
pokaż kod gdzie to wstawiłeś ?
Kod
<?php
// łączymy się z bazą danych
$connection = @mysql_connect('localhost', 'xxx', 'yyy')
or die('Brak połączenia z serwerem MySQL');
$db = @mysql_select_db('zzz', $connection)
or die('Nie mogę połączyć się z bazą danych');
/* zapytanie do konkretnej tabeli */
$wynik = mysql_query("SELECT * FROM test WHERE status='droga'")
or die('Błąd zapytania');
/*
wyświetlamy wyniki, sprawdzamy,
czy zapytanie zwróciło wartość większą od 0
*/
$id_edit=$r['id'];
if(mysql_num_rows($wynik) > 0) {
/* jeżeli wynik jest pozytywny, to wyświetlamy dane */
echo "<table cellpadding=\"2\" border=1>";
while($r = mysql_fetch_assoc($wynik)) {
echo "<tr>";
echo "<td>".$r['id']."</td>";
echo "<td>".$r['datodb']."</td>";
echo "<td>".$r['nrzam']."</td>";
echo "<td>".$r['paleta']."</td>";
echo "<td>".$r['paczka']."</td>";
echo "<td>".$r['kod']."</td>";
echo "<td>".$r['miasto']."</td>";
echo "<td>".$r['status']."</td>";
echo "<td>
<a href=\"edit.php?a=edit&id=$id_edit\">EDIT</a>
</td>";
echo "</tr>";
}
echo "</table>";
}
?>
redelek
25.03.2009, 14:08:07
Ło rany
PHP nie umie myśleć
Za wcześnie to wstawiłeś czy widzisz gdzieś wyżej zmiennną $r ?
Pojawia się topiero ...... TUUUUU
<?php
$id_edit=$r['id'];
/* jeżeli wynik jest pozytywny, to wyświetlamy dane */
echo "<table cellpadding=\"2\" border=1>";
echo "<td>".$r['id']."</td>"; echo "<td>".$r['datodb']."</td>"; echo "<td>".$r['nrzam']."</td>"; echo "<td>".$r['paleta']."</td>"; echo "<td>".$r['paczka']."</td>"; echo "<td>".$r['kod']."</td>"; echo "<td>".$r['miasto']."</td>"; echo "<td>".$r['status']."</td>"; ?>
Musisz zrobić tak
<?php
echo "<td>".$r['id']."</td>"; $id_edit=$r['id']; // TU TU
echo "<td>".$r['datodb']."</td>"; echo "<td>".$r['nrzam']."</td>"; echo "<td>".$r['paleta']."</td>"; echo "<td>".$r['paczka']."</td>"; echo "<td>".$r['kod']."</td>"; echo "<td>".$r['miasto']."</td>"; echo "<td>".$r['status']."</td>"; <a href=\"edit.php?a=edit&id=$id_edit\">EDIT</a>
</td>";
}
?>
ojoj... tak, złe miejsce....
teraz ID jest dobrze wybrane... ale zapisu po zmianie wartości pola nadal nie ma...
nawet jak zmienię na inne pole do edycji to też nic nie zmienia...
redelek
25.03.2009, 14:22:00
A spreparuj swój link tak jak to ja wcześniej zrobiłem
localhost/edit.php?a=edit&id=2 // oczywiście wpisz rekord który istnieje w bazie
Wyświetli Ci się Twój formularz , wprowadź zmiany i zobacz czy zadziała.
po wklejeniu linku otwera mi się strona edycji danego rekordu, wprowadzam zmianę, klikam popraw i przy podglądzie rekordu w tabeli nic się nie zmienia....
redelek
25.03.2009, 14:31:55
A wyświetl co Ci zwraca mysql_query
o tak
<?php
or
die('Błąd zapytania');?>
nic, nie ma żadnego błędu / komunikatu...
redelek
25.03.2009, 14:50:10
a dodaj na samym początku skryptu edit.php
coś takiego
<?php
?>
i podeślij wyniki. Naprawdę Twój skrypt działa, sprawdziłem na serwerze zewnętrznym i cały czas na localhost
nie mam czego podesłać... nie pokazało żadnego błędu... przeszło znowu do tabeli wyników nie zmieniając rekordu...
no właśnie... wedle wszelkich prawideł skrypt powinien działać...
redelek
25.03.2009, 16:26:19
A jak wracasz na stronę z danymi ?
redelek, idealna wskazówka... działa! w action="plik.php" miałem wpisany zły plik...
dziękuję wszystkim za pomoc i wskazówki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.