Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP,MYSQL]Szybie pytanie:dlaczego moje zmienne mają wartość:NULL?
walldeck
post
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 13.03.2006
Skąd: Rogoźno Wlkp.

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


Witam.

Robię prosta wyszukiwarkę która ma znajdować imiona i nazwiska z innej tabeli(osoby) oraz zakupy które ta osoba dokonała z drugiej tabeli (zakupy).
Nie wiem czy wogole dobrze rozwiązałem ta wyszukiwarke bede wdzięczny za korekty i za odpowiedz dlaczego one maja wartość NULL po sprawdzeniu ich funkcją VAR_DUMP.

Wyszukiwarka HTML:
  1. <b>Wyszukiwarka </b><br><br>
  2.  
  3.  
  4. <form action="wyniki.php" method="post">
  5. Szukane imie<br>
  6. <input type = "text" name="imie" type=text> <br>
  7. Szukane nazwisko<br>
  8. <input type = "text" name="nazwisko" type=text > <br>
  9. <br><br>
  10. Szukaj data od:<br>
  11. <input type = "text" name="data_od" type=text> <br>
  12. Szukaj data do:<br>
  13. <input type = "text" name="data_do" type=text > <br>
  14. <input type=submit value="szukaj">
  15. </form>


Przetwarzanie w PHP:
  1. <?php
  2. var_dump($data_od, $data_do,$imie,$nazwisko);    
  3. $data_od = addslashes($data_od);
  4. $data_do = addslashes($data_do);  
  5. $imie= addslashes($imie);  
  6. $nazwisko = addslashes($nazwisko);    
  7.  
  8.  
  9. include("function.php");
  10.  
  11. $query = "select * from osoby where imie, nazwisko like '%".$imie."%'AND '%".$nazwisko."%'" ;
  12. $query1 = "select * from zakupy where data_zakupu BETWEEN '".$data_od."' AND '".$data_do."'";
  13. $result = mysql_query($query);  
  14. $result1 = mysql_query($query1);
  15. $num_results = mysql_num_rows($result);  
  16. $num_results2 = mysql_num_rows($result1);
  17.  
  18. print "<p>Ilość znalezionych imion, nazwisko: ".$num_results."</p>";  
  19. for ($i=0; $i <$num_results; $i++)  {  
  20.    $row = mysql_fetch_array($result);    
  21.    print ($i+1).". ";  
  22.    print stripslashes($row["imie"]);    
  23.    print ", Imie: ";    
  24.    print stripslashes($row["nazwisko"]);    
  25.    print "Nazwisko:";
  26.    print "<br>";
  27. }
  28.  
  29. print "<p>Znalezione daty: ".$num_results2."</p>";  
  30. for ($j=0; $j <$num_results2; $j++)  {  
  31.    $row = mysql_fetch_array($result1);    
  32.    print ($j+1).". ";  
  33.    print stripslashes($row["data_od"]);    
  34.    print ", Data Od: ";    
  35.    print stripslashes($row["data_do"]);    
  36.    print "Data Do::";
  37.    print "<br>";
  38. }
  39.  
  40.  
  41. ?>


Ten post edytował walldeck 15.01.2009, 21:35:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Bo masz wyłączone register_globals. tongue.gif

Było.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
nospor
post
Post #3





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




bo do danych z forma nalezy dobierac sie tak: $_POST['nazwapola']
http://nospor.pl/php-faq-n29.html#faq-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
walldeck
post
Post #4





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 13.03.2006
Skąd: Rogoźno Wlkp.

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


Zmieniłem na:
  1. <?php
  2.   var_dump($data_od, $data_do,$imie,$nazwisko);
  3. $data_od = addslashes($_POST['$data_od']);
  4. $data_do = addslashes($_POST['$data_do']);  
  5. $imie= addslashes($_POST['$imie']);  
  6. $nazwisko = addslashes($_POST['$nazwisko']);    
  7.  
  8.  
  9. include("function.php");
  10.  
  11. $query = "select * from osoby where imie, nazwisko like '%".$imie."%'AND '%".$nazwisko."%'" ;
  12. $query1 = "select * from zakupy where data_zakupu BETWEEN '".$data_od."' AND '".$data_do."'";
  13. $result = mysql_query($query);  
  14. $result1 = mysql_query($query1);
  15. $num_results = mysql_num_rows($result);  
  16. $num_results2 = mysql_num_rows($result1);
  17.  
  18. print "<p>Ilosc znalezionych imion, nazwisko: ".$num_results."</p>";  
  19. for ($i=0; $i <$num_results; $i++)  {  
  20.    $row = mysql_fetch_array($result);    
  21.    print ($i+1).". ";  
  22.    print stripslashes($row["imie"]);    
  23.    print ", Imie: ";    
  24.    print stripslashes($row["nazwisko"]);    
  25.    print "Nazwisko:";
  26.    print "<br>";
  27. }
  28.  
  29. print "<p>Znalezione daty: ".$num_results2."</p>";  
  30. for ($j=0; $j <$num_results2; $j++)  {  
  31.    $row = mysql_fetch_array($result1);    
  32.    print ($j+1).". ";  
  33.    print stripslashes($row["data_od"]);    
  34.    print ", Data Od: ";    
  35.    print stripslashes($row["data_do"]);    
  36.    print "Data Do:";
  37.    print "<br>";
  38. }
  39.  
  40.  
  41. ?>


Register globals zrobilem na OFF w php.ini. I nadal te wartości są NULL

