Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]dynamiczne, zalezne selecty
lukas1986s
post 10.06.2014, 17:46:07
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 25.08.2012

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


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;

Go to the top of the page
+Quote Post
trueblue
post 10.06.2014, 17:49:27
Post #2





Grupa: Zarejestrowani
Postów: 6 804
Pomógł: 1827
Dołączył: 11.03.2014

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


Gdzie jest warunek na nazwę ulicy w zapytaniu w szukaj.php?


--------------------
Go to the top of the page
+Quote Post
lukas1986s
post 10.06.2014, 17:57:35
Post #3





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 25.08.2012

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


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


nie wiem jak to skonstruwowac
Go to the top of the page
+Quote Post
Turson
post 10.06.2014, 18:06:10
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Przedstaw jakie masz kolumny to będzie prościej
Go to the top of the page
+Quote Post
snerf
post 10.06.2014, 18:10:40
Post #5





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

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


Może nie jestem jakiś sprytny ale czy:
WHERE pokoj.UlicaId=ulica.Id ");

Nie powinno być:
:ulica questionmark.gif

Go to the top of the page
+Quote Post
Turson
post 10.06.2014, 18:16:10
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Powinno
Go to the top of the page
+Quote Post
lukas1986s
post 10.06.2014, 18:20:45
Post #7





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 25.08.2012

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


moje tabele

'ulica'



'pokoj'



'mieszkaniec'

Go to the top of the page
+Quote Post
Turson
post 10.06.2014, 18:24:13
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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ę!

Ten post edytował Turson 10.06.2014, 18:26:15
Go to the top of the page
+Quote Post
lukas1986s
post 10.06.2014, 18:30:10
Post #9





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 25.08.2012

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


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
Go to the top of the page
+Quote Post
Turson
post 10.06.2014, 18:36:58
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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

Ten post edytował Turson 10.06.2014, 18:37:23
Go to the top of the page
+Quote Post
lukas1986s
post 10.06.2014, 18:48:12
Post #11





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 25.08.2012

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


zmienilem jeszcze tylko jedna linijke w szukaj.php poniewaz powielalo sie

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


dziekuje Turson

Ten post edytował lukas1986s 10.06.2014, 18:53:53
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 1.07.2025 - 16:57