Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Zwracanie wyniku z bazy
pkosciej
post 22.02.2012, 00:11:59
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 16.02.2012

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


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
Go to the top of the page
+Quote Post
Kostek.88
post 22.02.2012, 00:29:49
Post #2





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


  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

Ten post edytował Kostek.88 22.02.2012, 00:35:07
Go to the top of the page
+Quote Post
pkosciej
post 22.02.2012, 00:59:16
Post #3





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 16.02.2012

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


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?

Ten post edytował pkosciej 22.02.2012, 00:59:35
Go to the top of the page
+Quote Post
kadlub
post 22.02.2012, 07:23:28
Post #4





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


  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

Ten post edytował kadlub 22.02.2012, 13:05:03
Go to the top of the page
+Quote Post
viking
post 22.02.2012, 08:48:18
Post #5





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


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.


--------------------
Go to the top of the page
+Quote Post
Kostek.88
post 22.02.2012, 09:58:52
Post #6





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


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

Ten post edytował Kostek.88 22.02.2012, 09:59:14
Go to the top of the page
+Quote Post
slawek3422
post 22.02.2012, 10:07:26
Post #7





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


na moje oko Wasze podpowiedzi są błędne, zliczacie mysql_num_rows ale wcześniej nie ma wysłanego zapytania do bazy
Go to the top of the page
+Quote Post
piotrooo89
post 22.02.2012, 10:09:08
Post #8


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




mysql_query, polecam poczytać...


--------------------
Go to the top of the page
+Quote Post
pkosciej
post 22.02.2012, 12:52:22
Post #9





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 16.02.2012

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


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
Go to the top of the page
+Quote Post
piotrooo89
post 22.02.2012, 13:40:41
Post #10


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




podstawowe operacje na stringach (i nie chodzi mi o majtki)exclamation.gif!

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


--------------------
Go to the top of the page
+Quote Post
slawek3422
post 22.02.2012, 14:56:55
Post #11





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


powinno być :
  1. $sql = 'SELECT marka FROM SAMOCHODY WHERE marka LIKE "'.$samochod.'"';
Go to the top of the page
+Quote Post
Kostek.88
post 22.02.2012, 15:46:54
Post #12





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


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...
Go to the top of the page
+Quote Post
viking
post 22.02.2012, 16:25:27
Post #13





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


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

Ten post edytował viking 22.02.2012, 16:27:29


--------------------
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 Wersja Lo-Fi Aktualny czas: 6.07.2025 - 22:08