Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]UPDATE - nie zmienia zawartości tabeli
Forum PHP.pl > Forum > Przedszkole
zearid
Witam. Podejrzewam, że temat był tu wałkowany setki razy ale i tak postanowiłem zapytać.
Zaliczam swoje początki z bazami ( wiem, kod będzie okropny, ale zacząć jakoś trzeba ).

Kod aktualnie wygląda tak, jest to wersja robocza.
  1. $host = 'localhost';
  2. $user = 'root';
  3. $pass = 'root';
  4. $db_select = 'baza';
  5. $con=mysqli_connect($host,$user,$pass,$db_select);
  6. if (mysql_connect($host, $user, $pass) and mysql_select_db($db_select)) {
  7. $edycja_id = $_POST['id_edytuj'];
  8. $id = $edycja_id;
  9. $edycja_tytul = $_POST['tytul'];
  10. $tytul = htmlspecialchars($edycja_tytul, ENT_QUOTES,'UTF-8');
  11. $edycja_opis = $_POST['opis'];
  12. $opis = htmlspecialchars($edycja_opis, ENT_QUOTES,'UTF-8');
  13. mysqli_query($con,"UPDATE galeria SET tutyl=".$tytul." opis=".$opis." WHERE id=".$id." LIMIT 1 SET CHARSET utf8");
  14. echo "<br />Dane zmienione pomyślnie!";
  15. }


Problem jaki mam jest dość banalny. Dane z formularza z wcześniejszego pliku są przekazywane dobrze. Jeżeli wyświetlę treść zapytania przez echo w miejsce zmiennych dostanę przekazane wartości. mysql_error nie zwraca nic.
Wszystko niby działa pięknie i ładnie lecz nie następuje żadna zmiana w tabeli. Dane pozostają te same. Wyszukiwanie po ID ułatwia i wyklucza tu pomyłki. Kombinowałem już z różnym sposobem zapisu wartości, limitem itp. Niestety nie przyniosło skutków. Jak z INSERT, DELETE itp nie miałem większych problemów (kto szuka ten znajdzie zazwyczaj) tak tutaj utknąłem i nie wiem jak to ugryźć ;]

Może ktoś jakoś pomóc?
Albo wskazać błąd albo podesłać linka do jakiejś strony gdzie zobaczę co robię źle?
Samo zapytanie (SET CHARSET utf8 zostało dodane później i nie zmieniło nic a jest dość przydatne przy polskich znakach) opierałem o tutka z w3schools.com o UPDATE właśnie.
Proszęsię nie czepiać tylko o estetykę kodu. Jak tylko całość zacznie funkcjonować będzie poprawiana pod względem czytelności itp ;]
Michael2318
  1. <?php


na:


  1. <?php
  2. ini_set('display_errors', 1);


