Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Php][MySQL] Zapytanie MySQL zależne od formularza Php
Forum PHP.pl > Forum > PHP
grzegorzewski
Witam,

Formularz wysyłający zapytanie ma taką postać (skrótowo:)

  1. <form name="szuka" method="post" action="wynik.php">
  2. <center><b>IMIĘ</b></center>
  3. <p><input type="radio" name="imie" value="LIKE 'Anna'">Anna<br>
  4. <input type="radio" name="imie" value="LIKE 'Ewa'">Ewa<br>
  5. <input type="radio" name="imie" value="LIKE 'Adam'">Adam<br>
  6. <input type="radio" name="imie" value="NOT LIKE 'Anna', 'Ewa', 'Adam'">Inne<br>
  7. <input type="radio" name="imie" value="*" checked>Wszystkie</p>
  8. <center><b>NAZWISKO</b></center>
  9. <p><input type="radio" name="nazwisko" value="LIKE 'Nowak'">Nowak<br>
  10. <input type="radio" name="nazwisko" value="LIKE 'Kowalski'">Kowalski<br>
  11. <input type="radio" name="nazwisko" value="NOT LIKE 'Nowak', 'Kowalski'">Inne<br>
  12. <input type="radio" name="nazwisko" value="*" checked>Wszystkie</p>
  13. <center><b>ZDOBYTE MEDALE</b></center>
  14. <p><input type="radio" name="medale" value="0">0<br>
  15. <input type="radio" name="medale" value="1 OR 2">1 lub 2<br>
  16. <input type="radio" name="medale" value="3 OR 4 OR 5">3 -5<br>
  17. <input type="radio" name="medale" value="*" checked>Każda ilość</p>
  18. <input type="Submit" name="Submit" value="SZUKAJ">
  19. </form>

