Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Php][MySQL] Zapytanie MySQL zależne od formularza Php
grzegorzewski
post 18.04.2010, 08:36:16
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.04.2010

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


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.
Go to the top of the page
+Quote Post
jareeny
post 18.04.2010, 08:39:33
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 23
Dołączył: 2.10.2007
Skąd: Słupsk

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


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


chyba pozapominałeś o znakach = czyż nie?


--------------------
banan wszyscy.
Go to the top of the page
+Quote Post
grzegorzewski
post 18.04.2010, 09:25:35
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.04.2010

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


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.

Go to the top of the page
+Quote Post
slimy
post 18.04.2010, 22:59:02
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 13.09.2009

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


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?
Go to the top of the page
+Quote Post
lucaa44
post 19.04.2010, 10:02:05
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 26.05.2007

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


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)

Go to the top of the page
+Quote Post
nospor
post 19.04.2010, 10:22:54
Post #6





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





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


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

"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
grzegorzewski
post 19.04.2010, 12:46:02
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.04.2010

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


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.
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: 17.06.2025 - 12:24