to:

  1. $con=mysqli_connect($host,$user,$pass,$db_select);
  2. if (mysql_connect($host, $user, $pass) and mysql_select_db($db_select)) {


wywal i zapisz to tak:

  1. mysql_connect($host, $user, $pass)
  2. or die('nie udalo sie polaczyc z baza'.mysql_error());
  3.  
  4. mysql_select_db($db_select)
  5. or die('nie udalo sie wybrac bazy danych'.mysql_error());


to:

  1. mysqli_query($con,"UPDATE galeria SET tutyl=".$tytul." opis=".$opis." WHERE id=".$id." LIMIT 1 SET CHARSET utf8");


Zapisz tak:

  1. $sql = "UPDATE galeria SET tutyl=".$tytul." opis=".$opis." WHERE id=".$id." LIMIT 1 SET CHARSET utf8";
  2. if ( !($result = mysql_query($sql)) )
  3. {
  4. die('error in sql<br>'.mysql_error());
  5. }


Teraz albo pojdzie albo zwróci konkretny bład.
Korzystaj z tego, że php ma tak bogate zwracanie bledow...
miccom
W SET wypisujesz co zmieniasz PO PRZECINKACH... u ciebie brakuje.
  1. SET tutyl=".$tytul." opis=".$opis."

Daj tak
  1. SET tutyl=".$tytul.", opis=".$opis."

Powinno pomóc.
Michael2318
@up
Gdyby wykonał moją instrukcję, dostałby błąd i sam powinien na to wpaść smile.gif
zearid
1. Co do przecinków. Wiem, że brakowało. Próbowałem i tak i tak (spotkałem się z różnymi opiniami na ten temat w sieci). Po prostu już nie zmieniłem w poście (mój błąd).
2. Poprawki niesione.

Generalnie jeżeli jest przesyłany tekst z polskimi znakami to pojawia się problem, przesyłając z formularza cyfry dostaję:
  1. error in sql
  2. Unknown column 'tutyl' in 'field list'


Od razu mówię, że kolumna tytuł istnieje i jest poprawnie nazwana (kolumny to: id, url, tytul, opis, kategoria)

Przesyłając coś z na przykład literą "ł":
(pierwsza treść to: Przykładowy test zapisu)
  1. error in sql
  2. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
  3. '?adowy test zapisu, opis=pliku po edycji WHERE id=18 LIMIT 1' at line 1


Wszystkie dane są przetwarzane pod kątem utf-8

Formularz:
  1. <?php
  2. //Formularz do edycji danych obrazka
  3. $id_edycja = $_POST['id_edycja'];
  4. $id = $id_edycja;
  5. require 'db_config.php';
  6. if (mysql_connect($host, $user, $pass) and mysql_select_db($db_select)) {
  7.  
  8. $edycja = mysql_query("SELECT * FROM galeria WHERE id=$id_edycja");
  9. while($r = mysql_fetch_assoc($edycja)) {
  10. $tytul = htmlspecialchars($r['tytul'], ENT_QUOTES,'UTF-8');
  11. $opis = htmlspecialchars($r['opis'], ENT_QUOTES,'UTF-8');;
  12. echo '<form method="POST" action="edycja_zapis.php" id="edytuj" name="edytuj">
  13. <input name="id_edytuj" value="'.$id.'" type="hidden" />
  14. Tytuł: <input id="tytul" name="tytul" value="'.$tytul.'"><br />
  15. Opis: <textarea id="opis" name="opis">'.$opis.'</textarea><br />
  16. <input type="submit" value="Zapisz" />
  17. </form>';
  18. }
  19.  
  20. }
  21. ?>


Najprawdopodobniej ma także problem ze spacjami w wartościach do zapisu.
Michael2318
Jedyny Twój problem jest taki że nie stosujesz apostrofów i nie odróżniasz stringów od innych wartości...
  1. "UPDATE galeria SET tutyl='".$tytul."', opis='".$opis."' WHERE id=".$id." LIMIT 1 SET CHARSET utf8";
zearid
Wcześniej próbowałem i z i bez apostrofów.
Po wprowadzeniu poprawek sugerowanych na początku faktycznie o tym nie pomyślałem i mój błąd. Po dodaniu apostrofów rusza lecz ma jeszcze jeden mały problem.
nie potrafi znaleźć kolumny tytul w tabeli, kolumnę opis bez problemu.

Przyznam, że robię błędy podstawowe i debilne także lecz każdy uczy się najlepiej na błędach.
Do baz nie mogłem się nigdy przekonać. Dają kolosalne możliwości ale trochę właśnie takimi problemami odstraszają.
nospor
Czytaj komunikaty blędów... pisze ci ze nie ma tutyl a ty w bazie masz zapewne tytul
Widzisz różnice miedzy tymi dwiema nazwami?questionmark.gif
viking
To nie bazy danych odstraszają tylko beznadziejny, nieczytelny sposób kodowania na rozszezeniu które już nie jest wspierane w PHP smile.gif Poczytaj o PDO, pzygotowaniu zapytań, bindowaniu parametrów i uwierz że te problemy znikną.
nospor
@viking nawet PDO nie pomoże jak ktoś robi banalne literówki i nie czyta komunikatów błędów.
viking
Mimo wszystko przy zapisie:

  1. UPDATE galeria SET tytul=?, opis=? WHERE id=?


trochę łatwiej skupić się na znalezieniu błędu. Zwłaszcza gdy początkujący (już pomijając że nie czytają komunikatów) gubią się strasznie w poprawnym złączeniu stringów a sprintf mało kto używa.

edit. A to drugie z kolei wynika z faktu że w polskiej wersji dokumentacji słowem o tym nie wspominają jak widzę.
zearid
Ok. Głupia literówka. Chyba z siebie niepotrzebnie debila zrobiłem. Niestety na starość człowiek ślepnie haha.gif
Teraz już działa jak potrzeba w takim razie dzięki za pomoc i przepraszam za zamieszanie z nie odnalezioną kolumną ;]

Powiem szczerze, że z bazami coś tam kiedyś było ale to edytor generował do nich kod i za cholerę nie nauczyłem się nic z tego, zwłaszcza że program generował dużo śmieciowego kodu.

PDO - będę musiał poczytać. Z bazami staram się jakoś zacząć a przeniesienie galerii z plików do bazy daje spore ułatwienie przy dodawaniu kolejnych rzeczy.
Robię banalne błędy, niestety. Trochę w tym mojej winy a trochę syna (2.5r), który uwielbia kod haha.gif i dopisywanie byle czego więc trochę na szybkiego się pisze.

Generalnie najlepiej jest jak najwięcej czytać, lecz nie zawsze jest kiedy.
Szukałem sporo o update i dla przykładu wszystko wskazywało na użycie mysqli_query zamiast mysql_query i człowiek się dziwi, że brakuje parametrów.

Jeszcze sporo nauki mnie czeka względem baz itp ale każdy wytknięty błąd mimo, że dość do wkurza, jest dobrą lekcją.
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.