Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Zwracanie wyniku z bazy
Forum PHP.pl > Forum > Przedszkole
pkosciej
Oto mój kawałek pseudokodu:

Użytkownik pisuje w formularz markę samochodu (parametr - 'samochod') dalszym etapie przekazywane jest to do kodu php

  1. $samochod = $_REQUEST['samochod']; //deklarowanie zmiennej samochód podanej w formularzu
  2.  
  3. echo $samochod; //wyświetla wcześniej wpisana markę samochodu
  4.  
  5. $sql = 'SELECT marka FROM samochody WHERE marka LIKE "$samochod"';
  6.  
  7. $zalog = mysql_query($sql);
  8.  
  9. echo "$zalog"; // questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?
  10. if (!$zalog)
  11. exit ('Problem')


teraz chciałbym taki myk aby:
jeżeli w bazie znajduje się taka marka samochodu to wyskoczy komunikat "jest taki samochod"
jezeli w bazie nie ma takiego samochodu tzn MySQL zwrócił pusty wynik (zero rekordów) wyskoczy komunikat "nie ma takiego samochodu"

jak to wykonać?
Prosze o pomoc
Kostek.88
  1.  
  2. $query = 'SELECT marka FROM samochody WHERE marka LIKE "%' . $samochod . '%"';
  3.  
  4. if( mysql_num_rows($query) > 0 ) {
  5. echo 'jest';
  6.  
  7. } else {
  8. echo 'nie ma';
  9. }


Krótki komentarz: nie używałem nigdy tablic $_REQUEST, po prostu dawałem $_GET albo $_POST i w forumlarzu definiowałem method jako get lub post. Poza tym uważam, że zamiast LIKE lepiej jest po prostu użyć znaku równości...

  1. $query = 'SELECT marka FROM samochody WHERE marka = "' . $samochod . '"';


po prostu jak wpiszesz fiat 12 , to wyskoczy Ci, że masz taki samochód... a w bazie możesz mieć fiat 126p tongue.gif Dlatego = zamiast LIKE
pkosciej
no niestety wyskakuje błąd

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/public_html/samochod/car.php


btw: czemu uważasz ze używanie $_REQUEST jest złe? Mają jakieś wady? Nauczyłem się ich z książki jako uniwersalne, załatwiające wszystkie sprawy. Coś z nimi nie tak?
kadlub
  1. $query = mysql_query("SELECT marka FROM samochody WHERE marka='".$samochod."'")or die(mysql_error());
  2.  
  3. $dane=mysql_num_rows($query) ;
  4. if( $dane > 0 ) {
  5. echo 'jest';
  6.  
  7. } else {
  8. echo 'nie ma';
  9. }
  10.  
  11.  
  12.  

i teraz powinno ci się wyświetlić gdzie masz błąd w zapytaniu
viking
To wyrzuć tą książkę do kosza. Nie masz żadnej kontroli nad danymi, nie wiesz skąd pochodzą (GET, POST, COOKIE) a w dodatku stosujesz frywolnie wrzucając od razu do zapytania (SQL INJECTION). Takie nawyki od początku to zerowe bezpieczeństwo późniejszych stron. Skoro i tak dopiero się uczysz zacznij czytać o PDO.
Kostek.88
Wrzuc to zapytanie do phpMyAdmin do okienka QUERY (ZAPYTANIE), czy jak to sie tam zwalo. Przetestujesz w ten sposob czy dziala.

Cytat(pkosciej @ 22.02.2012, 00:59:16 ) *
btw: czemu uważasz ze używanie $_REQUEST jest złe? Mają jakieś wady? Nauczyłem się ich z książki jako uniwersalne, załatwiające wszystkie sprawy. Coś z nimi nie tak?


Nie napisalem, ze to jest zle smile.gif Po prostu nigdy nie uzywalem i nie wiem czy prawidlowo sie to zachowuje. Ale jak zauwazayl tutaj ktos, powinienes miec kontrole nad tym, czy dane wedruja przez POST, czy GET itd.... wlasnie po to zostaly te tablice w PHP 5 wprowadzone. W PHP 4 bylo tak, ze dane odbierales po prostu dana zmienna, bez uzywania tablic, np. miales pole formularza o nazwie "ja" to w PHP odebrane bylo to jako zmienna $ja. W zasadzie wychodzi na to, ze $_REQUEST to jakby cofniecie sie do zachowan z PHP4 tongue.gif

PS. Jesli sie myle, bo to niech mnie ktos poprawi wink.gif
slawek3422
na moje oko Wasze podpowiedzi są błędne, zliczacie mysql_num_rows ale wcześniej nie ma wysłanego zapytania do bazy
piotrooo89
mysql_query, polecam poczytać...
pkosciej
Biorąc Wasze wszystkie uwagi wydedukowałem coś takiego:

  1. $samochod = $_POST['samochod'];
  2. echo $samochod;
  3. $sql = 'SELECT marka FROM SAMOCHODY WHERE marka LIKE "$samochod" ';
  4.  
  5. $result = mysql_query($sql);
  6. $num_results = mysql_num_rows($result);
  7. print "<p>Ilosc: ".$num_results."</p>";
  8.  
  9. if ( $num_results > 0 ) {
  10. echo 'jest';}
  11. else
  12. {
  13. echo 'nie ma';
  14. }


Polecenie to działa nie wywala żadnych błędów... prawie działa... jednak zwraca zły wynik.
kiedy w formularzu wpisze Ford to wartość $samochod przyjmuje Ford i to ładnie wyświetla mi się w echo $samochod.
jednak $num_results wyświetla mi wynik zerowy, czemu tak jest?
Próbowałem wpisać nazwę samochodu na sztywno czyli zamieniłem linijke:

  1. $sql = 'SELECT marka FROM SAMOCHODY WHERE marka LIKE "$samochod" ';


na

  1. $sql = 'SELECT marka FROM SAMOCHODY WHERE marka LIKE "Ford" ';


Wynik zwrócił mi się wtedy prawidłowy równy jeden, nie rozumiem czemu jak podstawiam zmienna w zapytaniu to to nie działa
piotrooo89
podstawowe operacje na stringach (i nie chodzi mi o majtki)exclamation.gif!

  1. $sql = "SELECT marka FROM SAMOCHODY WHERE marka LIKE '$samochod'";
slawek3422
powinno być :
  1. $sql = 'SELECT marka FROM SAMOCHODY WHERE marka LIKE "'.$samochod.'"';
Kostek.88
Cytat(slawek3422 @ 22.02.2012, 10:07:26 ) *
na moje oko Wasze podpowiedzi są błędne, zliczacie mysql_num_rows ale wcześniej nie ma wysłanego zapytania do bazy


No tak, ja sie walnalem... sorry za wprowadzenie w blad...
viking
Jak już to powinno być:

  1. $sql = 'SELECT marka FROM SAMOCHODY WHERE marka LIKE "'.mysql_real_escape_string($samochod).'"';


S?robuj zastosować PDO jak radziłem wcześniej bo się przejedziesz na takim kodzie. I nie będziesz miał też problemu jak to zapisać, escape zrobić bo zastosujesz placeholder (SELECT marka FROM SAMOCHODY WHERE marka LIKE ?)
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.