Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql]UPDATE nie działa, gdy wywołuję update, czyści mi zawartość updatowanych pól
kreciko
post
Post #1





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Cześć,

  1. print_r($post);
  2. $sql = "UPDATE `labch_olej` SET `1w`='" . $post['1w'] . "',
  3. `2v`='" . $post['2v'] . "' ,
  4. `3r`='" . $post['3r'] . "' ,
  5. `4s`='" . $post['4s'] . "' ,
  6. `5z`='" . $post['5z'] . "' ,
  7. `6l`=' " . $post['6l'] . " ' ,
  8. `7t`=' " . $post['7t'] . " ' ,
  9. `8zz`='" . $post['8zz'] . "' WHERE `trafo_id`=" . $_GET['id'] . " LIMIT 1;";
  10. echo $sql;
  11. $res = mysql_query($sql);
  12. if ($res == null) {
  13. echo "Nie udało się zmienić danych!";
  14. return null;
  15. }
  16. echo "Dane zmienione pomyślnie!";


Robię coś takiego. Na początku wypisuję sobie zawartość tablicy post i wszystko jest ładnie. Następnie składam zapytanie i je sobie wypisuję. Później wypisuję to zapytanie sobie. I je wywołuje. Moje zdziwienie gdy otwieram phpMyadmina, gdy widzę wartości pól 1w,2v,3r,4s, 5z, 6l, 7t, 8zz dla updatowanego id są puste.

  1. Array ( [1w] => jasny [2v] => 61 [3r] => 11000 [4s] => 0,005 [5z] => 11 [6l] => 0,1 [7t] => 30 [8zz] => on [wyslij] => Prześlij )
  2. UPDATE `labch_olej` SET `1w`='jasny', `2v`=' 61 ' , `3r`=' 11000 ' , `4s`=' 0,005 ' , `5z`=' 11 ' , `6l`=' 0,1 ' , `7t`=' 30 ' , `8zz`=' on ' WHERE `trafo_id`=1 LIMIT 1;
  3. Dane zmienione pomyślnie!


Jeżeli przekleję to wyechowane zapytanie do phpMyAdmin to się updatuje poprawnie.

