Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zmienne php a symbole wieloznaczne w zapytaniu sql, Czy da się w zmiennej php uzytej w SLECT przekazać symbol wieloznaczny
DK.log
post 27.05.2009, 21:38:30
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.05.2009

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


Witam.

Z góry proszę o wyrozumiałość bo PHP i SQL zgłębiam aż o 3 dni tongue.gif

Mam następującą bazę:
  1. CREATE TABLE tematy (
  2. id_temat INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. id_przedmiot INTEGER UNSIGNED NULL,
  4. id_wykladowca INTEGER UNSIGNED NULL,
  5. id_wydzial INTEGER UNSIGNED NULL,
  6. temat VARCHAR(500) NULL,
  7. ilosc_wolnych_miejsc INTEGER UNSIGNED NULL,
  8. na_ile_osob INTEGER UNSIGNED NULL,
  9. PRIMARY KEY(id_temat)
  10. )
  11. TYPE=InnoDB;
  12.  
  13. CREATE TABLE pesele (
  14. pesel CHAR(11) NULL
  15. )
  16. TYPE=InnoDB;
  17.  
  18. CREATE TABLE wykladowcy (
  19. id_wykladowca INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  20. imie CHAR(50) NULL,
  21. nazwisko CHAR(50) NULL,
  22. id_wydzial INTEGER UNSIGNED NULL,
  23. pesel CHAR(11) NULL,
  24. PRIMARY KEY(id_wykladowca)
  25. )
  26. TYPE=InnoDB;
  27.  
  28. CREATE TABLE wydzialy (
  29. id_wydzial INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  30. wydzial CHAR(50)NULL,
  31. PRIMARY KEY(id_wydzial)
  32. )
  33. TYPE=InnoDB;
  34.  
  35. CREATE TABLE przedmioty (
  36. id_przedmiot INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  37. przedmiot CHAR(50) NULL,
  38. PRIMARY KEY(id_przedmiot)
  39. )
  40. TYPE=InnoDB;
  41.  
  42. CREATE TABLE zapisy (
  43. id_student INTEGER UNSIGNED NULL,
  44. id_temat INTEGER UNSIGNED NULL
  45. )
  46. TYPE=InnoDB;
  47.  
  48. CREATE TABLE studenci (
  49. id_student INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  50. imie CHAR(50) NULL,
  51. nazwisko CHAR(50) NULL,
  52. id_wydzial INTEGER UNSIGNED NULL,
  53. id_kierunek INTEGER UNSIGNED NULL,
  54. gr_dziek CHAR(8) NULL,
  55. nr_alb CHAR(8) NULL,
  56. PRIMARY KEY(id_student)
  57. )
  58. TYPE=InnoDB;
  59.  
  60. CREATE TABLE kierunki (
  61. id_kierunek INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  62. kierunek CHAR(50)NULL,
  63. PRIMARY KEY(id_kierunek)
  64. )
  65. TYPE=InnoDB;


