Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z wyszukiwaniem.
Forum PHP.pl > Forum > Przedszkole
pikko
Witam. Mam taki oto kod:

  1. $marka=$_POST['marka'];
  2. $model=$_POST['model'];
  3.  
  4. $zapytanie = "SELECT `marka`,'model`,`rokprod' FROM `cars` WHERE 'marka' = '". $marka." 'AND 'model' LIKE '" . $model . "%'";
  5. $wynik = mysql_query($zapytanie);
  6.  
  7. echo '<table>';
  8. while ($cars = mysql_fetch_array($wynik))
  9. {
  10. echo '<tr><td>'. $cars["marka"] .'</td><td>'. $cars["model"] .'Rocznik: ['. $cars["rokprod"] . ']';
  11. }
  12. echo '</table>';


ma on za zadanie wyszukać auta z bazy o podanych z formularza danych (takie zadanie domowe tongue.gif )

i gdy wysyłam z formularza te dane, wywala mi błąd : "Parse error: syntax error, unexpected $end in C:\Program Files\VertrigoServ\www\search.php on line 142"



a linia 142 :

  1. 140: </body>
  2. 141: </html>
  3. 142:

to ta po zakończeniu strony i dalej nic tam nie ma. Nie wiem kompletnie jak to rozwiązać.
Połączenie z baza jest ok, dane z formularza też wysyła poprawnie.
Daiquiri
Sprawdź czy domknąłeś wszystkie nawiasy klamrowe w php
pikko
ok działa, dzięki.

Ale dalej jest problem nie wyświetla wyświetlanego wyniku. A jestem pewny że to co wyszukuje w bazie danych jest.
Blame
Trochę za mało kodu żeby coś stwierdzić. Spróbuj usunąć spacje po '". $marka." między podwójnym a pojedynczym apostrofem. Nie wiem czy to coś da, ale teoretycznie może szukać pola gdzie marka ma spacje na końcu.

  1. $zapytanie = "SELECT `marka`,'model`,`rokprod' FROM `cars` WHERE 'marka' = '". $marka."' AND 'model' LIKE '" . $model . "%'";
