Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][PostgreSQL] Problem z wyszukiwarką
Sublove
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 23.01.2009

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował Sublove 23.01.2009, 09:43:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.
Go to the top of the page
+Quote Post
Sublove
post
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 23.01.2009

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


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ę (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował Sublove 23.01.2009, 09:58:27
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.

Ten post edytował wookieb 23.01.2009, 09:57:26
Go to the top of the page
+Quote Post
Sublove
post
Post #5





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 23.01.2009

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


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


Ten post edytował Sublove 23.01.2009, 10:05:20
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




To teraz ci nie dam rozwiazania tylko link do funkcji. Bedziesz mial okazje sie wykazac ;>
http://php.net/implode
Go to the top of the page
+Quote Post
Sublove
post
Post #7





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 23.01.2009

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
wookieb
post
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Wywal argument $row z pg_fetch_row. Nie jest konieczny.
Go to the top of the page
+Quote Post
Sublove
post
Post #9





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 23.01.2009

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


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?
Go to the top of the page
+Quote Post
wookieb
post
Post #10





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.

Ten post edytował wookieb 23.01.2009, 16:01:27
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 10:16