Ten post edytował walldeck 15.01.2009, 21:47:40
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




przeciez var_dump dales przed ustawieniem zmiennych..... no mysl troche.

A ty wlasnie masz wyłączone register_globals i nie waż sie dla wlasnego dobra go włączac. 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
walldeck
post
Post #6





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 13.03.2006
Skąd: Rogoźno Wlkp.

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


ok wstawilem teraz za zeby zaobrazowac. Nospor myśle , wstawialem w rozne miejsca smile.gif Wiec wstawione jest tu:
  1. <?php
  2.  
  3. $data_od = addslashes($_POST['$data_od']);
  4. $data_do = addslashes($_POST['$data_do']);  
  5. $imie= addslashes($_POST['$imie']);  
  6. $nazwisko = addslashes($_POST['$nazwisko']);    
  7.  
  8.   var_dump($data_od, $data_do,$imie,$nazwisko);
  9. include("function.php");
  10.  
  11. $query = "select * from osoby where imie, nazwisko like '%".$imie."%'AND '%".$nazwisko."%'" ;
  12. $query1 = "select * from zakupy where data_zakupu BETWEEN '".$data_od."' AND '".$data_do."'";
  13. $result = mysql_query($query);  
  14. $result1 = mysql_query($query1);
  15. $num_results = mysql_num_rows($result);  
  16. $num_results2 = mysql_num_rows($result1);
  17.  
  18. print "<p>Ilosc znalezionych imion, nazwisko: ".$num_results."</p>";  
  19. for ($i=0; $i <$num_results; $i++)  {  
  20.    $row = mysql_fetch_array($result);    
  21.    print ($i+1).". ";  
  22.    print stripslashes($row["imie"]);    
  23.    print ", Imie: ";    
  24.    print stripslashes($row["nazwisko"]);    
  25.    print "Nazwisko:";
  26.    print "<br>";
  27. }
  28.  
  29. print "<p>Znalezione daty: ".$num_results2."</p>";  
  30. for ($j=0; $j <$num_results2; $j++)  {  
  31.    $row = mysql_fetch_array($result1);    
  32.    print ($j+1).". ";  
  33.    print stripslashes($row["data_od"]);    
  34.    print ", Data Od: ";    
  35.    print stripslashes($row["data_do"]);    
  36.    print "Data Do:";
  37.    print "<br>";
  38. }
  39.  
  40.  
  41. ?>


A efekt jest taki:
Cytat
string(0) "" string(0) "" string(0) "" string(0) ""
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\wyniki.php on line 15

Ilosc znalezionych imion, nazwisko:

Znalezione daty: 0
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




o litosci.
czy twoje pole nazywa sie $data_od czy moze data_od?
nie: $_POST['$data_od']
a: $_POST['data_od']


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

"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
walldeck
post
Post #8





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 13.03.2006
Skąd: Rogoźno Wlkp.

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


Ok, w porządku, faktycznie dałem gafe. Teraz wartości są porządne lecz nie szuka mi ten skrypt. Czy te zapytania MySQLowskie są zrobione poprawnie?
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




Cytat
where imie, nazwisko like '%".$imie."%'AND '%".$nazwisko."%'" ;
blinksmiley.gif
A skad ty zes te skladnie wymyslil? zajrzyj do manuala mysql i zobacz jak sie uzywa WHERE. Masz tam mase przykladow, moze cie oswieci.


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

"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
Pilsener
post
Post #10





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

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


1. Ponazywaj pola w formularzu tak, jak pola w bazie, po których masz szukać
2. Odbieraj albo wszystko za jednym zamachem:
  1. <?php
  2. foreach($_POST as $klucz => $wartosc){
  3.   if(!empty($wartosc)){
  4.      //tu rób walidację przekazywanych wartości
  5.      $kryteria[] = "WHERE $klucz='$wartosc'";
  6.   }
  7. }
  8. if(!empty($kryteria)){$kryteria = ' '.join(" AND ",$kryteria);}
  9. $query = "SELECT * FROM tabela$kryteria";
  10. ?>


Albo wrzucaj po kolei do tablicy każde kryterium szukania, a potem łączysz to join'em + AND w środku. Inaczej się zarobisz, a nic nie zrobisz.

Edit: Oczywiście masz rację Nospor, ale przecież nie będziemy przy każdym rozwiązaniu pisać, jak i po co należy walidować dane odbierane od użytkownika - zresztą nawet zaznaczyłem w kodzie, że ma być walidacja - nazwa klucza może (a nawet powinna) wywoływać określoną funkcję walidującą, np. waliduj_imie, waliduj_miasto, waliduj_data etc. Próba przesłania innego klucza zaowocuje natychmiast komunikatem fatal_error. Jak ktoś nie robi walidacji, to niezależnie od metody odbierania danych będzie miał prędzej czy później przechlapane.

Ten post edytował Pilsener 16.01.2009, 09:25:52
Go to the top of the page
+Quote Post
nospor
post
Post #11





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




Cytat
Ponazywaj pola w formularzu tak, jak pola w bazie, po których masz szukać
No, nie ma to jak dac potencjalnemu hakerowi mozliwosc szukania w naszym serwisie po tym po czym mu sie zamarzy.
Pamietaj tez, ze postem lecą nie tylko pola z kolumanami.
Jesli juz tak bardzo chcesz, to nalezy okreslic tablice, ktora bedzie zawierała dozwolone nazwy kolumn


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

"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

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: 21.08.2025 - 11:09