Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][MYSQL]problem z UPDATE, UPDATE nie przekazuje zmiennych do bazy danych
Vodecki
post 12.05.2008, 11:17:11
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.05.2008

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


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.
Go to the top of the page
+Quote Post
nospor
post 12.05.2008, 11:49:10
Post #2





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




a mozesz pokazac co wyswietla
echo $zapytanie;
dla przykladowych danych co ci nie dzialaja?


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

"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
webdice
post 12.05.2008, 11:53:08
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Dodaj:

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


i jeśli wyświetla Ci się błąd to podaj jaki.
Go to the top of the page
+Quote Post
lewy87r
post 12.05.2008, 12:54:04
Post #4





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 10.05.2008

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


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

Ten post edytował lewy87r 12.05.2008, 12:57:20
Go to the top of the page
+Quote Post
Shili
post 12.05.2008, 13:03:07
Post #5





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


@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

Ten post edytował Shili 12.05.2008, 13:04:47
Go to the top of the page
+Quote Post
Vodecki
post 12.05.2008, 13:04:40
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.05.2008

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


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
Go to the top of the page
+Quote Post
nospor
post 12.05.2008, 13:09:40
Post #7





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




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


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

"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
Vodecki
post 12.05.2008, 13:18:19
Post #8





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.05.2008

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


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
Go to the top of the page
+Quote Post
Shili
post 12.05.2008, 13:24:46
Post #9





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


  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.

Ten post edytował Shili 12.05.2008, 13:44:01
Go to the top of the page
+Quote Post
Vodecki
post 12.05.2008, 13:36:25
Post #10





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.05.2008

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


też nie :/
echo jest ok ale nadal wysyła pustą zmienną.
Go to the top of the page
+Quote Post
Pilsener
post 12.05.2008, 14:59:18
Post #11





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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).
Go to the top of the page
+Quote Post
potreb
post 12.05.2008, 14:59:19
Post #12





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


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


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

Go to the top of the page
+Quote Post
Vodecki
post 12.05.2008, 15:58:33
Post #13





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.05.2008

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


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>
Go to the top of the page
+Quote Post
lewy87r
post 12.05.2008, 21:05:13
Post #14





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 10.05.2008

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


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)
Go to the top of the page
+Quote Post
Pilsener
post 13.05.2008, 07:27:25
Post #15





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


  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
Go to the top of the page
+Quote Post
Vodecki
post 13.05.2008, 09:31:55
Post #16





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.05.2008

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


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
Go to the top of the page
+Quote Post
mike
post 13.05.2008, 09:38:08
Post #17





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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ć.
Go to the top of the page
+Quote Post
potreb
post 13.05.2008, 09:46:47
Post #18





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Nie ma co gdybać kiedy nie znamy całości kodu. Pokazujesz części a błąd może leżeć gdzieś indziej.


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

Go to the top of the page
+Quote Post
--lewy87r--
post 13.05.2008, 10:54:11
Post #19





Goście







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"
Go to the top of the page
+Quote Post
Pilsener
post 13.05.2008, 14:13:03
Post #20





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 12.06.2025 - 16:45