Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] [MySQL] Jak zrobić żeby zapytani WHERE było puste?
Forum PHP.pl > Forum > Przedszkole
bobo168
Mam taki problem robie wyszukiwarke kawałałów. I mam problem jak zrobić żeby gdy nic nie zostało wpisane czy wybrane przeglądarka pokazywała wszytskie kawały. Mam już praktycznie to zrobione ale niestety wyskakuje błąd o treści:
Kod
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1=1' at line 1

A robie to tak:
  1. <html>
  2. <head>
  3. <title>CMS: Administrowanie kawałami</title>
  4. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
  5. <body>
  6. <h1>Administrowanie kawałami</h1>
  7. <?php
  8. if (!mysql_connect('localhost', 'root', '')) 
  9. {
  10. exit('Nie można nawiązać połączenie z bazą danych!<br>Błąd: '.mysql_error());
  11. }
  12. //wyebieranie bazy
  13. if (!mysql_select_db('ijdb')) 
  14. {
  15. exit('Nie ma takiej bazy danych!<br>Błąd: '.mysql_error());
  16. }
  17. //podstawowa insturkcja select
  18. $select= 'SELECT DISTINCT id, tekstkawalu';
  19. $from= 'FROM kawal';
  20. $where= 'WHERE 1=1 ';
  21. $aid= $_POST['aid'];
  22. if ($aid != '')
  23. {
  24. $where .= "AND idautora='$aid'";
  25. }
  26. $cid= $_POST['cid'];
  27. if ($cid != '')
  28. {
  29. $from .= ', kategoriakawalu';
  30. $where .= "AND id=idkawalu AND idkategorii='$cid'";
  31. }
  32. $searchtext= $_POST['searchtext'];
  33. if ($searchtext != '')
  34. {
  35. $where .= "AND tekstkawalu LIKE '%$searchtext%'";
  36. }
  37. ?>
  38. <table>
  39. <tr><th>Tekst kawału</th><th>Opcje</th></tr>
  40. <?php
  41. $jokes= @mysql_query($select . $from . $where);
  42. if (!$jokes)
  43. {
  44. echo '</table>';
  45. }
  46. while ($joke = mysql_fetch_array($jokes)) 
  47. {
  48. echo "<tr valign='top'>n";
  49. $id=$joke['id'];
  50. $joketext=htmlspecialchars($joke['tekstkawalu']);
  51. echo "<td>$joketext</td>n";
  52. echo "<td><a href='editjoke.php?id=$id'>Edytuj</a> |". "<a href='deletejoke.php?id=$id'>Usuń</a> </td>n";
  53. echo "</tr>n";
  54. } 
  55. ?>
  56. </table>
  57.  
  58. <p><a href='jokes.php'>Nowe wyszukiwanie</a> </p>
  59. </body>
  60. </html>

Moje pytanie jest następujące jak zrobić żeby zapytanie WHERE mogło być puste? Przeczytałem w pewnej książce o tym że można zrobić coś takiego w taki sposób : WHERE 1=1;. Ale wyskakuje mi błąd o treści podanej wyżej. Nie jeste pewny czy to chodzi o wogóle o to 1=1, bo nie moge sobie przetłumaczyć tego błędu na polski bo poprostu nie umie angielskiego.
PROSZE O POMOC!
My4tic
Po co w ogole tak kombinujesz? Jeśli nie potrzebujesz WHERE to nie dodawaj go do zapytania.

Widze, ze próbujesz poskładac zapytanie. Spróbuj tak:

  1. <?php
  2. $array=array(); 
  3.  if ( !empty($_POST[zmienna])) array_push($array, "nazwa_pola = '$_POST[zmienna]'");
  4.  if ( !empty($_POST[zmienna2])) array_push($array, "nazwa_pola2 > '$_POST[zmienna2]'");
  5. ...
  6. ...
  7. ...
  8. $sWarunki = implode(" AND ", $array);
  9. $sSQL = "SELECT * FROM nazwa_tabeli";
  10. if ( !empty($sWarunki)) $sSQL = $sSQL." WHERE ".$sWarunki;
  11. ?>
Wieviór
  1. <?
  2. $jokes= @mysql_query($select . $from);
  3. ?>


Tak nie może być? tongue.gif
bobo168
Tyle że ja sie ucze z książki i w tej książce tak jest i nie chce sie wyłamywać po za nią bo potem bedą problemy z resztą materiału. ...

EDIT: @Wieviór nie tak nie może być po dgy wybiore jakiś parametr to co? tongue.gif
Wieviór
To radzę zmienić książkę. Bo jak w niej napisali, że najlepiej zrobić pusty WHERE za pomocą jakiegoś where 1=1 zamiast napisać, żeby tego nie dodawać w zapytaniu, to jest to conajmniej dziwna książka.
SongoQ
Cytat
nie chce sie wyłamywać po za nią bo potem bedą problemy

Badz bardziej odwaznym tongue.gif Jesli chodzi o SQL to WHERE 1 = 1 jest poprawna skladnia
nospor
ale panowie, luknijcie na kod:
  1. <?php
  2. $from= 'FROM kawal';
  3. $where= 'WHERE 1=1 ';
  4. ?>

A teraz sobie polaczcie oba stringi i co otrzymamy? :
Cytat
FROM kawalWHERE 1=1

No i mi nie wmowicie ze to jest poprawna skladnia tongue.gif
Powinna chyba wygladac tak:
Cytat
FROM kawal WHERE 1=1
smile.gif
A kod php, np. tak:
  1. <?php
  2. $from= 'FROM kawal ';
  3. $where= 'WHERE 1=1 ';
  4. ?>

Byle spacja a tyle zamieszania...

edit:
a tu masz link, jak sie to robi troche bardziej profesjonalniej:
http://forum.php.pl/index.php?showtopic=36...mp;#entry204618

ps: wyrzuc te ksiązke winksmiley.jpg
SongoQ
Heheheh dobre, kazdy patrzyl ale nikt nie znalazl bledu.

@nospor Jestes jak debuger, zawsze cos znajdziesz nie tak tongue.gif
bobo168
Cytat
ps: wyrzuc te ksiązke winksmiley.jpg

Nie po to ją kupowałem żeby ją wyrzucać jak narazie tylko dzięki niej wiem co to jest mysql i php aaevil.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.