Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Select przez formularz dla kilku pól
Forum PHP.pl > Forum > Przedszkole
kapsel2105
Dzień dobry.

Wszystkiego dobrego w Nowym Roku.

Mam pewien problem z przesłaniem/odebraniem wartości z pola formularza.
Chodzi o ty by wysłanie formularza z nie wypełnionymi polami nie dało rezultatu wyświetlenia wszystkich rekordów z tabeli.

Poniżej kod w którym już nie wiem co robię źle.sad.gif


  1. <?php
  2. include 'config.php';
  3. db_connect();
  4.  
  5. check_login();
  6.  
  7. // pobieramy dane usera
  8. $user_data = get_user_data();
  9.  
  10. include 'header.php';
  11.  
  12. $t = time();
  13. $d = date("Y-m-d",$t);
  14.  
  15. //NOWE ZAPYTANIE 1 - POCZATEK
  16.  
  17. //formularz dla wyszukiwania klienta start
  18. echo '<BR \>';
  19. //$CZY_WYKONANO = 3;
  20.  
  21. echo '<form action="wyszukaj_klient2.php" method="post">
  22. <input type="hidden" name="wyslano" value="1" />
  23. <center>
  24. <table BORDER="1" align="center" cellpadding="5">
  25. <tr align="center" valign="MIDDLE">
  26. <th align="center" valign="MIDDLE">NR:</th>
  27. <th align="center" valign="MIDDLE">UMOWA:</th>
  28. <th align="center" valign="MIDDLE">NAZWA:</th>
  29. <th align="center" valign="MIDDLE">IMIE:</th>
  30. <th align="center" valign="MIDDLE">NAZWISKO:</th>
  31. <th align="center" valign="MIDDLE">TELEFON:</th>
  32. <th align="center" valign="MIDDLE">ULICA:</th>
  33. <th align="center" valign="MIDDLE">MIASTO:</th>
  34. <th align="center" valign="MIDDLE">UWAGI:</th>
  35. <th align="center" valign="MIDDLE">SZUKAJ:</th>
  36. </tr><tr>
  37. <td align=center valign=MIDDLE><input type="text" maxlength="20" size="20" value="" name="NR" /></td>
  38. <td align=center valign=MIDDLE><input type="text" maxlength="20" size="20" value="" name="UMOWA" /></td>
  39. <td align=center valign=MIDDLE><input type="text" maxlength="20" size="20" value="" name="NAZWA" /></td>
  40. <td align=center valign=MIDDLE><input type="text" maxlength="20" size="20" value="" name="IMIE" /></td>
  41. <td align=center valign=MIDDLE><input type="text" maxlength="20" size="20" value="" name="NAZWISKO" /></td>
  42. <td align=center valign=MIDDLE><input type="text" maxlength="20" size="20" value="" name="TELEFON" /></td>
  43. <td align=center valign=MIDDLE><input type="text" maxlength="20" size="20" value="" name="ULICA" /></td>
  44. <td align=center valign=MIDDLE><input type="text" maxlength="20" size="20" value="" name="MIASTO" /></td>
  45. <td align=center valign=MIDDLE><input type="text" maxlength="20" size="20" value="" name="UWAGI" /></td>
  46. <td align=center valign=MIDDLE><input type="submit" value="SZUKAJ" /></td></tr>
  47. </table></center></form>';
  48.  
  49. //NOWE ZAPYTANIE 1 - POCZATEK
  50. $tabela_k = 'kontrahent';
  51. $lp = 1;
  52. //$CZY_WYKONANO = 3;
  53. $ID_K = trim($_POST['NR']);
  54. $UMOWA = trim($_POST['UMOWA']);
  55. $NAZWA = trim($_POST['NAZWA']);
  56. //$IMIE = $_POST['IMIE'];
  57. $_POST['IMIE']=trim($_POST['IMIE']);
  58. $IMIE = (trim($_POST['IMIE']));
  59.  
  60. $NAZWISKO = trim($_POST['NAZWISKO']);
  61. $TEL = trim($_POST['TELEFON']);
  62. $ULICA = trim($_POST['ULICA']);
  63. $MIASTO = trim($_POST['MIASTO']);
  64. $UWAGI = trim($_POST['UWAGI']);
  65.  
  66. //echo 'Id Klienta to :'.$ID_K.'<BR \>';
  67. echo 'id to :'.$ID_K.' i ma wartość '.!empty($ID_K).'<BR \>';
  68. echo 'Umowa to :'.$UMOWA.'<BR \>';
  69. echo 'Nazwa to:'.$NAZWA.'<BR \>';
  70. //echo 'Imie to :'.$IMIE.' i ma wartość '.$IMIE.'<BR \>';
  71. echo 'Nazwisko to :'.$NAZWISKO.'<BR \>';
  72. echo 'Tel to :'.$TEL.'<BR \>';
  73. echo 'Ulica to :'.$ULICA.'<BR \>';
  74. echo 'Miasto to :'.$MIASTO.'<BR \>';
  75. echo 'Uwagi to :'.$UWAGI.'<BR \>';
  76.  
  77. if(isset($_POST['wyslano'])) {
  78. mysql_query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
  79. $wynik = mysql_query("SELECT * FROM $tabela_k WHERE id = $NR AND nazwa LIKE '%$NAZWA%' AND imie LIKE '%$IMIE%' AND nazwisko LIKE '%$NAZWISKO%' ")
  80. or die('Błąd zapytania');
  81.  
  82. if(mysql_num_rows($wynik) > 0) {
  83. /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
  84. echo '<center>';
  85. echo "<table border=1 cellpadding=8>";
  86. print "<tr align='center' valign='MIDDLE'><td><b>L.P.</b></td><td><b>NR</b></td><td><b>UMOWA</b></td><td><b>NAZWA</b></td><td><b>IMIE</b></td><td><b>NAZWISKO</b></td><td><b>TELEFON</b></td><td><b>ULICA</b></td><td><b>MIASTO</b></td><td><b>DATA REJESTRACJI</b></td><td><b>UWAGI</b></td></TR>\n";
  87.  
  88. while($r = mysql_fetch_assoc($wynik)) {
  89. echo "<tr align='center' valign='MIDDLE'>";
  90. echo "<td align='center' valign='MIDDLE'>".$lp++."</td>";
  91. echo "<td align='center' valign='MIDDLE'>".$r['id']."</td>";
  92. echo "<td align='center' valign='MIDDLE'>".$r['umowa']."</td>";
  93. echo "<td align='center' valign='MIDDLE'>".$r['nazwa']."</td>";
  94. echo "<td align='center' valign='MIDDLE'>".$r['imie']."</td>";
  95. echo "<td align='center' valign='MIDDLE'>".$r['nazwisko']."</td>";
  96. echo "<td align='center' valign='MIDDLE'>".$r['tel']."</td>";
  97. echo "<td align='center' valign='MIDDLE'>".$r['ulica']."</td>";
  98. echo "<td align='center' valign='MIDDLE'>".$r['miasto']."</td>";
  99. echo "<td align='center' valign='MIDDLE'>".$r['data_r_k']."</td>";
  100. echo "<td align='center' valign='MIDDLE'>".$r['uwagi']."</td>";
  101. echo "</tr>";
  102. }
  103. echo "</table>";
  104. }
  105. }
  106.  
  107. else {
  108.  
  109. echo '<center><font size=5 color=red><b>W bazie nie istnieją żadne dane.</b></font></center><BR \>';
  110. echo '<center><font size=4 color=blue><b><a href="dod_kon.php">Kliknij tutaj aby dodać dane.</a></b></font></center>';
  111. }
  112.  
  113. //koniec nowejmetody 1
  114. db_close();
  115. ?>




