Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP,MYSQL]Szybie pytanie:dlaczego moje zmienne mają wartość:NULL?
Forum PHP.pl > Forum > Przedszkole
walldeck
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. ?>
erix
Bo masz wyłączone register_globals. tongue.gif

Było.
nospor
bo do danych z forma nalezy dobierac sie tak: $_POST['nazwapola']
http://nospor.pl/php-faq-n29.html#faq-3
walldeck
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
nospor
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
walldeck
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
nospor
o litosci.
czy twoje pole nazywa sie $data_od czy moze data_od?
nie: $_POST['$data_od']
a: $_POST['data_od']
walldeck
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?
nospor
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.
Pilsener
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.
nospor
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
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.