Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]UPDATE - nie zmienia zawartości tabeli, Problem z update i zmienianiem danych w tabeli
zearid
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 11.03.2012

Ostrzeżenie: (0%)
-----


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 ;]

Ten post edytował zearid 21.03.2013, 17:57:11
Go to the top of the page
+Quote Post
Michael2318
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


  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...
Go to the top of the page
+Quote Post
miccom
post
Post #3





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Michael2318
post
Post #4





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


@up
Gdyby wykonał moją instrukcję, dostałby błąd i sam powinien na to wpaść (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
zearid
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 11.03.2012

Ostrzeżenie: (0%)
-----


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.

Ten post edytował zearid 22.03.2013, 08:17:57
Go to the top of the page
+Quote Post
Michael2318
post
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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";
Go to the top of the page
+Quote Post
zearid
post
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 11.03.2012

Ostrzeżenie: (0%)
-----


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ą.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?(IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


To nie bazy danych odstraszają tylko beznadziejny, nieczytelny sposób kodowania na rozszezeniu które już nie jest wspierane w PHP (IMG:style_emoticons/default/smile.gif) Poczytaj o PDO, pzygotowaniu zapytań, bindowaniu parametrów i uwierz że te problemy znikną.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@viking nawet PDO nie pomoże jak ktoś robi banalne literówki i nie czyta komunikatów błędów.
Go to the top of the page
+Quote Post
viking
post
Post #11





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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ę.

Ten post edytował viking 22.03.2013, 11:11:24
Go to the top of the page
+Quote Post
zearid
post
Post #12





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 11.03.2012

Ostrzeżenie: (0%)
-----


Ok. Głupia literówka. Chyba z siebie niepotrzebnie debila zrobiłem. Niestety na starość człowiek ślepnie (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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ą.


Ten post edytował zearid 22.03.2013, 11:18:22
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 23:18