jest tam trochę komentarzy bo próbowałem na różne sposoby ale nie wiem już co mi nie gra.
Oczywiście chodzi tutaj również o wyszukiwanie po polu tekstowym znaczy części tylko imienia lub nazwy czy nazwiska.

HELP
Tomplus
Nie wiem do końca o co ci chodzi, ale z tego co widzę w zapytaniu MySQL to potrzebujesz wszystkich danych aby wyświetlić jeden rekord, bo dajesz wszędzie AND

Proponuję trochę pobawić się logiką, bo myślę że tutaj masz problem:

A=1
B=1
C=1

A = 1 ^ B = 1 ^ C = 1 => TRUE
A = 1 ^ B = 0 ^ C = 1 => FALSE

A = 0 v B = 1 v C = 1 => TRUE
A = 0 v B = 1 v C = 0 => TRUE
A = 0 v B = 0 v C = 0 => FALSE

Dlatego jak chcesz więcej rekordów to wstaw warunki:
SELECT * FROM $tabela_k WHERE {$sqlNumer} {$sqlNazwa} {$sqlImie} {$sqlNazwisko}

i w zależności ile pól input jest wypełnione to dana zmienna ci się wpisze do zapytania.
kapsel2105
Dziękuję za szybką sugestię.

Lecz chyba nie dopisałem co potrzebuję. (Przepraszam pewnie zbyt długo już nad tym siedziałem i szybciej myślałem niż palce pisały)

