[PHP][MySQL] Błąd ze zmienną

Witam!

Pisze sobie taki kod, który będzie pobierał do formularza wpisy z bazy danych, z poziomu przeglądarki będzie można je edytować, a na końcu zapisać zmiany.

Problem polega na tym, że wszystko się dobrze pobiera do formularza, tylko wyświetla się taki oto błąd (przez to chyba też edytowany wpis nie zapisuje się w bazie danych):

Notice: Undefined index: edytuj_imie in edit_user_skrypt.php on line 45


Notice: Undefined index: edytuj_nick in edit_user_skrypt.php on line 46


Notice: Undefined index: edytuj_email in edit_user_skrypt.php on line 47


Notice: Undefined index: edytuj_gg in edit_user_skrypt.php on line 48

Poniżej daje fragment kodu odpowiedzialny za tą funkcję.

else
//Zapisywanie danych

            $EdytujImie = $_POST['edytuj_imie'];

            $EdytujNick = $_POST['edytuj_nick'];

            $EdytujEmail = $_POST['edytuj_email'];

            $EdytujGG = $_POST['edytuj_gg'];


            $Zapisz = mysql_query("UPDATE team SET imie='$EdytujImie' nick='$EdytujNick' email='$EdytujEmail' gg='$EdytujGG'")

To musisz przenieść gdzieś powyżej linii

$Polecenie = mysql_query("SELECT imie, nick, email, gg FROM team WHERE nick='$nick'");

Pamiętaj - najpierw zapisujemy wszystko z $_POSTa, potem wyświetlamy (SELECT pola FROM…), nigdy odwrotnie. A poza tym błąd mówi że nie ma zdefiniowanego indeksu edytuj_linie itp. Czyli trzeba by w tych 4 liniach analogicznie przerobić

$EdytujImie = isset($_POST['edytuj_imie']) ? $_POST['edytuj_imie'] : '';

O ile dobrze rozumuję to nie brakuje ci tu where ?? Skąd on ma wiedzieć co ma zmienić ?

Ja bym do selecta dodał id, a do update, where id=$zmienna_z_selecta

drobok , faktycznie, nie zauważyłem

$Zapisz = mysql_query("UPDATE team SET imie='$EdytujImie' nick='$EdytujNick' email='$EdytujEmail' gg='$EdytujGG'");

To zamieni wszystkie rekordy na to co wpisałeś. Musiał byś przerobić formularz wg schematu

echo "Imię: 
";[/code]


gdzie ___id____ to nr id z bazy.



Potem wpisz sobie

[code]print_r($_POST)

i zobacz co musisz pozmieniać żeby zapytanie weszło do bazy.

Zakładając, że ma pole id wystarczy się nim posłużyć do zapytania. Ja bym raczej tego tak nie zostawiał, bo ktoś by se mógł zmieniać wszystko (strzelając id)

$Polecenie = mysql_query("SELECT id,imie, nick, email, gg FROM team WHERE nick='$nick'");// potem twój kod $Zapisz = mysql_query("UPDATE team SET imie='$EdytujImie' nick='$EdytujNick' email='$EdytujEmail' gg='$EdytujGG' WHERE 'id=$Edytuj['id']"); [/code]

Hmm… Nie wiem czy dobrze zrozumiałem? Chodzi o coś takiego? (Niestety dopiero nabieram doświadczenia w PHP więc proszę o wyrozumiałość :slight_smile: ) Niestety tak jak przerobiłem poniżej nie działa…

http://www.wklej.org/hash/454d23e7173/

NIE, masz zmienić tylko te 2 twoje linijki na te 2 moje. Względem twojego pierwszego kodu ;]

Rozumiem, tylko ja zamienić te cudzysłowy, aby nie było błądu?

Próbowałem na takie sposoby:

$Zapisz = mysql_query("UPDATE team SET imie='$EdytujImie' nick='$EdytujNick' email='$EdytujEmail' gg='$EdytujGG' WHERE 'id=$Edytuj['id']'");[/code]

[code=php]$Zapisz = mysql_query(“UPDATE team SET imie=’$EdytujImie’ nick=’$EdytujNick’ email=’$EdytujEmail’ gg=’$EdytujGG’ WHERE ‘\id=$Edytuj[‘id’]’”);

$Zapisz = mysql_query('UPDATE team SET imie="$EdytujImie" nick="$EdytujNick" email="$EdytujEmail" gg="$EdytujGG' WHERE "id=$Edytuj['id']"');[/code]

Niestety żaden z tych sposobów nie działa.

Trza było powiedzieć, że w moim kodzie jest błąd, wkradł się tam apostrof przed id, zamiast być po nim ;]

$Polecenie = mysql_query("SELECT id,imie, nick, email, gg FROM team WHERE nick='$nick'");// potem twój kod $Zapisz = mysql_query("UPDATE team SET imie='$EdytujImie' nick='$EdytujNick' email='$EdytujEmail' gg='$EdytujGG' WHERE id=\'$Edytuj['id']\'"); [/code]

Nie wiem czemu mi nie działa, chwilowo nie miałem czasu na udoskonalanie kodu, ale teraz spróbowałem jakoś tak, lecz dalej nic nie działa, tzn. wszystkie pola z bazy pobierają się i wyświetlają w polach formularza, lecz niestety po wciśnięciu przycisku zmiany się nie zapisują.

http://www.wklej.org/hash/87d66765bfc/