Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Select przez formularz dla kilku pól, Wyszukiwanie w bazie przez formularz
kapsel2105
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 22.10.2012

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


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.(IMG:style_emoticons/default/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

Ten post edytował kapsel2105 6.01.2016, 23:04:25
Go to the top of the page
+Quote Post
Tomplus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 885
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

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


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





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 22.10.2012

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


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 (IMG:style_emoticons/default/smile.gif)

Niestety nie siedzę w PHP i MySQL na co dzień (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Tomplus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 885
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

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


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');



Go to the top of the page
+Quote Post
Pyton_000
post
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


@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');
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: 21.12.2025 - 04:10