thek
Nie stosuj porównania ( = ) dla marki i modelu bo to szuka dokładnie tego ciągu znaków jaki podajesz. Wystarczy, że ktoś wdusi gdzieś spację lub pomyli się o literkę to będziesz miał w wyniku brak rekordów. Stosuj w przypadku ciągów znakowych LIKE '%szukany%'
pikko
no cóż dalej nic się nie wyświetla... oto cały kod, nie mam pojęcia co może być źle:

  1. <html>
  2. <head>
  3. <title>MerikMOTO - Wyszukaj</title>
  4. <?php
  5. include ('styles.php');
  6. ?>
  7. </head>
  8. <body>
  9. <?php
  10. include ('config.php');
  11. ?>
  12.  
  13.  
  14. <div id="box_all">
  15. <div id="box_gora"><a href="index.php"><img src="theme/logo.jpg" border="0"></a></div>
  16. <div id="box_left">
  17. <div id="box_login">
  18. <?php
  19.  
  20. include ("login.php");
  21.  
  22. ?>
  23.  
  24. </div>
  25. <div id="box_menu">
  26.  
  27. <?php
  28. include ("menu.php");
  29. ?>
  30. </div>
  31. </div>
  32. <div id="box_content">
  33. <?php if ( $_GET['type'] == "" ){
  34. echo '
  35. <form action="search.php?type=show" method="POST">
  36. <table>
  37. <tr>
  38. <td id="form_kom">
  39. Marka: <select name="marka">
  40. <option value="wybierz">-- wybierz --</option>
  41. <option value="Acura">Acura</option>
  42. <option value="Alfa Romeo">Alfa Romeo</option>
  43. <option value="Aston Martin">Aston Martin</option>
  44. <option value="Audi">Audi</option>
  45. <option value="Bentley">Bentley</option>
  46. <option value="BMW">BMW</option>
  47. <option value="Brilliance">Brilliance</option>
  48. <option value="Bugatti">Bugatti</option>
  49. <option value="Cadillac">Cadillac</option>
  50. <option value="Chevrolet">Chevrolet</option>
  51. <option value="Chrysler">Chrysler</option>
  52. <option value="Citroën">Citroën</option>
  53. <option value="Dacia">Dacia</option>
  54. <option value="Daewoo">Daewoo</option>
  55. <option value="Daihatsu">Daihatsu</option>
  56. <option value="Dodge">Dodge</option>
  57. <option value="Ferrari">Ferrari</option>
  58. <option value="Fiat">Fiat</option>
  59. <option value="Ford">Ford</option>
  60. <option value="Honda">Honda</option>
  61. <option value="Hummer">Hummer</option>
  62. <option value="Hyundai">Hyundai</option>
  63. <option value="Infiniti">Infiniti</option>
  64. <option value="Isuzu">Isuzu</option>
  65. <option value="Jaguar">Jaguar</option>
  66. <option value="Jeep">Jeep</option>
  67. <option value="Kia">Kia</option>
  68. <option value="Lada">Lada</option>
  69. <option value="Lamborghini">Lamborghini</option>
  70. <option value="Lancia">Lancia</option>
  71. <option value="Land Rover">Land Rover</option>
  72. <option value="Lexus">Lexus</option>
  73. <option value="Lincoln">Lincoln</option>
  74. <option value="Lotus">Lotus</option>
  75. <option value="Maserati">Maserati</option>
  76. <option value="Maybach">Maybach</option>
  77. <option value="Mazda">Mazda</option>
  78. <option value="Mercedes">Mercedes</option>
  79. <option value="Mini">Mini</option>
  80. <option value="Mitsubishi">Mitsubishi</option>
  81. <option value="Nissan">Nissan</option>
  82. <option value="Opel">Opel</option>
  83. <option value="Peugeot">Peugeot</option>
  84. <option value="Plymouth">Plymouth</option>
  85. <option value="Polonez">Polonez</option>
  86. <option value="Pontiac">Pontiac</option>
  87. <option value="Porsche">Porsche</option>
  88. <option value="Renault">Renault</option>
  89. <option value="Rolls-Royce">Rolls-Royce</option>
  90. <option value="Rover">Rover</option>
  91. <option value="Saab">Saab</option>
  92. <option value="Saturn">Saturn</option>
  93. <option value="Sea">Seat</option>
  94. <option value="Smart">Smart</option>
  95. <option value="SsangYong">SsangYong</option>
  96. <option value="Subaru">Subaru</option>
  97. <option value="Suzuki">Suzuki</option>
  98. <option value="Syrena">Syrena</option>
  99. <option value="Škoda">Škoda</option>
  100. <option value="Talbot">Talbot</option>
  101. <option value="Toyota">Toyota</option>
  102. <option value="Trabant">Trabant</option>
  103. <option value="Volkswagen">Volkswagen</option>
  104. <option value="Volvo">Volvo</option>
  105. <option value="Warszawa">Warszawa</option>
  106. <option value="Wartburg">Wartburg</option>
  107. <option value="Yugo">Yugo</option>
  108. <option value="Żuk">Żuk</option>
  109. <option value="Inny">Inny</option>
  110. </select>
  111. </td>
  112. <td id="form_kom">
  113. Model : <br><input type="text" name="model">
  114. </td>
  115. </tr>
  116. <tr><td><input type="submit"/></td></tr>
  117. </form>
  118. </table> ';
  119. }
  120.  
  121.  
  122. elseif ($_GET['type'] == "show" ){
  123. $marka=$_POST['marka'];
  124. $model=$_POST['model'];
  125.  
  126. $zapytanie = "SELECT `marka`,'model`,`rokprod' FROM `cars` WHERE 'marka' = '" . $marka . "' AND 'model' LIKE '" . $model . "%'";
  127. $wynik = mysql_query($zapytanie);
  128.  
  129. echo '<table>';
  130. echo "Wyszukane auta: ";
  131. while ($cars = mysql_fetch_array($wynik))
  132. {
  133. echo '<tr><td>'. $cars["marka"] .'</td><td>'. $cars["model"] .'Rocznik: ['. $cars["rokprod"] . ']';
  134. }
  135. echo '</table>';
  136. }
  137.  
  138. ?>
  139. </div>
  140. <div id="box_stopka"><div>
  141. </div>
  142. </body>
  143. </html>
  144.  
  145.  
  146.  
