Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]wyszukiwarka , pola checkbox
Forum PHP.pl > Forum > Przedszkole
michal_86
witam - stworzyłem taki formularz:

  1. <table bgcolor="lightblue" cellspacing=0 cellpadding=0 width="600" border=1 align="center">
  2. <tr valign="top"><td><input type="radio" checked="checked" name="bdw" value="a">Biura do wynajęcia <br>
  3. <input type="radio" name="bdw1" value="1">
  4. <input type="text" name="cnt_maxsize" maxlength="10" style="padding-left: 3px; width: 6em;"value="do 500 m2"/>
  5. <input type="radio" name="bdw1" value="2">
  6. <input type="text" name="cnt_maxsize" maxlength="10" style="padding-left: 3px; width: 10em;"value="od 500 do 1000 m2"/>
  7. <input type="radio" name="bdw1" value="3">
  8. <input type="text" name="cnt_maxsize" maxlength="10" style="padding-left: 3px; width: 10em;"value="powyżej 1000 m2"/></tr></td>
  9.  
  10. <table bgcolor="lightblue" cellspacing=0 cellpadding=0 width="600" border=1 align="center">
  11. <tr valign="top"><td><input type="radio" checked="checked" name="bdw" value="b">Biura na sprzedaż <br>
  12. <input type="radio" name="bns1" value="1">
  13. <input type="text" name="cnt_maxsize" maxlength="10" style="padding-left: 3px; width: 6em;"value="do 500 m2"/>
  14. <input type="radio" name="bns1" value="2">
  15. <input type="text" name="cnt_maxsize" maxlength="10" style="padding-left: 3px; width: 10em;"value="od 500 do 1000 m2"/>
  16. <input type="radio" name="bns1" value="3" >
  17. <input type="text" name="cnt_maxsize" maxlength="10" style="padding-left: 3px; width: 10em;"value="powyżej 1000 m2"/></tr></td>
  18.  
  19. <table bgcolor="lightblue" cellspacing=0 cellpadding=0 width="600" border=1 align="center">
  20. <tr valign="top"><td><input type="radio" checked="checked" name="bdw" value="c">Magazyny <br>
  21. <input type="radio" name="mag1" value="1">
  22. <input type="text" name="cnt_maxsize" maxlength="10" style="padding-left: 3px; width: 12em;"value="Warszawa prawobrzeżna"/>
  23. <input type="radio" name="mag1" value="2" >
  24. <input type="text" name="cnt_maxsize" maxlength="10" style="padding-left: 3px; width: 12em;"value="Warszawa lewobrzeżna"/>
  25. <input type="radio" name="mag1" value="3">
  26. <input type="text" name="cnt_maxsize" maxlength="10" style="padding-left: 3px; width: 12em;"value="Okolice Warszawy"/></tr></td>
  27.  
  28. <table bgcolor="lightblue" cellspacing=0 cellpadding=0 width="600" border=1 align="center">
  29.  
  30. <tr>
  31. <td>Wpisz dane poszukiwanej nieruchomości &nbsp;&nbsp;<input type="radio" checked="checked" name="bdw" value="d"> bez powyższych opcji </td><form name="form1" method="post" action="szukaj.php">
  32. </tr>
  33. <tr>
  34. <td border="1">
  35. <input type="text" name="szukaj" size="94" >
  36. </td>
  37. </tr>
  38. <tr>
  39. <td>
  40. <input type="submit" name="Szukaj" value="Szukaj">
  41. </td>
  42. </tr>
  43. </form>


