[PHP] Wysyłanie do bazy wyboru z listy rozwijanej


(Krzychu224) #1

W formularzu do edycji danych osobowych na stronie, wyświetlam listę rozwijaną jeśli ktoś spełnia kryterium:

echo 'W jakim budynku prowadzisz konsultację:';

    if ($user_data['user_prow_status']==1){

	echo '';

	$zapytanie = mysql_query ("SELECT * FROM `budynek`");

	echo '-wybierz budynek-r';

	while($wynik = mysql_fetch_array($zapytanie)){


      echo '' . $wynik['Kod_Budynku'] . '';

      echo $wynik['Kod_Budynku'];

      echo "";


	}        


	echo "";

	 	}

Potem poza formularzem pobieram wybrane id (kod budynku)

$kod=$_GET['id'];

i chce zrobić update w bazie (przy okazji innych danych, które są w formularzu):

$result = mysql_query("UPDATE `users` SET `user_website` = '{$_POST['website']}', `user_from` = '{$_POST['from']}', `user_imie` = '{$_POST['imie']}', `user_nazwisko` = '{$_POST['nazwisko']}', `user_adres` = '{$_POST['adres']}', `user_kon_loc` = '{$kod}' {$up2} WHERE `user_id` = '{$user_data['user_id']}'" );

i niestety zapis do bazy się nie dobywa (wszystko inne się zmienia). Kod wziąłem z podstrony gdzie mam listę rozwijaną, ktoś wybiera pozycje i id tej pozycji jest używane do wyciągnięcia odpowiednich danych z bazy. Chciałem dostosować ten kod, żeby robić update w bazie i nie wiem czemu nie działa.


(Drobok) #2

Te twoje posty są jakoś dziwnie zbudowane, nigdy nie widziałem takiego zapisu (może takowy istnieje i działa, ale polecam skorzystać z normalnego). Zapomniałeś też o realescapestring.


(Pablo_Wawa) #3

Zapis

{$kod}

według mnie jest niepoprawny, jeśli już to użyj takiego

${kod}

ale ma on sens wtedy, kiedy obok naszej zmiennej występuje jakiś obcy znak (litera), która może spowodować zmianę interpretacji nazwy zmiennej, np. ‘to był${odmiana}’. Poza takimi przypadkami używaj samego $kod.


(Krzychu224) #4

Co masz na myśli z tym zapisem? I jaki zapis to zapis normalny?

I po co mi tam realescapestring ?

Zapis

${kod}

też nie działa.

Jakieś inne pomysły?


(Pablo_Wawa) #5

Sprawdź ten kod (o ile nie zrobiłem literówki):

$result = mysql_query("UPDATE `users` SET `user_website` = '".$_POST['website']."', `user_from` = '".$_POST['from']."', `user_imie` = '".$_POST['imie']."', `user_nazwisko` = '".$_POST['nazwisko']."', `user_adres` = '".$_POST['adres']."', `user_kon_loc` = '".$kod."' $up2 WHERE `user_id` = '".$user_data['user_id']."'" );

z tym, że w Twoim kodzie widzę jakiś błąd:

... `user_kon_loc` = '{$kod}' {$up2} WHERE ...

możesz mi wyjaśnić, czemu występują obok siebie te dwie zmienne ($kod i $up2)? Z czego ta druga bez sensu (i bez ‘ciapków’). No chyba że w zmiennej $up2 jest coś, co sprawia, że zapytanie SQL jest poprawne.

Ano po to, że jak ktoś wywoła ten skrypt PHP ze specjalnymi parametrami, ze Ci może namieszać w bazie danych - słyszałeś o SQL Injection? I po to jeszcze, żebyś się uczył i utrwalił poprawnego (bezpiecznego) kodowania tych spraw (z parametrami przekazywanymi do skryptu).