thek
Zapytanie masz źle... Konkretnie apostrofy źle użyte. Nie baw się w "ciapki" i apostrofy bo one u Ciebie bajzel powoduja... to nie to samo. Wytrimuj $model i walnij tak poprawione zapytanie smile.gif
$zapytanie = 'SELECT marka, model, rokprod FROM cars WHERE marka = \''.$marka.'\' AND model LIKE \'%.( trim($model) ).'%\'';
potreb
[quote name='pikko' date='7.11.2009, 22:32:34 ' post='677901']
no cóż dalej nic się nie wyświetla... oto cały kod, nie mam pojęcia co może być źle:
[/qote]

Ja też nie mam pojęcia dlaczego masz apostrof przy modelu, rokprod zamiast capka
  1. $zapytanie = "SELECT `marka`,'model`,`rokprod' FROM `cars` WHERE 'marka' = '" . $marka . "' AND 'model' LIKE '" . $model . "%'";


Stosuj echo mysql_error();
pikko
Cytat
Ja też nie mam pojęcia dlaczego masz apostrof przy modelu, rokprod zamiast capka


tak mnie w szkole uczyli dry.gif

no ok będę pamiętał na przyszłość, wkleiłem to zapytanie od theka, ale teraz to wywala mi takie błędy

Cytat
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in C:\Program Files\VertrigoServ\www\search.php on line 126


domyślam się że gdzieś jest za dużo tego \ no ale nie wiem gdzie ;|

Cytat
Warning: Division by zero in C:\Program Files\VertrigoServ\www\search.php on line 126

że dzieli przez zero ? nie rozumiem skąd, ale pewnie spowodowane jest to tym 1 błędem tak jak i ten

Cytat
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\VertrigoServ\www\search.php on line 131
thek
Nie za dużo \ tylko jeden ' za mało winksmiley.jpg Było
  1. model LIKE \'%.( trim($model) )

ma być
  1. model LIKE \'%'.( trim($model) )
Zjadłem apostrof po % smile.gif
A co do nauki to nazw kolumn, baz nie obejmuje się niczym albo robi to w odwróconym apostrofie, który popularnie nazywa się tu "ciapkami" winksmiley.jpg Tylko zawartości pól powinny być ujęte w apostrofy dla bezpieczeństwa. Ja używam do zapytań ' zamiast " więc od każdego ' w zapytaniu muszę "uciekać" smile.gif A dlaczego ' zamiast "? By niepotrzebnie nie wzywać interpretera PHP gdzie nie jest potrzebny. Równie dobrze moglem zrobić zamiast:
  1. $zapytanie = 'SELECT marka, model, rokprod FROM cars WHERE marka = \''.$marka.'\' AND model LIKE \'%'.$model.'%\'';
tak:
  1. $zapytanie = "SELECT marka, model, rokprod FROM cars WHERE marka = '$marka' AND model LIKE '%$model%'";
ale jest to minimalnie wolniejsze, gdyż interpreter PHP musi przeszukać całe zapytanie czy aby nie występują w nim zmienne PHP lub jakieś znaki specjalne z racji użycia ", gdyż to co pomiędzy ' jest uznawane za ciąg znakowy, który należy idealnie przenieść. Wywołaj sobie w skrypcie coś takiego:
  1. $zmienna = 'kjfsdkj';
  2. echo "$zmienna";
  3. echo '$zmienna';
