Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Jak zapisać WHERE odnoszący się do listy rozwijanej select?
Forum PHP.pl > Forum > Przedszkole
marsoonn
Na stronie PHP jest lista rozwijana która zawiera nazwy pobrane z bazy danych,
po wybraniu nazwy z listy np. "Aprilia" chciałbym żeby z bazy danych wyświetliły się wszystkie rekordy
gdzie mark = Aprilia

Wiem że powinienem dodać w poniższym kodzie po prostu w zapytaniu SELECT WHERE x = y
ale właśnie nie wiem jak to zrobić;
powinno to wyglądać tak moim zdaniem:
$wynik = mysqli_query($conn,"SELECT * FROM motocykle WHERE mark=X");

i właśnie nie potrafię znaleźć tego X ( X powinnien być wyborem użytkownika z listy rozwijanej )
Jak to napisać?


Zdjęcie strony:
https://imgur.com/a/PMu4At7

  1. <?php
  2. require_once 'header.php';
  3. ?>
  4.  
  5. <?php
  6. $servername = "localhost";
  7. $username = "root";
  8. $password = "";
  9. $dbname = "projectinz";
  10. // Create connection
  11. //$conn = new mysqli($servername, $username, $password, $dbname);
  12. $conn = mysqli_connect($servername, $username, $password, $dbname);
  13.  
  14. // Check connection
  15. if ($conn->connect_error) {
  16. die("Connection failed: " . $conn->connect_error);
  17. }
  18.  
  19. ?>
  20.  
  21. <select name="mark" id="mark">
  22. <?php
  23. $query = $conn->query("SELECT mark FROM motocykle");
  24.  
  25. while($kategoria = mysqli_fetch_array($query))
  26. {
  27. echo '<option>'.$kategoria['mark'].'</option>';
  28. }
  29. ?>
  30. </select>
  31.  
  32. <?php
  33.  
  34. $wynik = mysqli_query($conn,"SELECT * FROM motocykle");
  35.  
  36. while($row = mysqli_fetch_array($wynik))
  37. {
  38. echo "<br>".$row['mark']." ".$row['model']." ".$row['capacity']." ".$row['power']."<br>";
  39. }
  40. mysqli_close($conn);
  41.  
  42. ?>
  43.  
  44. </body>
  45. </html>
viking
W option value powinien być ustawiony na id z bazy. Następnie wyszukujesz informacji po nim używając https://www.php.net/manual/en/mysqli-stmt.bind-param.php
marsoonn
Cytat(viking @ 22.12.2020, 08:19:48 ) *
W option value powinien być ustawiony na id z bazy. Następnie wyszukujesz informacji po nim używając https://www.php.net/manual/en/mysqli-stmt.bind-param.php


Ustawiłem tak jak mówiłeś, ale są 2 błędy, których nie umiem naprawić:

1) Po rozwinięciu listy rozwijanej (dropdown) wyświetlają się wszystkie komórki z kolumny "mark"
czyli po kolei od góry:
Aprilia
Honda
Honda
Chciałbym tego uniknąć takiego powtarzania tych samych słów bo narazie mam tylko 3 rekordy w bazie danych a docelowo będzie 100;
a marka na pewno będzie się powtrzać, jakiś pomysł jak to naprawić? widać to na zdjęciu, ten problem

2) Po wyborze np drugiej pozycji z listy rozwijanej czyli "Honda" wyświetla się drugi rekord z bazy danych a nie 2 i 3, jakieś pomysły jak to naprawić?

Wszystkie zdjęcie:
https://imgur.com/a/TjbNSvu

Kod programu:
find.php
  1. <?php
  2. require_once 'header.php';
  3. ?>
  4.  
  5. <?php
  6. $servername = "localhost";
  7. $username = "root";
  8. $password = "";
  9. $dbname = "projectinz";
  10. // Create connection
  11. //$conn = new mysqli($servername, $username, $password, $dbname);
  12. $conn = mysqli_connect($servername, $username, $password, $dbname);
  13.  
  14. // Check connection
  15. if ($conn->connect_error) {
  16. die("Connection failed: " . $conn->connect_error);
  17. }
  18.  
  19. ?>
  20. <form action="../includes/find.inc.php" method="post">
  21. <select name="mark" id="mark">
  22. <?php
  23. $query = $conn->query("SELECT id, mark FROM motocykle");
  24.  
  25. while($kategoria = mysqli_fetch_array($query))
  26. {
  27. echo '<option value="'.$kategoria['id'].'">'.$kategoria['mark'].'</option>';
  28. //echo '<option value="id">'.$kategoria['mark'].'</option>';
  29. }
  30. ?>
  31. </select>
  32. <button type="submit" name="findmoto">Find</button>
  33. </form>
  34. <?php
  35. $wynik = mysqli_query($conn,"SELECT * FROM motocykle ");
  36.  
  37. while($row = mysqli_fetch_array($wynik))
  38. {
  39. echo "<br>".$row['mark']." ".$row['model']." ".$row['capacity']." ".$row['power']."<br>";
  40. }
  41. mysqli_close($conn);
  42.  
  43.  
  44. ?>
  45.  
  46. </body>
  47. </html>



find.inc.php
  1. <?php
  2.  
  3. if(isset($_POST['findmoto'])) {
  4. require 'dbh.inc.php';
  5.  
  6. $selectedId = intval($_POST["mark"]);
  7. echo $selectedId;
  8.  
  9. $display = "SELECT * FROM motocykle WHERE id='$selectedId';";
  10. $run = mysqli_query($conn, $display);
  11.  
  12. if($run)
  13. {
  14. $rows = mysqli_fetch_assoc($run);
  15. echo $rows['mark']." ".$rows['model']." ".$rows['capacity']." ".$rows['power'];
  16. }
  17. else
  18. {
  19. echo "not";
  20. }
  21.  
  22. }



viking
A to już sam musisz zdecydować jak to prezentować. Czy po wyborze marki powinien pojawić się kolejny select z modelem (i jak głęboko będziesz to rozbijał). Dodatkowo baza nie jest znormalizowana. https://www.sqlpedia.pl/projektowanie-i-nor...ja-bazy-danych/
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.