zacząłem robić wyszukiwarkę -- prosiłbym o pomoc. Czy ta struktura jest logiczna i odpowiada założeniom formularza?
Jeśli proszę o wskazówki jak zmienić warunki
oto kod php:

  1. <?php
  2.  
  3. echo'<h2>Wyniki wyszukiwania</h2>';
  4. // usunięcie niepotrzebnych białych znaków
  5. $_POST['szukaj']=trim($_POST['szukaj']);
  6. // sprawdzenie, czy użytkownik wpisał dane
  7. if(empty($_POST['szukaj']))
  8.  
  9. die('Nie wpisano danych nieruchomości! Nie można wyświetlić wyników wyszukiwania!');
  10. // jeśli jednak dane są wpisane poprawnie
  11. else{
  12.  
  13. $connection = @mysql_connect('localhost', 'root')
  14. or die('Brak połączenia z serwerem MySQL');
  15. $db = @mysql_select_db('biurapow5', $connection)
  16. or die('Nie mogę połączyć się z bazą danych');
  17. }
  18.  
  19. if ($_POST['bdw']=='a') //jeśli wybrano biura do wynajęcia
  20. {
  21.  
  22.  
  23. if ($_POST['bdw1']=='1')
  24. $zapytanie = "SELECT lokalizacja, tytul FROM do5 WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  25. $wykonaj = mysql_query ($zapytanie);
  26.  
  27. if ($_POST['bdw2']=='2')
  28. $zapytanie = "SELECT lokalizacja, tytul FROM pow5 WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  29. $wykonaj = mysql_query ($zapytanie);
  30.  
  31. if ($_POST['bdw3']=='3')
  32. $zapytanie = "SELECT lokalizacja, tytul FROM pow1 WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  33. $wykonaj = mysql_query ($zapytanie);
  34. }
  35.  
  36.  
  37.  
  38.  
  39. elseif ($_POST['bdw']=='b') //jeśli wybrano biura na sprzedaż
  40. {
  41.  
  42.  
  43. if ($_POST['bdw1']=='1')
  44. $zapytanie = "SELECT lokalizacja, tytul FROM do5s WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  45. $wykonaj = mysql_query ($zapytanie);
  46.  
  47. if ($_POST['bdw1']=='2')
  48. $zapytanie = "SELECT lokalizacja, tytul FROM pow5s WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  49. $wykonaj = mysql_query ($zapytanie);
  50.  
  51. if ($_POST['bdw1']=='3')
  52. $zapytanie = "SELECT lokalizacja, tytul FROM pow1s WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  53. $wykonaj = mysql_query ($zapytanie);
  54.  
  55.  
  56. }
  57. elseif ($_POST['bdw']=='c') //jeśli wybrano magazyny
  58. {
  59.  
  60.  
  61. if ($_POST['mag1']='1')
  62. $zapytanie = "SELECT lokalizacja, tytul FROM prawo WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  63. $wykonaj = mysql_query ($zapytanie);
  64.  
  65. if ($_POST['mag1']=='2')
  66. $zapytanie = "SELECT lokalizacja, tytul FROM lewo WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  67. $wykonaj = mysql_query ($zapytanie);
  68.  
  69. if ($_POST['mag1']='3')
  70. $zapytanie = "SELECT lokalizacja, tytul FROM okol WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  71. $wykonaj = mysql_query ($zapytanie);
  72.  
  73.  
  74. }
  75. elseif ($_POST['bdw']=='d') //jeśli wybrano bez powyższych opcji
  76. {
  77.  
  78. $zapytanie = "SELECT lokalizacja, tytul FROM do5, pow5, pow1, do5s, pow5s, pow1s, prawo, lewo, okol WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  79. $wykonaj = mysql_query ($zapytanie);
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86. }
  87.  

Na razie chodzi o same założania warunków czy są poprawne?

pozdr!
darko
To jeszcze wrzuć najważniejsze - strukturę tabel w bazie.
tomekkaj
Chodzi o zakładkę "struktura", a nie "Przeglądaj" aaevil.gif
michal_86


rozumiem że o to chodziło..

każda tabela w bazie jest taka sama tj: do5,pow5,pow1 itd...

na razie głównie mi chodzi o to czy warunki dobrze odpowiadają temu co jest w formularzu, oraz czy są poprawnie logicznie napisane

pozdr

PS: Oczywiście w powyższy skrypcie lokalizacja przez duże L smile.gif
darko
Nie bardzo rozumiem, po co 9 takich samych tabel o identycznej strukturze, no ale może jest w tym jakiś głębszy sens? Właściwie wyszukujesz dane tylko po lokalizacji i opisie, więc nie wiem czy chodzi Ci o podanie gotowca dla pozostałych warunków? Podpowiem, że - moim zdaniem - takie dane jak powierzchnia i czynsz powinny być raczej typu integer lub float, a nie varchar. I ostatnie: powinieneś dostosowywać formularz do założeń struktury bazy, a nie odwrotnie - bazę do struktury formularza.
michal_86
reszta danych jest wykorzystywana w zupełnie innym celu - 9 tabel odpowiada 9 kategoriom pow 5 - to na przykłąd biura powyżej 500m2 które potem są wyświetlane na stronie jako linki z krótkimi opisami i podobnie z innymi, np: tabela prawo to lista linków z ktrótkimi opisami magazynów z warszawy prawobrzeżnej

reszta info jest również wykorzystywana jako opis konkretnej nieruchomści -stąd opis lokalizacja tytul itd



pola powierzchnia i czynsz czasem są opisywane słownie np: powierzchnia biur, powierzcnie wydzielona itd, co do czynszu podobnie - czynsz za biura, czynsz za dodatkowe media itd...dlatego wolałem dać varchar.

formularz robiłem właśnie w oparciu o strukturę bazy, ale warunki muszę już opierać na samym formularzu

