Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Php][MySQL] Składnia zapytania MySQL zależna od formularza Php
Forum PHP.pl > Forum > Bazy danych > MySQL
grzegorzewski
Witam,
Chciałbym stworzyć zapytanie do mysql, w postaci:

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


tak aby to formularz przesyłał po zaznaczeniu stosownej opcji całe wyrażenia do złożenia zapytania MySql, jak w przykładzie, np:

  1. NOT LIKE 'Anna', 'Ewa', 'Adam'

lub
  1. LIKE 'Nowak'

a nie samo 'Anna'... 'Nowak" itp - raz będzie NOT LIKE a raz LIKE itp.
Warunków wyszukiwania jest kilka i chciałbym uniknąć tworzenia dla wszystkich możliwych kombinacji zapytań.
Otrzymuję jednak błąd zapytania podczas próby wysłania takiego formularza php. W jaki inny sposób można stworzyć zapytanie mysql zależne od danych przesłanych z formularza php?
Z góry dziękuję za sugestie.
Mchl
Kod
<?php

$query = "SELECT .. FROM tabela WHERE 1 ";

if($opcjaZformularza) {
  $query .= "AND imie LIKE ...";
} else {
  $query .= "AND imie NOT LIKE ...";
}

...


grzegorzewski
Przyznam, że nie do końca rozumiem, ale nie podałem całości. Formularz ma postać

  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>

Natomiast w wynik.php wygląda tak:

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


Ale takiego zapytanie nie mogę "skleić" bo mi raportuje błąd. Gdy dodam zatem to co napisałeś, czyli:

  1. <?php
  2.  
  3. $result = "SELECT * FROM baza WHERE 1 ";
  4.  
  5. if($imie=Anna) {
  6. $result. = "AND imie LIKE 'Anna'";
  7. }
  8. elseif($imie=Ewa) {
  9. $result .= "AND imie LIKE 'Ewa'";
  10. }
  11. elseif ($imie=Adam) {
  12. $result .= "AND imie LIKE 'Adam'";
  13. }
  14. elseif ($imie=Inne){
  15. $result .= "AND imie NOT LIKE 'Anna', 'Ewa', 'Adam'.";
  16. }
  17. else ($imie) {
  18. $result .= "";
  19. }
  20.  
  21. if($search2) {i tu kolejne...}
  22.  

To przyznam że nie do końca rozumiem - niby powinien dodawać do $result wyrażenie z pętli (if, elseif)
(Usuwam oczywiście LIKE i NOT LIKE z formularza (przesyłam samo "Ania", "Ewa" itd) ale coś nie chce działać.
Jeśli można to proszę o wyjaśnienie na tym lub podobnym przykładzie.
athei
Poczytaj o podstawach w php, mysql.
np.
Kod
$imie=$_POST["imie"];
if($imie=Anna) {
zamiast przypisywać do $imie Anna lepiej byś porównał, poza tym Anna to nie liczba całkowita, więc
Kod
if($imie=='Anna')

Kod
$result = mysql_query("SELECT * FROM baza WHERE imie '$imie' AND nazwisko '$nazwisko' AND medale '$medale'");
gdzie masz znaki = ?
Kod
WHERE imie='$imie' itd

Kod
  $result .= "AND imie NOT LIKE 'Anna', 'Ewa', 'Adam'.";
jak już to
Kod
$result .= "AND imie NOT IN ('Anna', 'Ewa', 'Adam').";
albo
$result .= "AND imie NOT LIKE 'Anna' AND  imie NOT LIKE 'Ewa' AND imie NOT LIKE  'Adam'.";
grzegorzewski
Dzięki za pomoc, od razu poszedłem dalej. No i cały czas się uczę smile.gif.
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.