Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]problem z UPDATE
Forum PHP.pl > Forum > Przedszkole
Vodecki
Witam!

mam pewien (dość istotny) problem z instrukcją UPDATE z poziomu skryptu php.
Otóż jeżeli chcę update'ować pole i wstawić w nie wartość zmiennej to do bazy przekazywana jest wartość pusta zamiast prawdziwej wartości zmiennej.
skrypt wyglada tak

  1. <?php
  2. $id=$_GET['id_kat'];
  3. $nazwa_kat_nowy=$_POST['nazwa_kat_nowy'];
  4. if (is_string($nazwa_kat_nowy))
  5. {
  6. echo 'zmienna ok<br>';
  7. }
  8.  
  9.  $zapytanie="UPDATE kategorie SET nazwa='$nazwa_kat_nowy' WHERE id_kat= '$id'";
  10.  
  11.  echo $zapytanie;
  12.  mysql_query($zapytanie);
  13.  echo '<p>'.$nazwa_kat_nowy.'</p>';
  14. ?>


instrukcja UPDATE sama w sobie działa - jeżeli w miejsce $nazwa_kat_nowy wstawie cokolwiek np.
  1. UPDATE kategorie SET nazwa='zmieniona kategoria' WHERE id_kat= '$id'

to instrukcja się wykona i w bazie zostanie zapisana "zmieniona kategoria" w wierszu z id_kat odpowiadającym $id, jednak jeżeli jest zmienna to w bzie zapisuje się puste pole.
wszystkie instrukcje echo które są w kodzie mają na celu sprawdzenie jaka jest wartość zmiennej $nazwa_kat_nowy - jest jak najbardziej prawidłowa tzn taka jak podałem w formularzu.

będe wdzięczny za jakąkolwiek pomoc.
nospor
a mozesz pokazac co wyswietla
echo $zapytanie;
dla przykladowych danych co ci nie dzialaja?
webdice
Dodaj:

  1. <?php
  2. mysql_query($zapytanie) or die (mysql_error ());
  3. ?>


i jeśli wyświetla Ci się błąd to podaj jaki.
lewy87r
witam,

pomin ta linijke:

$nazwa_kat_nowy=$_POST['nazwa_kat_nowy'];

reszte pozostaw bez zmian php/mysql domyslnie odwoluje sie do posta i geta i nie trzeba tej zmiennej deklarowac ;]
i powinno dzialac ;]

ewentualnie sprawdz jakie dane zapisujesz do bazy a jaki typ pola w bazie masz zadeklarowany tongue.gif
Shili
@up
Ale wypada nie pisać w ten sposób, tylko jednak z frazą $_POST, imo to nie ta linijka powoduje błąd.
Straszliwie nieładnie i nieprofesjonalnie jest zczytywać w ten sposób na marginesie. Poza tym w ten sposób jest prościej kontrolować dane pochodzące od użytkowniika. Ba, niech ktoś w get doda zmienną o takiej samej nazwie i bez filtrowania danych będzie trochę zamieszania pewnie.

Kiedyś miałam podobny błąd, tylko z innego typu zapytaniem. Bodajże pomogło mi niewpisywanie zapytania w jednym łańcuchu, tylko łączenie łańcuchów, ale bądź co bądź przychylam się do prośby o wstawienie tego, co wypluwa mysql_error
Vodecki
Cytat
a mozesz pokazac co wyswietla
echo $zapytanie;
dla przykladowych danych co ci nie dzialaja?


dla $nazwa_kat_nowy='test'
wyświetla

  1. UPDATE kategorie SET nazwa='test' WHERE id_kat= '4'


Cytat
i jeśli wyświetla Ci się błąd to podaj jaki.

nie wyświetla błędu i dlatego nie mogę znaleźć rozwiązania

Cytat
reszte pozostaw bez zmian php/mysql domyslnie odwoluje sie do posta i geta i nie trzeba tej zmiennej deklarowac ;]
i powinno dzialac ;]

nie działa

Cytat
ewentualnie sprawdz jakie dane zapisujesz do bazy a jaki typ pola w bazie masz zadeklarowany

typ pola - VARCHAR
nospor
Cytat
dla $nazwa_kat_nowy='test'
wyświetla

SQL
UPDATE kategorie SET nazwa='test' WHERE id_kat= '4'

hmmm, dziwne. To mowisz ze gdy zamiast zmiennej dasz poprostu 'test' to wowczas zadziala? To moze w takim razie jakis dziwne białe znaki idą postem. spróbuj dac trim na zmiennej
  1. <?php
  2. $nazwa_kat_nowy=trim($_POST['nazwa_kat_nowy']);
  3. ?>
Vodecki
Cytat
To mowisz ze gdy zamiast zmiennej dasz poprostu 'test' to wowczas zadziala?

dokładnie tak

Cytat
spróbuj dac trim na zmiennej

niesttey , bez zmian sad.gif
Shili
  1. <?php
  2. $zapytanie="UPDATE kategorie SET nazwa=".${nazwa_kat_nowy}." WHERE id_kat=".${id};
  3. ?>

Spróbuj może zastosować taką składnię; nie mam pojęcia co prawda czy zadziała (skłaniam się ku nie nawet); w razie czego pomiń nawiasy klamrowe jeszcze.

@edit
Oczywiście zeżarłam apostrofy przy edycji; tak na marginesie.
Vodecki
też nie :/
echo jest ok ale nadal wysyła pustą zmienną.
Pilsener
Waliduj wszystko, co idzie postem, np. taką funkcją:
  1. <?php
  2. function tresc_wejscie($tresc)
  3. {
  4.  $tresc = HTMLSpecialChars($tresc);
  5. {
  6. $tresc=addslashes($tresc);
  7. }
  8. $tresc = trim($tresc);
  9.  return $tresc;
  10. }
  11. ?>
