Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] UPDATE nie działa
Forum PHP.pl > Forum > PHP
sytluk
Witam,

posiadam następujący problem, z którym nie mogę sobie poradzić. Mam zapytanie do bazy danych:

  1. $query = mysql_query("UPDATE dane SET czas='$dane_czasu'") or die('Nie działa: '.mysql_error());


kolumna 'czas' jest typu VARCHAR(100). Wszystko działa idealnie na localhoscie, jednak po wrzuceniu na hosting dane nie chcą sie aktualizować. Kiedy zamiast zmiennej wstawię jakąś wartość, zostanie ona zakutalizwana, jednak kiedy stosuję zmienną, dane pod tą zmienną już nie chcą się zaktualizować. Dla przykładu zastosowałem test:

  1. echo("UPDATE dane SET czas='$dane_czasu'");


Dostałem wynik:
  1. UPDATE dane SET czas='asdf'


Czyli pod zmienną jest wartość "asdf". Funkcja mysql_error() nie pokazuje żadnych błędów. Jednak dlaczego na zewnętrznym serwerze zmienna nie chce zadziałać, mimo ze na localhoscie wszystko pięknie działa?

Pozdrawiam.
jackraymund
1 sprawdz czy połączenie z bazą jest poprawne
2 wejdz do bazy jak masz panel phpmyadmin to możesz przetestować tam swoje zapytania
3. może przyczyną jest brak `` pomiędzy dane? to jest tylda górna nie myl z '
"UPDATE `dane` SET czas='$dane_czasu'"
no_face
  1. echo("UPDATE dane SET czas = '" . $dane_czasu ."'");
sytluk
Połączenie z bazą danych jest dobre, ponieważ przy zastosowaniu:
  1. $query = mysql_query("UPDATE dane SET czas='jakies dane'") or die('Nie działa: '.mysql_error());

fraza "jakies dane" zapisuje się do bazy danych do kolumny 'czas'. Nie działa jedynie w przypadku wstawienia zmiennej.
W phpMyAdminie również wszystko działa dobrze, mysql_error(); nie wyświetla żadnych błędów składni.

Przy zastosowaniu:
  1. $query = mysql_query("UPDATE dane SET czas = '" . $dane_czasu ."'") or die('Nie działa: '.mysql_error());

niestety jest taka sama sytuacja, dane nie zapisują się w bazie.
no_face
Mala podpowiedz. Mozesz sie zainteresowac PDO lub mysqli w zamian za archaiczne mysql_query.

Wracajac do tematu. W zmiennej dane_czasu cos jest oczywiscie? smile.gif

Dorzuc tyldy jak porzednik wspomnial:

  1. echo("UPDATE `dane` SET `czas` = '" . $dane_czasu . "'");
sytluk
Problem jest chyba ze zmiennymi przesyłanymi z formularza.

po zastosowaniu kodu:
  1. $przykladowa = 'jakas wartosc';
  2. $query = mysql_query("UPDATE `dane` SET `czas`='".$przykladowa."'") or die('Nie działa: '.mysql_error());

zmienna zapisuje się do bazy danych, jednak przy zastosowaniu:
  1. $moj_czas = $_POST['czas']; //pod zmienną jest wartość 'Rok'
  2. $query = mysql_query("UPDATE `dane` SET `czas`='".$moj_czas."'") or die('Nie działa: '.mysql_error());


w kolumnie 'dane' pojawia się puste pole.
no_face
Wypadaloby pochwalic sie w tym momencie formularzem.
sytluk
Już się chwalę:
  1. <form action="czas.php?action=wykonaj" method="POST">
  2. <center>
  3. <b>Czas:</b><br>
  4. <select name="czas[]">
  5. <option value="1 dzień">1 dzień</option>
  6. <option value="3 dni">3 dni</option>
  7. <option value="Tydzień">Tydzień</option>
  8. <option value="2 tygodnie"> 2 tygodnie</option>
  9. <option value="Miesiąc">Miesiąc</option>
  10. <option value="2 miesiące">2 miesiące</option>
  11. <option value="3 miesiące">3 miesiące</option>
  12. <option value="6 miesięcy">6 miesięcy</option>
  13. <option value="Rok">Rok</option>
  14. </select>
  15. </center>
  16. <input type="submit" class="submit" value="Zapisz ustawienia reklamy">
  17. </form>


  1. $moj_czas = $_POST['czas'][0]; //pod zmienną jest wartość 'Rok'
  2. $query = mysql_query("UPDATE `dane` SET `czas`='".$moj_czas."'") or die('Nie działa: '.mysql_error());


Problem jest o tyle dziwny, że sam kod testowany był już na kilku hostingach i tylko na jednym nie działa.
no_face
Wg kodu formularza wlasnie:

  1. $_POST['czas'][0]

winno byc, wczesniejszy zapis byl bez indexu 0, mysle, ze teraz juz wszystko jest okej.


Potestuj sobie co przesyla Ci sie przez _POST jezeli dalej bedziesz mial problemy.

  1. echo '<pre>';
  2. print_r($_POST);
sytluk
Wcześniej napisałem "na szybko" i zapomniałem, ale w kodzie cały czas było ok
  1. echo(print_r($_POST));

