Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] zapytanie UPDATE nie działa
Forum PHP.pl > Forum > Przedszkole
bigda
Chcę uaktualnić rekord. Wpisałem kod:

CODE
if ($wszystko_OK==true)
{
$polaczenie -> query("UPDATE klienci SET imie='$imie', nazwisko='$nazwisko', malzonek_imie='$imiemalzonek', malzonek_nazwisko='$nazwiskomalzonek', telefon='$telefon', miasto='$miasto', ulica='$ulica', nr_domu='$nrdomu', nr_mieszkania='$nrmieszkania', pesel='$pesel', farmakoterapia='$farmakoterapia', poprzednie_terapie='$psychoterapia', opis='$opis', kontrakt='$kontrakt', cena_atualna='$cena' WHERE id_klienta='$id'");


$_SESSION['zapisano']="Zmodyfikowano wpis w bazie danych";
}


Warunek jest spełniony - wyświetla się $_SESSiON['zapisano'] potraktowany printem;
Połączenie jest nawiązane.
Wszystkie zmienne użyte w zapytaniu są ustawione - wyświetlają się printem.
UPDATE wpisane w phpMyAdminie działa.

Po kliknięciu na guzik submit w formularzu strona się odświeża, w bazie nic się nie zmienia.

Gdzie tkwi błąd?
mrk9109
fragment od mnie przerób pod siebie spróbuj tak :

  1. $zapytanie = $polaczenie->query("UPDATE `aktualnosci` SET
  2. `tytul`='".$tytul."',
  3. `tresc`='".$tresc."'
  4. WHERE id = '". $id."';");
nospor
@mrk9109 twoje poprawki maja sie nijak do problemu.

@bigda by miec 100% pewnosci ze odpala ci sie ten IF to daj
  1. if ($wszystko_OK==true)
  2. {
  3. $polaczenie -> query("UPDATE klienci SET imie='$imie', nazwisko='$nazwisko', malzonek_imie='$imiemalzonek', malzonek_nazwisko='$nazwiskomalzonek', telefon='$telefon', miasto='$miasto', ulica='$ulica', nr_domu='$nrdomu', nr_mieszkania='$nrmieszkania', pesel='$pesel', farmakoterapia='$farmakoterapia', poprzednie_terapie='$psychoterapia', opis='$opis', kontrakt='$kontrakt', cena_atualna='$cena' WHERE id_klienta='$id'");
  4.  
  5. echo "UPDATE klienci SET imie='$imie', nazwisko='$nazwisko', malzonek_imie='$imiemalzonek', malzonek_nazwisko='$nazwiskomalzonek', telefon='$telefon', miasto='$miasto', ulica='$ulica', nr_domu='$nrdomu', nr_mieszkania='$nrmieszkania', pesel='$pesel', farmakoterapia='$farmakoterapia', poprzednie_terapie='$psychoterapia', opis='$opis', kontrakt='$kontrakt', cena_atualna='$cena' WHERE id_klienta='$id'";
  6. die('Widzisz mnie?');
  7.  
  8. $_SESSION['zapisano']="Zmodyfikowano wpis w bazie danych";
  9. }
viking
W zależności od sterownika (w sumie nie wiadomo czy PDO, czy mysqli) obejmij zapytanie blokiem try/catch i ustaw wyświetlanie błędów. Dodatkowo korzystaj z bindowania parametrów.
bigda
mrk9109 Spróbowałem, niestety żadnych zmian.
nospor Wyświetla się wszystko - zapytanie, treść wypełnionych pól formularza - czyli niepuste zmienne, a na koniec napis "widzisz mnie?". If chyba jednak działa.


viking Jestem totalnie zielony, bo dopiero co zacząłem się uczyć, a i to tylko hobbystycznie robię, choć staram się zrobić coś użytkowego dla siebie. Było nie było nie wiem, czy dobrze zastosowałem się do Twojej rady.
Błędy wyświetliłem kodem

  1. <?PHP
  2. ini_set( 'display_errors', 'On' );
  3. error_reporting( E_ALL );
  4. ?>


Zapytanie:

Kod
if ($wszystko_OK==true)
{
    try {
    
$polaczenie -> query("UPDATE klienci SET imie='$imie', nazwisko='$nazwisko', malzonek_imie='$imiemalzonek', malzonek_nazwisko='$nazwiskomalzonek', telefon='$telefon', miasto='$miasto', ulica='$ulica', nr_domu='$nrdomu', nr_mieszkania='$nrmieszkania', pesel='$pesel', farmakoterapia='$farmakoterapia', poprzednie_terapie='$psychoterapia', opis='$opis', kontrakt='$kontrakt', cena_atualna='$cena' WHERE id_klienta='$id'");
         }
catch(Exception $e)
{
echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o rejestrację w innym terminie!</span>';
echo '<br />Informacja developerska: '.$e;    
    
}

$_SESSION['zapisano']="Zmodyfikowano wpis w bazie danych";
}



Bez zmian - nic się nie zmienia, nie wyświetlają się błędy wyświetla. O PDO i o bindowaniu coś słyszałem, ale jeszcze nie umiem. Będę grzebać w necie i uczyć się. Połączenie jest w mysqli.

Zastanawiam się, czy problemem może być to, że nie wszystkie pola formularza są obowiązkowe, a puste pole, to pusta zmienna w zapytaniu. Wcześniej w innym skrypcie już miałem taki problem, ale rozwiązałem go naokoło - tutaj takiej metody nie dam rady zastosować. Cały skrypt jest identyczny jak w innym miejscu tej samej stronki, tylko zmienne są inne. Tam też występują w zapytaniu puste zmienne i wszystko działa jak należy.
nospor
Skoro uzywasz mysqli to blad zapytania masz tutaj
http://php.net/manual/en/mysqli.error.php
Wyswietl go sobie po wykonanym zapytaniu
viking
W mysqli potrzebujesz dodatkowo
  1. mysqli_report(MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ALL);
O bindowaniu obowiązkowo poczytaj bo pewnie te zmienne pochodzą od usera -> sql injection.
bigda
Jesteście wielcy!!!!

Pomogły porady nt. wyświetlania błędów - jak się wyświetlił, sprawa okazała się banalna. W zapytaniu użyłem nazwy kolumny cena_atualna zamiast cena_aktualna. Sto razy sprawdzałem literówki i nie zauważyłem.

O bindowaniu na pewno poczytam, ale na razie zagrożenia nie ma, bo ja będę jedynym użytkownikiem tego, co akurat teraz robię. To taka baza danych dla mojej działalności, a w php piszę sobie panel do obsługi bazy. Ale mam już następny pomysł, więc cały czas będę się doszkalał.

Jeszcze raz bardzo dziękujęexclamation.gif!
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.