oraz skrypt php wyświetlający i sortujący dane z tej bazy:

  1. <?php include ('connection.php'); ?>
  2. <html>
  3. <head>
  4. <link rel="stylesheet" href="style.css" type="text/css"/>
  5. </head>
  6. <body>
  7. <center>
  8. <div class="top">
  9. <form action="index.php" method="post">
  10. <table>
  11. <tr>
  12. <td><center>Nr Tematu:</br></br>
  13. <?php
  14. $sql = mysql_query ("SELECT * FROM tematy") or die ("bład w pytaniu");
  15. print "<select name=numer_tematu><option value=>Wybierz";
  16. while ($tab = mysql_fetch_assoc ($sql)) {
  17.    $id_tem = $tab['id_temat'];
  18.    print "<option value=$id_tem>$id_tem";
  19. }
  20. print "</select>";
  21. ?>
  22. </center></td>
  23.  
  24. <td><center>Przedmiot:</br></br>
  25. <?php
  26. $sql = mysql_query ("SELECT * FROM przedmioty ORDER BY przedmiot") or die ("bład w pytaniu");
  27. print "<select name=przedmiot><option value=>Wybierz";
  28. while ($tab = mysql_fetch_assoc ($sql)) {
  29.    $przedmiot = $tab['przedmiot'];
  30.    $id_przedmiot = $tab['przedmiot'];
  31. print "<option value=$id_przedmiot>$przedmiot";
  32. }
  33. print "</select>";
  34. ?>
  35. </center></td>
  36.  
  37. <td><center>Wykładowca:</br></br>
  38. <?php
  39. $sql = mysql_query ("SELECT * FROM wykladowcy ORDER BY nazwisko") or die ("bład w pytaniu");
  40. print "<select name=wykladowca><option value=>Wybierz";
  41. while ($tab = mysql_fetch_assoc ($sql)) {
  42.    $w_imie = $tab['imie'];
  43.    $w_nazwisko = $tab['nazwisko'];
  44.    $id_wykladowca = $tab['id_wykladowca'];
  45. print "<option value=$id_wykladowca>$w_nazwisko $w_imie";
  46. }
  47. print "</select>";
  48. ?>
  49. </center></td>
  50.  
  51. <td><center>Wydział:</br></br>
  52. <?php
  53. $sql = mysql_query ("SELECT * FROM wydzialy ORDER BY wydzial") or die ("bład w pytaniu");
  54. print "<select name=wydzial><option value=>Wybierz";
  55. while ($tab = mysql_fetch_assoc ($sql)) {
  56.    $wydzial = $tab['wydzial'];
  57.    $id_wydzial = $tab['id_wydzial'];
  58. print "<option value=$id_wydzial>$wydzial";
  59. }
  60. print "</select>";
  61. ?>
  62. </center></td>
  63.  
  64. <td><center>Temat:</br></br>
  65. <input type="text" name="fraza">Szukaj frazy w temacie</input>
  66. </center></td>
  67.  
  68. <td><center>Ilość wolnych miejsc</br>
  69. <?php
  70. print "<select name=ilosc><option value=>Wybierz";
  71. $il=1;
  72. while ($il < 6) {
  73. print "<option value=$il>$il";
  74. $il++;
  75. }
  76. print "</select>";
  77. ?>
  78. </center></td>
  79.  
  80. <td><center>Na ile osób:</br></br>
  81. <?php
  82. print "<select name=na_ile><option value=>Wybierz";
  83. $il=1;
  84. while ($il < 6) {
  85. print "<option value=$il>$il";
  86. $il++;
  87. }
  88. print "</select>";
  89. ?>
  90. </center></td>
  91.  
  92. <td><center>Akcja:</br></br>
  93. <input type="submit" value="Sortuj" />
  94. </center></td>
  95. </tr>
  96. </form>
  97.  
  98. <?php
  99. $compare_nr_tem = $_POST['numer_tematu'];
  100. $compare_przedmiot = $_POST['przedmiot'];
  101. $compare_wykladowca = $_POST['wykladowca'];
  102. $compare_wydzial = $_POST['wydzial'];
  103. $compare_ilosc = $_POST['ilosc'];
  104. $compare_na_ile = $_POST['na_ile'];
  105. $fraza = $_POST['fraza'];
  106.  
  107. $wynik = mysql_query ("SELECT * FROM tematy WHERE ((id_temat LIKE '$compare_nr_tem') AND (id_przedmiot LIKE '$compare_przedmiot') AND (id_wykladowca LIKE '$compare_wykladowca') AND (id_wydzial LIKE '$compare_wydzial') AND (ilosc_wolnych_miejsc LIKE '$compare_ilosc') AND (na_ile_osob LIKE '$compare_na_ile')) AND (temat LIKE \"%$fraza%\") ") or die ("bład w pytaniu");
  108.  
  109. while ($rekord = mysql_fetch_assoc ($wynik)) {
  110.    $id_temat = $rekord['id_temat'];
  111.    
  112.    $id_przedmiot = $rekord['id_przedmiot'];
  113.    $pobierz_nazwe = mysql_query ("SELECT * FROM przedmioty WHERE id_przedmiot='$id_przedmiot'") or die ("blad w pytaniu");
  114.    $wyswietl_nazwe = mysql_fetch_assoc($pobierz_nazwe);
  115.    $przedmiot = $wyswietl_nazwe['przedmiot'];
  116.    
  117.    $id_wykladowca = $rekord['id_wykladowca'];
  118.    $pobierz_nazwe = mysql_query ("SELECT * FROM wykladowcy WHERE id_wykladowca='$id_wykladowca'") or die ("blad w pytaniu");
  119.    $wyswietl_nazwe = mysql_fetch_assoc($pobierz_nazwe);
  120.    $wykladowca_imie = $wyswietl_nazwe['imie'];
  121.    $wykladowca_nazwisko = $wyswietl_nazwe['nazwisko'];
  122.    
  123.    $id_wydzial = $rekord['id_wydzial'];
  124.    $pobierz_nazwe = mysql_query ("SELECT * FROM wydzialy WHERE id_wydzial='$id_wydzial'") or die ("blad w pytaniu");
  125.    $wyswietl_nazwe = mysql_fetch_assoc($pobierz_nazwe);
  126.    $wydzial = $wyswietl_nazwe['wydzial'];
  127.    
  128.    $temat = $rekord['temat'];
  129.    
  130.    $wolne = $rekord['ilosc_wolnych_miejsc'];
  131.    
  132.    $ile = $rekord['na_ile_osob'];
  133.    
  134.    print "<tr><td>$id_temat</td><td>$przedmiot</td><td>$wykladowca_imie<br/>$wykladowca_nazwisko</td><td>$wydzial</td><td>$temat</td><td>$wolne</td><td>$ile</td>";
  135.    if ($wolne != 0) {print "<td><a href=dopiszdo.php?$id_temat>Dopisz sie do tematu nr $id_temat</a></td>";}
  136.    else {print "<td>Temat nr $id_temat jest już zajęty.</td></tr>";}
  137. }
  138. mysql_close($connection);
  139. print "zmienna nr tematu wynosi teraz: $compare_nr_tem";
  140. ?>
  141. </table>
  142. </div>
  143. </center>
  144. </body>
  145. </html>