daje:
  1. Array ( [czas_1] => Array ( [0] => Rok ))

Czyli z przesyłaniem zmiennej wszystko jest ok, tylko o dziwo MySQL'owi się to nie podoba. Czy może kodowanie znaków ma jakieś znaczenie? Jakoś to można sprawdzić?
no_face
Czlowiek glupieje na starosc. Kodowanie znakow zawsze ma znaczenie, jednak tutaj w tym przypadku, bardziej chodzi o cos innego. Tutaj widze zmienna czas_1, domyslam sie, ze tylko sie bawisz i testujesz manipulujac zmiennymi, jednak sprawdz czy masz spojnosc nazewnictwa smile.gif Pomysly mi sie wyczerpaly smile.gif
sytluk
Spójność nazewnictwa jest dobra, ponieważ ten sam plik wrzucony na inny serwer już działa i poprawnie zapisuje dane w bazie danych. Ja również już nie mam pojęcia co może być przyczyną.
phpion
Wklej wynik:
  1. $query = "UPDATE `dane` SET `czas`='".$moj_czas."'";
  2. mysql_query($query) or die('Nie działa: '.mysql_error().', 'SQL: '.$query);
Turson
  1. <select name="czas[]">

[] jest niepotrzebne jak jest mozliwosc wybrania tylko jednej opcji
sytluk
Cytat(phpion @ 29.10.2013, 11:25:55 ) *
Wklej wynik:
  1. $query = "UPDATE `dane` SET `czas`='".$moj_czas."'";
  2. mysql_query($query) or die('Nie działa: '.mysql_error().', 'SQL: '.$query);

Po wykonaniu tego zapytania, nie ma żadnych błędów, jednak dane nie zapisały się w bazie danych.

Sprawdziłem również dla pola typu 'text', niestety problem jest taki sam. Jedynie dane z zmiennych utworzonych zaraz przed zapytaniem zapisują się w bazie danych.
no_face
Jak juz sie bawimy to podaj nam wynik tego:

  1. echo "UPDATE `dane` SET `czas`='".$moj_czas."'";


przy wyslaniu z formularza.
sytluk
Cytat(no_face @ 29.10.2013, 11:42:10 ) *
Jak juz sie bawimy to podaj nam wynik tego:

  1. echo "UPDATE `dane` SET `czas`='".$moj_czas."'";


przy wyslaniu z formularza.


Wynik:
  1. UPDATE `dane` SET `czas`='Rok'

Oczywiście wartość 'Rok' jest wybrana z formularza z listy smile.gif

W przypadku gdy ustawię:
  1. $moj_czas = 'Rok';
  2. echo "UPDATE `dane` SET `czas`='".$moj_czas."'";


Wartość 'Rok' zostanie zapisana w bazie danych bez żadnych problemów.
Turson
Spróbuj tak
  1. <select name="czas">

  1. $moj_czas = $_POST['czas']; //pod zmienną jest wartość 'Rok'
  2. $query = mysql_query("UPDATE `dane` SET `czas`='".$moj_czas."'") or die('Nie działa: '.mysql_error());
sytluk
Cytat(Turson @ 29.10.2013, 11:58:45 ) *
Spróbuj tak
  1. <select name="czas">

  1. $moj_czas = $_POST['czas']; //pod zmienną jest wartość 'Rok'
  2. $query = mysql_query("UPDATE `dane` SET `czas`='".$moj_czas."'") or die('Nie działa: '.mysql_error());

Niestety usunięcie z selecta nawiasów [] oraz usunięcie [0] ze zmiennej również nie pomogło.
nospor
Jesli kod z poprzedniego posta jest na 100% taki jak pokazujesz,to pokaz jeszcze co zwraca dokladnie print_r($_POST);
phpion
To jeszcze raz, co Ci się wyświetla?
  1. ini_set('display_errors', TRUE);
  2.  
  3. $moj_czas = $_POST['czas'];
  4.  
  5. $query = "UPDATE `dane` SET `czas`='".$moj_czas."'";
  6. echo $query;
  7.  
  8. mysql_query($query) or die('Nie działa: '.mysql_error());
  9.  
  10.  
  11. die('OK');
lukkol88
Witam Panowie. I pytanie: a gdzie zapytanie o rekord, który ma być zmieniony? (np. WHERE id=1)
nospor
WHERE nie ma zwiazku z problemem. Czy bedzie WHERE czy go nie bedzie nie zmienia to faktu ze mu nie dziala.
lukkol88
Niezbędnym wydaje mi się zawarcie tego w zapytaniu. Tym bardziej warto sprawdzić, dlatego że problemem jest brak aktualizacji w bazie.
nospor
Jakby mu dzialalo, to bez WHERE by mial wszystko zakutalizowane. SKoro nie ma, wiec to nie problem braku WHERE - logiczne dosc.
lukkol88
W zasadzie fakt. Skoro kolumna czas jest typu varchar można też spróbować użyć nawiasów klamrowych na zmiennej dane czasu - '{$dane_czasu}'.
phpion
Chyba nie ma co dalej gdybać. Autor pewnie już rozwiązał swój problem.
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.