Zrzut bazy:

  1. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  2.  
  3. --
  4. -- Struktura tabeli dla `labch_olej`
  5. --
  6.  
  7. CREATE TABLE IF NOT EXISTS `labch_olej` (
  8. `trafo_id` int(5) NOT NULL,
  9. `user_id` int(5) NOT NULL,
  10. `1w` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  11. `2v` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  12. `3r` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  13. `4s` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  14. `5z` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  15. `6l` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  16. `7t` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  17. `8zz` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  18. PRIMARY KEY (`trafo_id`)
  19. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  20.  
  21. --
  22. -- Zrzut danych tabeli `labch_olej`
  23. --
  24.  
  25. INSERT INTO `labch_olej` (`trafo_id`, `user_id`, `1w`, `2v`, `3r`, `4s`, `5z`, `6l`, `7t`, `8zz`) VALUES
  26. (1, 4, '', ' ', ' ', ' ', ' ', ' ', ' ', ' '),
  27. (2, 4, 'jasny', '61', '11000', '0,005', '11', '0,1', '30', 'on');



A dane pochodzą z fomularza w html: <form method="post" action="costam.php?action">


Siedzę nad tym problemem 3 dzień i nic nie mogę zdziałać. A jeszcze dodam, że to samo jest, gdy usunę rekord i dodam go na nowo.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
vermis
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

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


mysql_error() zwarca stringa czyli:


mysql_query() zwraca FALSE kiedy jest błąd, więc
  1. if (!$res) {...}


Skoro zapytanie jest dobre to jedynie tu może być jakieś przekłamanie.


--------------------
Go to the top of the page
+Quote Post
kreciko
post
Post #3





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Niestety mysql_error() nie zwrócił nic. Zmiana warunku w if'ie nie zmieniła także nic. Na bazie danych nie ma żadnego triggera.
Go to the top of the page
+Quote Post
GwynBleidD
post
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 9
Dołączył: 16.01.2010
Skąd: Kraków

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


`trafo_id` to primary_key, także jest unikalny, więc limit jest Ci niepotrzebny smile.gif Może bez limit pójdzie. PS. daj cały kod php pomiędzy znaczniki <pre> i </pre> to będzie lepiej wynik odczytywać (nowe linie).
Go to the top of the page
+Quote Post
nospor
post
Post #5





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




@GwynBleidD limit sluzy w tym przypadku do optymalizacji. Jak masz milion rekordów to po znaleziueniu tego rekordu z danym ID mysql nie szuka już wiecej. Bez limit mysql by szukał nadal.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
GwynBleidD
post
Post #6





Grupa: Zarejestrowani
Postów: 28
Pomógł: 9
Dołączył: 16.01.2010
Skąd: Kraków

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


Hmm... zawsze myślałem, że jeśli zadamy silnikowi MySQL do szukania wartość, która jest unikalna (primary key albo unique) to poprzestanie on szukania na tej jednej i nie będzie kontynuował szukania, gdyż na pewno drugiej nie znajdzie.
Go to the top of the page
+Quote Post
nospor
post
Post #7





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




To machnij testa na milionie rekordów. Sam z chęcią sprawdzę w praktyce jak to jest smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kreciko
post
Post #8





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Cytat
`trafo_id` to primary_key, także jest unikalny, więc limit jest Ci niepotrzebny Może bez limit pójdzie.

I bez limitu nie działa:/

Cytat
PS. daj cały kod php pomiędzy znaczniki <pre> i </pre> to będzie lepiej wynik odczytywać (nowe linie).


Nie rozumiem co masz na myśli.

Ten post edytował kreciko 5.01.2011, 14:21:46
Go to the top of the page
+Quote Post
nospor
post
Post #9





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




czy oby na pewno zrobiles
echo mysql_error();
jak ci kazano?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kreciko
post
Post #10





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Tak. Do tego jeszcze var_dump();
  1. var_dump($post);
  2. //print_r($post);
  3. $sql = "UPDATE `labch_olej` SET `1w`='" . $post['1w'] . "',
  4. `2v`=' " . $post['2v'] . " ' ,
  5. `3r`=' " . $post['3r'] . " ' ,
  6. `4s`=' " . $post['4s'] . " ' ,
  7. `5z`=' " . $post['5z'] . " ' ,
  8. `6l`=' " . $post['6l'] . " ' ,
  9. `7t`=' " . $post['7t'] . " ' ,
  10. `8zz`=' " . $post['8zz'] . " ' WHERE `trafo_id`=" . $_GET['id'] . " LIMIT 1;";
  11. echo $sql;
  12. $res = mysql_query($sql);
  13. if ($res == null) {
  14. echo "Nie udało się zmienić danych!";
  15. return null;
  16. }
  17. echo "Dane zmienione pomyślnie!";
  18.  

Tak to wygląda obecnie.

Mam trzy funkcje, które działają podobnie do tej, i tylko w jeden zmieniłem. Jednak problem nadal jest. Co zauważyłem przed chwilą. Że gdy daję wartość otoczę spacjami czyli np. ' dupa ', i tą wartość updatuję, to te spacje otaczające dupa zostają.

Ten post edytował kreciko 5.01.2011, 15:30:18
Go to the top of the page
+Quote Post
GwynBleidD
post
Post #11





Grupa: Zarejestrowani
Postów: 28
Pomógł: 9
Dołączył: 16.01.2010
Skąd: Kraków

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


Ja bym dał to tak:

  1. var_dump($post);
  2. //print_r($post);
  3. $sql = "UPDATE `labch_olej` SET `1w`='" . $post['1w'] . "',
  4. `2v`=' " . $post['2v'] . " ' ,
  5. `3r`=' " . $post['3r'] . " ' ,
  6. `4s`=' " . $post['4s'] . " ' ,
  7. `5z`=' " . $post['5z'] . " ' ,
  8. `6l`=' " . $post['6l'] . " ' ,
  9. `7t`=' " . $post['7t'] . " ' ,
  10. `8zz`=' " . $post['8zz'] . " ' WHERE `trafo_id`=" . $_GET['id'] . " LIMIT 1;";
  11. echo $sql;
  12. $res = mysql_query($sql);
  13. if (!$resl) {
  14. echo "Nie udało się zmienić danych! Błąd: ".mysql_error();
  15. return null;
  16. }
  17. echo "Dane zmienione pomyślnie!";


Ten post edytował GwynBleidD 6.01.2011, 18:11:55
Go to the top of the page
+Quote Post
kreciko
post
Post #12





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Widze, że zmieniłeś tylko warunek w if'ie. Problem nadal jest.
Go to the top of the page
+Quote Post
GwynBleidD
post
Post #13





Grupa: Zarejestrowani
Postów: 28
Pomógł: 9
Dołączył: 16.01.2010
Skąd: Kraków

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


Temat stary, ale chyba mam rozwiązanie. Możliwe, że masz w zapytaniu (z tablicy post) jakieś nieprintowalne znaki (np. nulle) które zaburzają coś. Otocz wszystkie $post[*] w zapytaniu funkcją mysql_real_escape_string.
Go to the top of the page
+Quote Post
kreciko
post
Post #14





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Dzięki. Na przyszłość się przyda:)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 04:23