Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][PostgreSQL] Problem z wyszukiwarką
Forum PHP.pl > Forum > Przedszkole
Sublove
Witam, mam problem ponieważ chcę zrobić prostą wyszukiwarkę. Ma znajdywać wartość z jednej tabeli ale chciałbym żeby użytkownik mógł wybierać po jakim z trzech pól chce szukać

Zrobiłem tak:

Formularz:
  1. <form action="czesciosobowe2.php" method="post">
  2. Wyszukiwarka <br>
  3.  
  4. <input name="haslo" type=text>
  5. <select name="kryteria">
  6. <option value="nazwa"> Nazwa </option>
  7. <option value="model"> Model </option>
  8. <option value="producent_c"> Producent części </option>
  9. </select>
  10. <input type=submit value="Szukaj">
  11. </form>


Ale nie wiem jak ująć to w zapytaniu sad.gif . Gdzie i jak umieścić pola z option, żeby select wiedział jaką kolumnę przeszukać?

  1. <?php
  2. ?php
  3. $db = pg_connect("user=tomczak dbname=****** host=gandalf.mac.edu.pl password=******** port=54321");
  4. $haslo=$_POST[haslo];
  5. $nazwa=$_POST[nazwa];
  6. $model=$_POST[model];
  7. $producent_c=$_POST[producent_c];[/b]
  8.  
  9. [b]$query = "SELECT p, nazwa, kategoria, marka, model, producent, roczniki FROM parts WHERE nazwa LIKE '%".$haslo."%' ORDER BY p";
  10. $result = pg_exec($db, $query);
  11. if (!$result) {
  12. printf ("blad");
  13. $errormessage = pg_errormessage($db);
  14. echo $errormessage;
  15. }
  16. $numrows = pg_numrows($result);
  17. $row=0;
  18. printf ("<table width=670>");
  19. printf ("<tr>
  20. <td height=30 align=center>L.p:</td>
  21. <td height=30 align=center>Nazwa</td>
  22. <td height=30 align=center>Kategoria</td>
  23. <td height=30 align=center>Marka</td>
  24. <td height=30 align=center>Model</td>
  25. <td height=30 align=center>Producent</td>
  26. <td height=30 align=center>Roczniki</td>
  27. </tr>");
  28. do
  29. {
  30. $myrow = pg_fetch_row ($result,$row);
  31. printf ("<tr><td height=30 >%s</td>
  32. <td height=20 >%s</td>
  33. <td height=20 >%s</td>
  34. <td height=20 >%s</td>
  35. <td height=20 >%s</td>
  36. <td height=20 >%s</td>
  37. <td height=20 >%s</td>
  38. </tr>",
  39. $myrow[0], $myrow[1], $myrow[2], $myrow[3], $myrow[4], $myrow[5], $myrow[6] [/b]
  40.  
  41. [b]);
  42. $row++;
  43. }
  44. while ($row < $numrows);
  45. pg_close();[/b]
  46.  
  47. [b]printf ("</table>");
  48. ?>
wookieb
Nie sadze ze ty napisales ten kod skoro tego nie wiesz.

Kod
$pole='nazwa';
// dodatkowe zabezpiecznie przed sql injection
if(isset($_POST['kryteria']) && in_array($_POST['kryteria'], array('nazwa','model','producent_c')))
{
$pole=$_POST['kryteria'];
}

i teraz $pole wrzucasz w miejsce "nazwa" w twoim zapytaniu.
Sublove
Napisałem to sam, przeszukując forum udało mi się zrobić prostą wyszukiwarkę która szuka ale po wszystkich kolumnach. Tutaj napisałem to co wiedziałem, żeby zacząć... próbuję ale się zaciąłem, naprawdę sad.gif

Czyli ta lista jest zbędna tak?
  1. <?php
  2. $haslo=$_POST[haslo];
  3. $nazwa=$_POST[nazwa];
  4. $model=$_POST[model];
  5. $producent_c=$_POST[producent_c];[/
  6. ?>


gdzie dokładnie wstawić podany przez Ciebie kod? Tutaj? :

  1. <?php
  2. $db = pg_connect("user=tomczak dbname=****** host=gandalf.mac.edu.pl password=******** port=54321");
  3.  
  4. if(isset($_POST['kryteria']) && in_array($_POST['kryteria'], array('nazwa','model','producent_c')))
  5. {
  6. $pole=$_POST['kryteria'];
  7. }
  8.  
  9. $query = "SELECT p, nazwa, kategoria, marka, model, producent, roczniki FROM parts WHERE $pole LIKE '%".$haslo."%' ORDER BY p";
  10. $result = pg_exec($db, $query);
  11. if (!$result) {
  12. printf ("blad");
  13. $errormessage = pg_errormessage($db);
  14. echo $errormessage;
  15. }
  16. ?>
wookieb
Kod
$query = "SELECT p, nazwa, kategoria, marka, model, producent, roczniki FROM parts WHERE '.$pole.' LIKE '%".$haslo."%' ORDER BY p";


Połącz to z tym co wcześniej ci podałem.
Sublove
Bardzo Ci dziękuję za zainteresowanie ale nadal mam problem, otóż nieważne co wpiszę zawsze rezultatem jest cała tabela... Zrobiłem tak:

  1. <?php
  2. $db = pg_connect("user=tomczak dbname=**** host=gandalf.mac.edu.pl password=****** port=54321");
  3. if(isset($_POST['kryteria']) && in_array($_POST['kryteria'], array('nazwa','model','producent_c')))
  4. {
  5. $pole=$_POST['kryteria'];
  6. }
  7. $query = "SELECT p, nazwa, kategoria, marka, model, producent, roczniki FROM parts WHERE '.$pole.' LIKE '%".$haslo."%' ORDER BY p";
  8. $result = pg_exec($db, $query);
  9. if (!$result) {
  10. printf ("blad");
  11. $errormessage = pg_errormessage($db);
  12. echo $errormessage;
  13. }
  14. $numrows = pg_numrows($result);
  15. $row=0;
  16. printf ("<table width=670>");
  17. printf ("<tr>
  18. <td height=30 align=center>L.p:</td>
  19. <td height=30 align=center>Nazwa</td>
  20. <td height=30 align=center>Kategoria</td>
  21. <td height=30 align=center>Marka</td>
  22. <td height=30 align=center>Model</td>
  23. <td height=30 align=center>Producent</td>
  24. <td height=30 align=center>Roczniki</td>
  25. </tr>");
  26. do
  27. {
  28. $myrow = pg_fetch_row ($result,$row);
  29. printf ("<tr><td height=30 >%s</td>
  30. <td height=20 >%s</td>
  31. <td height=20 >%s</td>
  32. <td height=20 >%s</td>
  33. <td height=20 >%s</td>
  34. <td height=20 >%s</td>
  35. <td height=20 >%s</td>
  36. </tr>",
  37. $myrow[0], $myrow[1], $myrow[2], $myrow[3], $myrow[4], $myrow[5], $myrow[6]
  38.  
  39. );
  40. $row++;
  41. }
  42. while ($row < $numrows);
  43.  
  44. printf ("</table>");
  45. ?>
wookieb
To teraz ci nie dam rozwiazania tylko link do funkcji. Bedziesz mial okazje sie wykazac ;>
http://php.net/implode
Sublove
Przeczytałem i nadal nie mam pojęcia gdzie jest błąd...(
Rozumiem idee tego co napisałeś, tablica, potem sprawdzanie z tego co zostało przypisane do $pole itp.
Problem w tym, że analizując kod, nie mogę wpaść na to gdzie leży błąd. Wsztstko wygląda na prawidłowe... Oświeć mnie proszę bo już mi ręce opdły...

Może jednak jakaś wskazówka w moim kodzie... tak dla zachęty smile.gif
Może jakaś literówka mi się zdażyła? Proszę o pomoc, bardzo mi zależy na tym

Przejrzałem ten kod już na wylot.... i nie wiem co jest, wywala mi błąd:

Kod
[b]Warning[/b]: pg_fetch_row() [[url="http://gandalf.mac.edu.pl/~tomczak/function.pg-fetch-row"]function.pg-fetch-row[/url]]: Unable to jump to row 0 on PostgreSQL result index 3 in [b]/home/informatyka/2004/19dr-q-1/tomczak/public_html/czesciosobowe2.php[/b] on line [b]74[/b]


  1. <?php
  2. $db = pg_connect("user=tomczak dbname=tomczak host=gandalf.mac.edu.pl password=83102600495 port=54321");
  3. $haslo=$_POST['haslo'];
  4. $pole='nazwa';
  5. // dodatkowe zabezpiecznie przed sql injection
  6. if(isset($_POST['kryteria']) && in_array($_POST['kryteria'], array('nazwa','model','producent_c')))
  7. {
  8. $pole=$_POST['kryteria'];
  9. }
  10.  
  11. $query = "SELECT p, nazwa, kategoria, marka, model, producent, roczniki FROM parts WHERE '".$pole."' LIKE '%".$haslo."%' ORDER BY p";
  12. $result = pg_exec($db, $query);
  13. if (!$result) {
  14. printf ("blad");
  15. $errormessage = pg_errormessage($db);
  16. echo $errormessage;
  17. }
  18. $numrows = pg_numrows($result);
  19. $row=0;
  20. printf ("<table width=670>");
  21. printf ("<tr>
  22. <td height=30 align=center>L.p:</td>
  23. <td height=30 align=center>Nazwa</td>
  24. <td height=30 align=center>Kategoria</td>
  25. <td height=30 align=center>Marka</td>
  26. <td height=30 align=center>Model</td>
  27. <td height=30 align=center>Producent</td>
  28. <td height=30 align=center>Roczniki</td>
  29. </tr>");
  30. do
  31. {
  32. $myrow = pg_fetch_row ($result,$row);
  33. printf ("<tr><td height=30 >%s</td>
  34. <td height=20 >%s</td>
  35. <td height=20 >%s</td>
  36. <td height=20 >%s</td>
  37. <td height=20 >%s</td>
  38. <td height=20 >%s</td>
  39. <td height=20 >%s</td>
  40. </tr>",
  41. $myrow[0], $myrow[1], $myrow[2], $myrow[3], $myrow[4], $myrow[5], $myrow[6]
  42.  
  43. );
  44. $row++;
  45. }
  46.  
  47. while ($row < $numrows);
  48.  
  49. printf ("</table>");
  50. ?>
wookieb
Wywal argument $row z pg_fetch_row. Nie jest konieczny.
Sublove
Teraz za każdym razem zwraca mi pustą tabelę... błędów nie wyświetla ale wyników też nie. Cholera, co jeszcze spaprałem?
wookieb
Spróbujmy tak
Kod
for($i=0;$i<$numrows, $i++)
{
$myrow = pg_fetch_row ($result);
printf ("<tr><td height=30 >%s</td>
<td height=20 >%s</td>
<td height=20 >%s</td>
<td height=20 >%s</td>
<td height=20 >%s</td>
<td height=20 >%s</td>
<td height=20 >%s</td>
</tr>",
$myrow[0], $myrow[1], $myrow[2], $myrow[3], $myrow[4], $myrow[5], $myrow[6]);
}

Sprawdz jeszcze tylko jaka jest wartosc $numrows.
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.