w każdym razie wracając do meritum - czy ta struktura warunków jest ok? Bo teraz czeka mnie kolejny etap czyli wyciąganie i wyświetlanie z bazy wyników..ale najpierw musze wiedzieć czy początek jest dobry
darko
Jeśli chodzi o sam formularz to zmieniłbym te opcje wyboru (input + radio) na selektory rozwijane. Co do kodu php:
1. zamiast
die('Nie wpisano danych nieruchomości! Nie można wyświetlić wyników wyszukiwania!');
wyświetliłbym jeszcze raz formularz

2. nie analizowałem dokładnie kodu, ale po wstępnym "rzucie okiem" myślę, że ma prawo zadziałać.
3. bloki kodu, gdzie masz:
if ($_POST['bdw1']=='1')
$zapytanie = "SELECT lokalizacja, tytul FROM do5s WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
$wykonaj = mysql_query ($zapytanie);

zamieniłbym na switch case

Poza tym zwróć uwagę, że brak klamer przy warunku if spowoduje wykonanie trzy razy tej linii kodu:
$wykonaj = mysql_query ($zapytanie);
niezależnie od tego czy warunek jest spełniony czy nie jest, ponieważ instrukcja warunkowa if pozbawiona klamer dotyczy tylko pierwszej linii poprzedzającej ją samą.
michal_86
Ok - to teraz to poprawiłem i od razu pytanko o wyświetlenie wyników

pokaże co "wymyśliłem" na przykładzie 1 podwarunku :

  1. if ($_POST['bdw1']=='1'){
  2.  
  3. $zapytanie = "SELECT id, Lokalizacja, tytul FROM do5 WHERE lokalizacja LIKE '%{$_POST['szukaj']}%' OR opis Like '%{$_POST['szukaj']}%'";
  4.  
  5. // wyniki wyszukania dla tego warunku
  6.  
  7. $wykonaj = mysql_query ($zapytanie);
  8.  
  9. while($wiersz=mysql_fetch_array ($wykonaj)) {
  10.  
  11. <tr valign=\"top\"><td>
  12.  
  13. <a href=\"oferta.php?wysz=".$wiersz['id']."\">".$wiersz['Lokalizacja']."</a>, ".$wiersz['tytul']."</font></td><font size=\"-1\" face=\"arial, helvetica\"><td>
  14. <a href=\"oferta.php?wysz=".$wiersz['id']." \"> opis</a>
  15. </font></td></tr>
  16. ";
  17. }
  18. }


dodałem klamry tak jak zasugerowałeś oraz zmienną id potrzebną do wyświetlenia danych w szablonie oferta.php - teraz pytanie o to czy w dobrym miejscu i z odpowiednią logiką umieściłem skrypt wyników??

co do switch case..przeczytałem manuala, jeśli if nie będzie działał to postaram się to przerobić, ale na razie "łatwiej" dla mnie jest zostawić tak jak jest

rozumiem, żę w każdym warunku robie to samo?

pozdr!
agata
cześć,
ponieważ temat postu pasuje do mojego pytania, postanowiłam się podłączyć.

Mam problem z polami checkbox i stworzeniem zapytania bazującego na nich.

Mam klientów w liście select, po wyborze klienta wyświetlają mi się jego samochody w postaci chceckbox'ów:

  1. if($ile > 0)
  2. {
  3.  
  4. echo '<center>Poniżej samochody należące do <font color="#000000">'.$row1['Nazwisko'].' '.$row1['Imie'].'</font><br/>
  5. Wybierz samochód Który chesz usunąć:</center><br/>';
  6.  
  7. echo '<form action="delete_car.php" method="get">';
  8. for($i=0;$i<$ile;$i++)
  9. {
  10.  
  11. $row = mysql_fetch_array($query);
  12. echo '<h4><tr><td><input type="checkbox" name="samochod[]" value="'.$row['IdSamochodu'].'"/></td><td>
  13. nr rejestracyjny - <font color="#000000">'.$row['Rejestracja'].'</font></td></tr></h4>';
  14. }
  15.  
  16. echo '<tr><td><input type="reset" value="Wyczyść"/></td><td><input type="submit" name="usun" value="Usuń"/></td></tr>
  17. </form>';
  18. }
  19. else
  20. {
  21. echo 'Nie znaleziono samochodu.';
  22. }


Po tym użytkownik wybiera jeden lub więcej samochodów które mają zostać usunięte.

No i tutaj sobie nie radzę, jak wyciągnąć wszystkie IdSamochodu (z pola checkbox name="samochod[]"), w taki sposób aby potem wykorzystać je w zapytaniu
mniej więcej tak:

  1. $id = $_GET['samochod'][]; //jak to zapętlić żeby pobrał z wcześniejszego formularza id wszystkich wybranych samochodów
  2.  
  3. //jak wykorzystać wszystkie id w zapytaniu poniżej, tak aby usunąć każdy z wybranych samochodów
  4.  
  5. $query = mysql_query("Delete from Samochod Where IdSamochod = '$id'");
  6.  


Proszę o pomoc
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.