Chciałbym na podstawie przesłanych danych sformułować zapytanie MySQL w postaci (wynik.php):
  1. <?
  2. mysql_connect("localhost","login","haslo");
  3. mysql_select_db("wyniki");
  4. $imie=$_POST["imie"];
  5. $nazwisko=$_POST["nazwisko"];
  6. $medale=$_POST["medale"];
  7. $result = mysql_query("SELECT * FROM baza WHERE imie '$imie' AND nazwisko '$nazwisko' AND medale '$medale'");
  8.  
  9. echo "Wyniki:";
  10. while ($r=mysql_fetch_array($result))
  11. {
  12. $imie=$r["imie"];
  13. $nazwisko=$r["nazwisko"];
  14. $medale=$r["medale];
  15. echo "<P>$imie , $nazwisko, $medale</p>"
  16. }
  17. mysql_free_result($result);
  18. ?>

Niestety php zwraca błąd zapytania. Pytanie do Was: czy można w ten sposób sformułować zapytanie MySQL jak w przykładzie(linia 7) - tzn. tak że zapytanie jest "sklejane" z danych przesłanych przez formularz. Mógłbym usunąć z formularza "LIKE, NOT LIKE" itd, ale chciałbym uniknąć dzięki temu warunków php (if, elseif...), gdyż kolumn jest jeszcze kilka i w konsekwencji warunków będzie kilkadziesiąt. Proszę o jakieś w wskazówki dla forumowiczów obytych z tematem smile.gif
Dziękuję z góry i i pozdrawiam.
jareeny
  1. $result = mysql_query("SELECT * FROM baza WHERE imie '$imie' AND nazwisko '$nazwisko' AND medale '$medale'");


chyba pozapominałeś o znakach = czyż nie?
grzegorzewski
Hmm, nie wiem, nie działa. Chciałbym a by zapytanie miało postać np:
  1. $result = mysql_query("SELECT * FROM baza WHERE imie NOT LIKE 'Anna', 'Ewa', 'Adam' AND nazwisko LIKE Nowak AND medale *");

tak aby to formularz przesyłał po zaznaczeniu stosownej opcji całe wyrażenie:
  1. NOT LIKE 'Anna', 'Ewa', 'Adam'

lub
  1. LIKE 'Nowak'

(A nie tylko 'Anna' czy 'Nowak') i dopiero potem tworzył z tego całe zapytanie. Jak wstawię znaki = to będę miał np.
  1. $result = mysql_query("SELECT * FROM baza WHERE imie = NOT LIKE 'Anna', 'Ewa', 'Adam' AND nazwisko = LIKE Nowak AND medale =*");

A takie zapytanie mi nie przejdzie. Nie wiem czy dobrze wyraziłem o co mi chodzi.

slimy
A moze cos takiego:
  1. SELECT * FROM baza
  2. WHERE imie <> 'Anna' AND imie <> 'Ewa' AND imie <> 'Adam' AND nazwisko = 'Nowak' AND medale = *


tylko co to ma być ta gwiazdka? wszystkie medale?
lucaa44
a moglbys wrzucic tresc bledu ktory wyrzuca Ci mysql?

jezeli nie widac proponuje wykonac samo zapytanie w kliencie mysql.exe z katalogu mysql na localhoscie albo w phpmyadmin.


moim zdaniem powinno byc:

  1. $result = mysql_query("SELECT * FROM baza WHERE imie = '$imie' AND nazwisko = '$nazwisko' AND medale = '$medale'");


apropo kolejnego zapytania:

nie ma takiego czegos jak
  1. WHERE nazwa pola NOT LIKE 'wartosc1', 'wartosc2', 'wartosc3'

(przynajmniej w mysql5.0)

jak już :

  1. $result = mysql_query("SELECT * FROM baza WHERE imie NOT LIKE 'Anna' AND imie NOT LIKE 'Ewa' AND imie NOT LIKE 'Adam' AND nazwisko LIKE Nowak ");


Nie wiem o co chodzi w koncowce
  1. AND medale *
...


jezeli to nie dziala blad musi byc gdzie indziej a nie z powodu znakow '=', sql musi wiedziec jaka ma byc zaleznosc miedzy wartoscia w polu a podana wartoscia, operator zawsze musi byc (czyli tu '=' albo NOT LIKE)

nospor

dales: nazwisko '$nazwisko'
a $nazwisko zawiera LIKE 'Nowak'
czyli w rezultacie otrzymasz
nazwisko 'LIKE 'Nowak''
no przeciez to sieczka a nie zapytanie.

powinno byc
nazwisko $nazwisko

analogicznie reszta.
Na przyszlosc wyswietlaj sobie jak wygląda wygenerowane zapytanie, jaki konkretnie blad dostajesz.
Wszystko masz tutaj:
Temat: Jak poprawnie zada pytanie
jesli bedziesz mial jakis problem, zanim napiszesz, zastosuj sie do podanych tam porad.


Kolejna sprawa, ze takie sqlinjection dajesz hakierowi ze sie w glowie nie miesci smile.gif

ps:
NOT LIKE 'Anna', 'Ewa', 'Adam'
*
jak ty sobie wyobrazales ze te zapytanie bedzie dzialac?
No chyba bez paru ifow sie nie obejdzie.
Moze to ci cos pomoze
http://nospor.pl/wyszukiwarka-zapytanie-za...runkow-n31.html
grzegorzewski
Cytat
dales: nazwisko '$nazwisko'
a $nazwisko zawiera LIKE 'Nowak'
czyli w rezultacie otrzymasz
nazwisko 'LIKE 'Nowak''
no przeciez to sieczka a nie zapytanie.


No tak, faktycznie bez sensu - źle przekleiłem swój przykład.

Cytat
Kolejna sprawa, ze takie sqlinjection dajesz hakierowi ze sie w glowie nie miesci smile.gif

Z tym zagadnieniem dopiero się zapoznaję, mam nadzieję że nie wywróci mi wszystkiego do góry nogami... smile.gif
Dziękuję wszystkim za pomoc i naprowadzenie.
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.