- jeśli są znaki nowej linii, to można też je od razu zamienić na <br /> (czy paragrafy, zależy jak leży).
potreb
Pokaż cały kod wraz z formularzem wtedy będzie łatwiej wszystkich przeanalizować
Vodecki
Cytat
Waliduj wszystko, co idzie postem, np. taką funkcją:

waliduje się ładnie tylko nadal bez efektu w momencie zapisu do bazy danych

Cytat
Pokaż cały kod wraz z formularzem wtedy będzie łatwiej wszystkich przeanalizować


Formularz wygląda tak :
  1. <form action="index.php?name=admin_kat_edycja&id_kat=<?php echo $id_kat ?>" method="post">
  2. <input name="nazwa_kat_nowy" type="text" size="20" maxlength="40">
  3. <input name="submit" type="submit" value="zapisz">
  4. </form>
lewy87r
wnioskuje ze przepisales to z bledem ;] ze "echo" konczy sie srednikiem ";"
a method="post" proponuje pisać method="POST" drukowanymi jak jest poprawnie ;] (moze jakies serwery inaczej interpretuja)
Pilsener
  1. ...id_kat=<?php echo $id_kat ?>" >
- nie używaj takich zapisów to unikniesz problemów. Tak jest lepiej:
Kod
echo '<form action="index.php?name=admin_kat_edycja&id_kat="'.$id_kat.'" method="post">';
- a w ogóle najlepiej kod HTML trzymać w templatkach a zmienne tylko podstawiać. Nie zwróciłeś uwagi, że w adresie nie masz zmiennnej? sciana.gif
Vodecki
Cytat
wnioskuje ze przepisales to z bledem ;] ze "echo" konczy sie srednikiem ";"

fakt, mój błąd

Cytat
a method="post" proponuje pisać method="POST" drukowanymi jak jest poprawnie ;] (moze jakies serwery inaczej interpretuja)

też nie działa. Swoją drogą testowałem to na 3 serwerach z takim samym skutkiem :/

Cytat
Nie zwróciłeś uwagi, że w adresie nie masz zmiennnej?

jakiej zmiennej questionmark.gif Przecież nowa nazwa kategorii jest z formularza questionmark.gif
mike
Cytat(lewy87r @ 12.05.2008, 22:05:13 ) *
a method="post" proponuje pisać method="POST" drukowanymi jak jest poprawnie ;] (moze jakies serwery inaczej interpretuja)
Skąd to wywróżyłeś? Z fusów?
A teraz czytamy specyfikację: Element and attribute names must be in lower case a później specyfikację znacznika form gdzie jak byk:
Cytat
<!ATTLIST form
%attrs;
action %URI; #REQUIRED
method (get|post) "get"
enctype %ContentType; "application/x-www-form-urlencoded"
onsubmit %Script; #IMPLIED
onreset %Script; #IMPLIED
accept %ContentTypes; #IMPLIED
accept-charset %Charsets; #IMPLIED
>
Mi to wygląda na małe litery. A Tobie?

No chyba, że mówisz o przestarzałej specyfikacji HTML 4.01. Jest ona sprzed 9 lat, więc to trochę staroć.
potreb
Nie ma co gdybać kiedy nie znamy całości kodu. Pokazujesz części a błąd może leżeć gdzieś indziej.
-lewy87r-
Dobra, to ja bym spróbował zmienić nazwe pola nie "nazwa_nowy_kat" tylko cos takiego: "nazwaxx2" moze niskie spacje mają jakiś wpływ:/ (conajmniej dziwne by to bylo)
może z jakiś względów trzeba dodać do forma enctype??
enctype="application/x-www-form-urlencoded"
Pilsener
Cytat
jakiej zmiennej Przecież nowa nazwa kategorii jest z formularza
- a to:
  1. <?php
  2. $id=$_GET['id_kat'];
  3. ?>
? Mi to wygląda na id pobierane z adresu...

$zapytanie = "selekt coś tam"
Weź teraz echo $zapytanie i się dowiesz, czy zapytanie jest poprawne albo co jest źle. Inaczej nigdy się nie dogadamy.
Vodecki
Cytat
Mi to wygląda na id pobierane z adresu...

zmienna $id_kat jest pobierana z adresu . i z nią nie ma problemu, przekazuje się w zapytaniu bardzo ładnie

problem jest ze zmnieną $nazwa_nowy_kat która jest pobierana z formularza ( $POST['nazwa_nowy_kat']; )

jak już kilka postów wyżej pisałe - echo jest wrzucone praktycznie po każdej instruckji i działa bez zarzutu

Cytat
Dobra, to ja bym spróbował zmienić nazwe pola nie "nazwa_nowy_kat" tylko cos takiego: "nazwaxx2" moze niskie spacje mają jakiś wpływ:/ (conajmniej dziwne by to bylo)
może z jakiś względów trzeba dodać do forma enctype??
enctype="application/x-www-form-urlencoded"


nie pomogło


Natomiast okazuje się ( mój błąd że nie sprawdziłem tego wczesniej sad.gif ) że skrypt działapoprawnie w IE6,IE7, Opera natomiast opisany "błąd" pojawia się w Firefoxie.
-lewy87r-
Trzeba bylo tak odrazu;] hehe narzędzia/wyczysc prywatne dane ;] i powinno dzialac ;] fire fox ma do siebie to ze zapamietuje ustawienia ja na stale mam czyszczenie zeby tego nei rozbic ciagle ;] jak wyczyscisz to powinno dzialac juz bez problemu ;] lecz proponuje tez sobie automatyczne czyszczenie zalaczyc ;]
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.