Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]dynamiczne, zalezne selecty
Forum PHP.pl > Forum > Przedszkole
lukas1986s
witam

z wczesniejszych moich tematow otrzymalem wzor pewnego kodu zaleznych od siebie selectow

http://turson.pl/blog/dynamiczne-zalezne-selecty/

Kod przerobilem. Niestety cos nie dziala w drugiej liscie. Druga lista powinna pokazywac nr-y pokoji przypisanych do ulicy wybranej w pierwszym slelecie. W moim przypadku pomimo wybraniu jakielkowiek pierwszej opcji w drugiej liscie pojawiaja sie wszystkie pokoje, ponizej kod

Kod
<?php
// POŁĄCZENIE Z BAZĄ DANYCH
$db =  new PDO('mysql:host=localhost;dbname=rooms', 'reex', 'reex1', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")) or die();
// POBRANIE WSZYSTKICH MAREK SAMOCHODÓW (DISTINCT - pobieramy marki bez powtórzeń)
$stmt = $db->query("SELECT Nazwa FROM ulica");
$ulica = $stmt->fetchAll();
?>

<form action="" method="post" id="formularz">
    <label for="ulica">Wybierz Ulice</label>
    <select id="ulica" name="ulica">
        <option>Wybierz</option>
        <?php foreach($ulica as $v): ?>
            <option><?php echo $v['Nazwa']; ?></option>
        <?php endforeach; ?>
    </select>

    <label for="pokoj">Wybierz pokoj</label>
    <select id="pokoje" name="pokoj">
    </select>
</form>

<script>
$('#ulica').on('change', function(){
    var ulica = $(this).val();
    $.ajax({
        type: 'POST',
        url: 'szukaj.php',
        data: { 'ulica':ulica },
        success: function(msg){
            $("#pokoje").html(msg);
        }
    })
})
$('#formularz').submit(function(){
    /*
    SPRAWDZAMY, CZY UŻYTKOWNIK WYBRAŁ JAKIŚ MODEL, JEŻELI NIE TO NIE POZWALAMY WYSŁAĆ FORMULARZA
     */
    if (!$("#pokoje option:selected").length){
        alert('Wybierz pokoj');
        return false;
    }
})
</script>



szukaj.php

Kod
<?php
$db =  new PDO('mysql:host=localhost;dbname=rooms', 'reex', 'reex1', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")) or die();
$stmt = $db->prepare("SELECT `Nazwa`,`NrPokoju` FROM `pokoj`,`ulica` WHERE pokoj.UlicaId=ulica.Id ");
$stmt->bindValue(':ulica', $_POST['ulica'], PDO::PARAM_STR);
$stmt->execute();
$pokoje = $stmt->fetchAll();
$odpowiedz = null;
if(count($pokoje)){
    foreach($pokoje as $v){
        $odpowiedz .= '<option>'.$v['NrPokoju'].'</option>';
    }
}
echo $odpowiedz;

trueblue
Gdzie jest warunek na nazwę ulicy w zapytaniu w szukaj.php?
lukas1986s
Cytat(trueblue @ 10.06.2014, 18:49:27 ) *
Gdzie jest warunek na nazwę ulicy w zapytaniu w szukaj.php?


nie wiem jak to skonstruwowac
Turson
Przedstaw jakie masz kolumny to będzie prościej
snerf
Może nie jestem jakiś sprytny ale czy:
WHERE pokoj.UlicaId=ulica.Id ");

Nie powinno być:
:ulica questionmark.gif

Turson
Powinno
lukas1986s
moje tabele

'ulica'



'pokoj'



'mieszkaniec'

Turson
Już dostałeś odpowiedź. Jak bindujesz :ulica to uwzględnij to w zapytaniu a nie bierzesz dane z kosmosu
SELECT `Nazwa`,`NrPokoju` FROM `pokoj`,`ulica` WHERE UlicaId=:ulica


@edit
o matko, zastanów się co robisz. Wstawiasz w warunek stringa gdzie id może być tylko integerem. Po pierwsze musisz zmodyfikować w formularzu selecta, żeby przesyłał id ulicy a nie nazwę!
lukas1986s
Cytat(Turson @ 10.06.2014, 19:24:13 ) *
Już dostałeś odpowiedź. Jak bindujesz :ulica to uwzględnij to w zapytaniu a nie bierzesz dane z kosmosu
SELECT `Nazwa`,`NrPokoju` FROM `pokoj`,`ulica` WHERE UlicaId=:ulica


@edit
o matko, zastanów się co robisz. Wstawiasz w warunek stringa gdzie id może być tylko integerem. Po pierwsze musisz zmodyfikować w formularzu selecta, żeby przesyłał id ulicy a nie nazwę!


jestem bardzo poczatkujacym dlatego pytam na forum
Turson
Początkujący początkującym, ale bazujesz na gotowcu
  1. <?php
  2. // POŁĄCZENIE Z BAZĄ DANYCH
  3. $db = new PDO('mysql:host=localhost;dbname=rooms', 'reex', 'reex1', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")) or die();
  4. // POBRANIE WSZYSTKICH MAREK SAMOCHODÓW (DISTINCT - pobieramy marki bez powtórzeń)
  5. $stmt = $db->query("SELECT Id, Nazwa FROM ulica");
  6. $ulica = $stmt->fetchAll();
  7. ?>
  8.  
  9. <form action="" method="post" id="formularz">
  10. <label for="ulica">Wybierz Ulice</label>
  11. <select id="ulica" name="ulica">
  12. <option>Wybierz</option>
  13. <?php foreach($ulica as $v): ?>
  14. <option value="<?php echo $v['Id']; ?>"><?php echo $v['Nazwa']; ?></option>
  15. <?php endforeach; ?>
  16. </select>
  17.  
  18. <label for="pokoj">Wybierz pokoj</label>
  19. <select id="pokoje" name="pokoj">
  20. </select>
  21. </form>
  22.  
  23. <script>
  24. $('#ulica').on('change', function(){
  25. var ulica = $(this).val();
  26. $.ajax({
  27. type: 'POST',
  28. url: 'szukaj.php',
  29. data: { 'ulica':ulica },
  30. success: function(msg){
  31. $("#pokoje").html(msg);
  32. }
  33. })
  34. })
  35. $('#formularz').submit(function(){
  36. /*
  37. SPRAWDZAMY, CZY UŻYTKOWNIK WYBRAŁ JAKIŚ MODEL, JEŻELI NIE TO NIE POZWALAMY WYSŁAĆ FORMULARZA
  38. */
  39. if (!$("#pokoje option:selected").length){
  40. alert('Wybierz pokoj');
  41. return false;
  42. }
  43. })
  44. </script>

- dopisałem Id w zapytaniu, żeby pobrało,
- dodane Id w value option

  1. <?php
  2. $db = new PDO('mysql:host=localhost;dbname=rooms', 'reex', 'reex1', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")) or die();
  3. $stmt = $db->prepare("SELECT `NrPokoju` FROM `pokoj`,`ulica` WHERE UlicaId=:ulica ");
  4. $stmt->bindValue(':ulica', $_POST['ulica'], PDO::PARAM_STR);
  5. $stmt->execute();
  6. $pokoje = $stmt->fetchAll();
  7. $odpowiedz = null;
  8. if(count($pokoje)){
  9. foreach($pokoje as $v){
  10. $odpowiedz .= '<option>'.$v['NrPokoju'].'</option>';
  11. }
  12. }
  13. echo !is_null($odpowiedz) ? $odpowiedz : '<option>Brak wyników</value>';

- poprawiłem zapytanie WHERE ... = :ulica
- wywaliłem kolumnę Nazwa bo takiej nie widzę w strukturze bazy
- w ostatniej linijce dopisałem, że wyświetli opcje brak wynikow jezeli nic nie znajdzie. To wskaze czy w ogóle czegoś szuka, bo przydałoby się odpalić konsolę w przeglądarce i zobaczyć odpowiedzi zapytania

Pisane z palca
lukas1986s
zmienilem jeszcze tylko jedna linijke w szukaj.php poniewaz powielalo sie

Kod
SELECT DISTINCT `NrPokoju` FROM `pokoj`,`ulica` WHERE UlicaId=:ulica "


dziekuje Turson
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.