a zobaczysz różnicę smile.gif
pikko
no ok dzięki faktycznie jest różnica i to nawet spora biggrin.gif

nie ma już błędów, ale dalej nie wyświetla żadnych wyników, połączenie z bazą jest dobre, wyszukiwane pola są w bazie, sprawdzałem już 10 razy , echo mysql_error(); nie wywala żadnego błędu , poprawiłem kod wg waszych zaleceń, i dalej nie działa sad.gif

może czegoś brakuje ? albo źle się do tego zabrałem ;| nie mam pojęcia.
thek
W takim wypadku problem może być już tylko w 2 miejscach...
1) $_GET['type'] nigdy nie ustawia się na 'show' i przez to do zapytania nie dochodzi. Ale w to wątpię patrząc na kod. Zrób sobie var_dump($_GET) dla pewności w kodzie.
2) Taka kombinacja nie istnieje, co możesz sprawdzić prosto... Zrób sobie echo $zapytanie w kodzie by wyświetlić co idzie do bazy i wywołaj to bezpośrednio w bazie (choćby przez phpMyAdmin). Jeśli zwróci pustkę to wiesz, że problemem jest brak takiej kombinacji.
pikko
ok wiem czemu : ) już działa... przyglądnąłem się dokładnie bazie i wychodzi na to że my dodawaniu marki z pola select, dodawane są spacje... no cóż człowiek się uczy na błędach, wielkie dzięki za pomoc i wyrozumiałość biggrin.gif


to jeszcze pytanie, żeby nie dodawało tych spacji mam je w jakiś sposób potraktować trimem ?

formularz mam wykonany tak ( a dokladnie dodawanie samej marki smile.gif )
  1. Marka: </br><select name="marka">
  2. <option value="wybierz">-- wybierz --</option>
  3. <option value="Acura">Acura</option>


a kod PHP służący dodawaniu danych z formularza wygląda tak:

  1. <?php
  2.  
  3. include ('config.php');
  4.  
  5. $marka=$_POST['marka'];
  6. $model=$_POST['model'];
  7. $rokprod=$_POST['rokprod'];
  8. $typ=$_POST['typ'];
  9. $auto_paliwo=$_POST['auto_paliwo'];
  10. $auto_skrzynia=$_POST['auto_skrzynia'];
  11. $liczba_drzwi=$_POST['liczba_drzwi'];
  12. $pojemnosc_skokowa=$_POST['pojemnosc_skokowa'];
  13. $kolor_auta=$_POST['kolor_auta'];
  14. $metalic=$_POST['metalic'];
  15.  
  16. mysql_query("INSERT INTO cars (marka, model, rokprod, typ, auto_paliwo, auto_skrzynia, liczba_drzwi, pojemnosc_skokowa, kolor_auta, metalic) VALUES (' $marka ', ' $model ', ' $rokprod ', ' $typ ', ' $auto_paliwo ', ' $auto_skrzynia ', ' $liczba_drzwi ', ' $pojemnosc_skokowa ', ' $kolor_auta ' , ' $metalic ' )");
  17. header ("Location: search.php");
  18. ?>
  19.  


i jak mam jak coś tego trima wykonać?
$marka= trim($marka); questionmark.gif czy jakoś inaczej ?biggrin.gif
Blame
A działa? smile.gif Jeśli tak to masz odpowiedź tongue.gif
thek
Trim możesz zastosować jak podałeś, ale możesz już wcześniej, przy spisywaniu z Posta
$marka = trim( $_POST['marka'] );
Ważne by było to przed wrzuceniem zapytania do bazy. Jak widziałeś, w moim wcześniejszym przykładzie, można to zrobić nawet przy tworzeniu zapytania.
pikko
działa działa wszystko jak trzeba smile.gif dzięki wielkie winksmiley.jpg
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.