Problem polega na tym, że zapytanie sql sortujące dane pobiera dane ze zmiennych, które z kolei przekazane są z formularza z list wyboru i pola tekstowego niezależnie od tego czy one tam są czy nie (czy w polu tekstowym jest coś wpisane czy nie oraz czy wybrana jest jakaś pozycja z listy.

Zapytanie sql jest złożone przy użyciu operatorów AND.

Sądziłem, ze w momencie kiedy dla danej kolumny nie będzie wybrana, żadna wartość, a nie ustawie żadnej wartości domyślnej przy <option value=> (a więc zmienna domyślnie pozostaje pusta), zapytanie pobierze wszystkie rekordy, a okazuje się, ze zapytanie szuka pustych pól w danej kolumnie, a przez użycie and, wystarczy jedna pusta zmienna, żeby nie wyświetliło nic.

Moge zmienić domyślną wartość pola formularza (a więc zmiennej przekazanej do selct'a) na dowolną wartość właśnie przy options value, ale czy istnieje jakakolwiek wartość, która posłuży za wzorzec odpowiadający dowolnej wartości??

Krótko mówiąc, jaką wartość należy nadać tej zmiennej, żeby select wybrał każdy rekord??

Jeśli nie istnieje taki symbol to jak inaczej rozwiązać sprawę prawidłowego wyszukiwania danych w powyższym skrypcie??

Może jakiś zaawansowany if??

a może zapytanie powinno być inaczej skonstruowane??

Wiem, że mógłbym użyć symboli wieloznacznych jak w przypadku zmiennej fraza, ale wtedy np. kiedy podam wybiorę cyfrę 1 wyświetli rekordy od id 1, 11-19. i wszystkie zawierające gdziekolwiek jedynkę.

Bardzo proszę o pomoc. Musze oddać działający projekt na zaliczenie przedmiotu za 1,5tyg, a to tylko jego część i utknąłem na teym sortowaniu danych.

Z góry dziękuje.

Czekam...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
dr_bonzo
post 27.05.2009, 22:16:57
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Zbuduj sobie cos w postaci:

  1. <?php
  2. $where = "WHERE ";
  3. ...
  4. if ( $_POST['compare_nr_tem'] ) // jak tu bedzie zero lub pusty string to nie doda tego warunku
  5. {
  6.   $where .= " AND id_temat LIKE '" . $_POST['compare_nr_tem'] . "'";
  7. }
  8.  
  9. // itd
  10. ?>


Nie zapomnij o eskejpowaniu danych i sql injection


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
DK.log
post 28.05.2009, 23:09:45
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.05.2009

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


Dobry pomysł.

Jak rozumiem składnia $zmienna .= cośtam poprostu dodaje do zmiennej kolejną frazę... czyli wtym wypadku cośtam, tak questionmark.gif
[jeśli zmienna miała wartość lubie to to po zabiegu j/w będzie miała wartość lubiecostam]questionmark.gif

Tak jak zaznaczyłem na początku od 3 (teraz czterech) dni zajmuje się php i mysql i niestety, ale nie jestem pewien czy wiem co to jest eskejpowanie danych. Znalazłem coś takiego , ale nie wiele rozumiem z tego opisu, a w dodatku tłumaczenie jest troszkę kiepskie. To samo tyczy się sql injection blinksmiley.gif

Chciałem też zapytać dlaczego mam używać
  1. <?php
  2. if ( $_POST['compare_nr_tem'] )
  3. ?>

skoro w moim skrypcie jest
  1. <?php
  2. $compare_nr_tem = $_POST['numer_tematu'];
  3. ?>
questionmark.gif
W takim wypadku chyba powinienem użyć warunku:
  1. <?php
  2. if ( $compare_nr_tem )
  3. ?>
lub zamiennie:
  1. <?php
  2. if ($_POST['numer_tematu'])
  3. ?>
questionmark.gif

Chyba, ze coś źle rozumiem??

No i jeszcze jedno pytanko... Czy po takim zabiegu, jaki opisałeś, zapytanie ma wyglądać np. tak:
  1. <?php
  2. $wynik = mysql_query ("SELECT * FROM tematy '$where' ") or die ("bład w pytaniu");
  3. ?>
questionmark.gif

Będę wdzięczny za dalsze podpowiedzi i dziękuje za pomoc.

Ja w akcie desperacji miałem już pisać prawie 30 if'ów, które przewidując wszystkie możliwe kombinacje "pustości" zmiennym lub ich "nie pustości" wywoływałyby konkretne (w pełni opisane) zapytania SQl'a wstydnis.gif Zupełnie jak rachunek prawdopodobieństwa na piechote tongue.gif

Ten post edytował DK.log 28.05.2009, 23:21:37
Go to the top of the page
+Quote Post
erix
post 29.05.2009, 11:24:13
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Jak rozumiem składnia $zmienna .= cośtam poprostu dodaje do zmiennej kolejną frazę... czyli wtym wypadku cośtam, tak

Wszystko jest w manualu, poczytaj.

Cytat
Chciałem też zapytać dlaczego mam używać

Cytat
skoro w moim skrypcie jest

To było tylko przykładowo.

Cytat
No i jeszcze jedno pytanko... Czy po takim zabiegu, jaki opisałeś, zapytanie ma wyglądać np. tak:

Tak jakby. Ale lepiej dmuchać na zimne i przeczytaj przyklejony temat o SQL Injection.

Cytat
Ja w akcie desperacji miałem już pisać prawie 30 if'ów, które przewidując wszystkie możliwe kombinacje "pustości" zmiennym lub ich "nie pustości" wywoływałyby konkretne (w pełni opisane) zapytania SQl'a

A po co? Pętla + jeden if" title="Zobacz w manualu PHP" target="_manual sprawdzający, czy zmienna jest pusta.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DK.log
post 29.05.2009, 19:09:50
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.05.2009

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


No dobrze. Poczytałem o eskejpowaniu i o injection...
Tylko, że mi nie chodzi zbytnio o bezpieczeństwo... Nie w tym wypadku. Po pierwsze projekt nigdy nie ujrzy światła dziennego. Po drugie to tylko na zaliczenie przedmiotu.

Pisze po raz kolejny ponieważ zbudowałem coś takiego:
  1. <?php
  2. $compare_nr_tem = $_POST['numer_tematu'];
  3. $compare_przedmiot = $_POST['przedmiot'];
  4. $compare_wykladowca = $_POST['wykladowca'];
  5. $compare_wydzial = $_POST['wydzial'];
  6. $compare_ilosc = $_POST['ilosc'];
  7. $compare_na_ile = $_POST['na_ile'];
  8. $fraza = $_POST['fraza'];
  9.  
  10. $where = "WHERE (temat LIKE \"%$fraza%\")"; // szukanie frazy wystąpi tak czy siak, nie spowoduje to błędu w pytanie nawet jeśli wszytskie zmienne będa puste
  11.  
  12. if ($compare_nr_tem)
  13. {
  14.  $where .= " AND (id_temat LIKE '$compare_nr_tem')";
  15. }
  16.  
  17. if ($compare_przedmiot)
  18. {
  19.  $where .= " AND (id_przedmiot LIKE '$compare_przedmiot')";
  20. }
  21.  
  22. if ($compare_wykladowca)
  23. {
  24.  $where .= " AND (id_wykladowca LIKE '$compare_wykladowca')";
  25. }
  26.  
  27. if ($compare_wydzial)
  28. {
  29.  $where .= " AND (id_wydzial LIKE '$compare_wydzial')";
  30. }
  31.  
  32. if ($compare_ilosc)
  33. {
  34.    $where .= " AND (ilosc_wolnych_miejsc LIKE '$compare_ilosc')";
  35. }
  36.  
  37. if ($compare_na_ile)
  38. {
  39.  $where .= " AND (na_ile_osob LIKE '$compare_na_ile')";
  40. }
  41.  
  42. print "zmienna where : $where";                    
  43. $wynik = mysql_query ("SELECT * FROM tematy '$where' ") or die ("bład w pytaniu");
  44. ?>


I jedyny z tego efekt przy próbie wyświetlania danych to "błąd w pytaniu" sciana.gif

Sprawdziłem, czy prawidłowo przypisało wszystko do zmiennej $where - jest OK.
Jak wyświetlić zmienną $where widać ładne zapytanie (a właściwie część zapytania) typu
WHERE (id_temat LIKE 'wartość zmiennej') AND (id_przedmiot LIKE 'wartosc zmiennej 2') ... itd

Jeśli wyszstkie zmienne są puste wartość zmiennej $where wygląda tak: WHERE (temat LIKE "%%")

Wygląda na to, ze sama konstrukcja
  1. <?php
  2. $wynik = mysql_query ("SELECT * FROM tematy '$where' ") or die ("bład w pytaniu");
  3. ?>
jest błedna.

Co zrobiłem nie tak??

Ten post edytował DK.log 29.05.2009, 19:27:16
Go to the top of the page
+Quote Post
Marr
post 29.05.2009, 20:15:02
Post #6





Grupa: Zarejestrowani
Postów: 103
Pomógł: 1
Dołączył: 19.08.2008
Skąd: Warszawa

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


wiesz co, na prawdę rzuciłem tylko okiem przez przypadek, nie przeczytałem nawet większości Twojego posta, nie mogę teraz, ale obstawiam, że robisz gdzieś błąd związany z rozwijaniem zmiennych. Tam gdzie łączysz stringa ze zmienną php rób tak: $costam = 'tu string, a tu juz'.$zmienna.'a tu znowu string'; Dzięki temu nie będziesz miał problemów. Ogólnie zmienne php ujęte w " " są rozwijane przez parser, a w ' ' traktowane jako string. Możesz łączyć łańcuchy ze zmiennymi dzięki . Może coś pomoże w Twoim problemie.

Cytat(DK.log @ 29.05.2009, 20:09:50 ) *
(.....)

Jeśli wyszstkie zmienne są puste wartość zmiennej $where wygląda tak: WHERE (temat LIKE "%%")

Wygląda na to, ze sama konstrukcja
  1. <?php
  2. $wynik = mysql_query (&#092;"SELECT * FROM tematy '$where' \") or die (\"bład w pytaniu\");
  3. ?>
jest błedna.

Co zrobiłem nie tak??


Jeszcze raz rzuciłem okiem i faktycznie tu masz błąd. Popraw na tak:
  1. <?php
  2. $wynik = mysql_query ("SELECT * FROM tematy $where ") or die ("bład w pytaniu");
  3. ?>


oczywiście jeżeli dobrze masz skonstruowaną zmienną $where to będzie działać, a przynajmniej taki mi się wydaje.
Go to the top of the page
+Quote Post
DK.log
post 29.05.2009, 21:30:36
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.05.2009

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


Próbowałem, tak
  1. <?php
  2. $wynik = mysql_query ("SELECT * FROM tematy $where ") or die ("bład w pytaniu");
  3. ?>

tez nie działało sad.gif

Poddałem się i zrobiłem if'ami na piechotę tongue.gif

Masakra była jak to pisałem... cieszyłem się tylko, że musiałem robic tylko tyle ifów ile wynosi kombinacja bez powtórzen z 6'ciu, a nie np. z 12'tu blinksmiley.gif

Ale grunt, że działa yahoo.gif i mogę ruszyć z miejsca... Jak starczy czasu to poprawie no jakies rozsądniejsze rozwiązanie.

Dzięki wszystkim za pomoc, a poniżej zamieszczam przesłanie dla potomności:
UCZCIE SIĘ DOKŁADNIE A NIE PO ŁEBKACH BO BĘDZIECIE MUSIELI ZAMIAST KILKU LINIJEK PISAĆ COŚ TAKIEGO:

  1. <?php
  2. if ($compare_nr_tem and $compare_przedmiot and $compare_wykladowca and $compare_wydzial and $compare_ilosc and $comppare_na_ile) {
  3. $wynik = mysql_query ("SELECT * FROM tematy WHERE (id_temat LIKE '$compare_nr_tem') AND (id_przedmiot LIKE '$compare_przedmiot') AND (id_wykladowca LIKE '$compare_wykladowca') AND (id_wydzial LIKE '$compare_wydzial') AND (ilosc_wolnych_miejsc LIKE '$compare_ilosc') AND (na_ile_osob LIKE '$compare_na_ile') AND (temat LIKE \"%$fraza%\") ") or die ("bład w pytaniu");
  4.    } else {
  5.        if ($compare_nr_tem and $compare_przedmiot and $compare_wykladowca and $compare_wydzial and $compare_ilosc and $comppare_na_ile == NULL) {
  6.        $wynik = mysql_query ("SELECT * FROM tematy WHERE (id_temat LIKE '$compare_nr_tem') AND (id_przedmiot LIKE '$compare_przedmiot') AND (id_wykladowca LIKE '$compare_wykladowca') AND (id_wydzial LIKE '$compare_wydzial') AND (ilosc_wolnych_miejsc LIKE '$compare_ilosc') AND (temat LIKE \"%$fraza%\") ") or die ("bład w pytaniu");
  7.        //.......wszystkie się nie zmieszczą, ale łącznie było 26 (czy 27 - trzeba byłoby policzyć klamerki na końcu  tongue.gif  ) ifów...
  8. } else {
  9.                                                                                                            if ($compare_nr_tem == NULL  and $compare_przedmiot == NULL and $compare_wykladowca == NULL and $compare_wydzial == NULL and $compare_ilosc and $comppare_na_ile) {
  10.                                                                                                            $wynik = mysql_query ("SELECT * FROM tematy WHERE (ilosc_wolnych_miejsc LIKE '$compare_ilosc') AND (na_ile_osob LIKE '$compare_na_ile') AND (temat LIKE \"%$fraza%\") ") or die ("bład w pytaniu");
  11.                                                                                                            } else {
  12.                                                                                                                if ($compare_nr_tem == NULL and $compare_przedmiot == NULL and $compare_wykladowca == NULL and $compare_wydzial == NULL and $compare_ilosc == NULL and $comppare_na_ile == NULL and $fraza) {
  13.                                                                                                                $wynik = mysql_query ("SELECT * FROM tematy WHERE (temat LIKE \"%$fraza%\") ") or die ("bład w pytaniu");
  14.                                                                                                                } else {
  15.                                                                                                                    if ($compare_nr_tem == NULL and $compare_przedmiot == NULL and $compare_wykladowca == NULL and $compare_wydzial == NULL and $compare_ilosc == NULL and $comppare_na_ile == NULL and $fraza == NULL) {
  16.                                                                                                                    $wynik = mysql_query ("SELECT * FROM tematy ") or die ("bład w pytaniu");
  17.                                                                                                                    }}}}}}}}}}}}}}}}}}}}}}}}}}}}
  18. ?>

sciana.gif tiredsmiley.gif

Ten post edytował DK.log 29.05.2009, 21:31:52
Go to the top of the page
+Quote Post
erix
post 29.05.2009, 21:35:35
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat(DK.log @ 29.05.2009, 22:30:36 ) *
sciana.gif

Zgadza się, podlicz gdzieś, ile zapytań leci do bazy, bo jestem ciekaw. tongue.gif


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
DK.log
post 3.06.2009, 16:44:15
Post #9





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.05.2009

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


Zapytań jest tyle ile warunków, a więc 26, ale zapytanie do bazy "leci" jedno. Przecież if wykonuje polecenie jeśli warunek jest spełniony...

Sposób na pewno jest "na około" lub jak kto woli "na piechotę", ale serwer sql nie jest nadwyrężony nadmierną ilością zapytań.

Co ja poradzę, że sposób
  1. <?php
  2. (&#092;"SELECT * FROM tematy '$where' \")
  3. ?>

nie działałquestionmark.gif

Ten post edytował DK.log 3.06.2009, 16:46:37
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: 21.06.2025 - 12:31