Więc tak.

Jest to formularz przez który wyszukujemy w bazie pasujące rekordy i je wyświetlamy.

Miało to działać tak że mając pola NR, UMOWA, NAZWA, IMIE, NAZWISKO, TELEFON, itd...
wpisując tylko pole NR pokazuje wszystkie rekordy posiadające wpisany NR (tutaj akurat jest to id w bazie więc nie ma problemu) ale dalej UMOWA, NAZWA, IMIE, NAZWISKO są polami VARCHAR i TEXT.
Wysłanie formularza z niewypełnionymi polami powoduje wyświetlenie wszystkich rekordów z tabeli.
Jako że w zapytaniu jest LIKE w polach to tutaj wiadomo podczas wpisywania części nazwy czy imienia powinno wyświetlić tylko te rekordy posiadające zadany ciąg znaków.
Lecz niestety nie mogę sobie poradzić z tym że jak wyśle formularz z niewypełnionymi polami to wyświetla wszystkie rekordy z tabeli.
A tam w zapytaniu może zamiast AND powinno być OR.
Choć najlepiej jak był operator LUB/ORAZ smile.gif

Niestety nie siedzę w PHP i MySQL na co dzień sad.gif
Tomplus
To moja sugestia nadal jest tak samo aktualna

stwórz sobie szereg IFów który sprawdza:
  1. if(isset($_POST['id'])) {
  2. $sql = "id = ".(int)$_POST['id'];
  3. } elseif(isset($_POST['nazwa'])) {
  4. $sql = "nazwa LIKE '%".$_POST['nazwa']."%'";
  5. } else {} //itd...
  6.  
  7. if(isset($_POST['wyslano']) AND $sql != '') {
  8. mysql_query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
  9. $wynik = mysql_query("SELECT * FROM $tabela_k WHERE {$sql}") or die('Błąd zapytania');



Pyton_000
@Tomplus Twoje wywali błąd, bo nie masz złączeń AND pomiędzy warunkami.

  1. <?php
  2.  
  3. $wheres = [];
  4.  
  5. if(!empty($_POST['id'])) {
  6. $wheres[] = "id = ".(int)$_POST['id'];
  7. }
  8.  
  9. if(!empty($_POST['nazwa'])) {
  10. $wheres[] = "nazwa LIKE '%".$_POST['nazwa']."%'";
  11. }
  12. $where = '';
  13.  
  14. if(count($wheres)) {
  15. $where = implode(' AND ', $wheres);
  16. }
  17.  
  18. mysql_query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
  19. $wynik = mysql_query("SELECT * FROM $tabela_k WHERE {$where}") or die('Błąd zapytania');
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.