• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dwa selecty zależne od Siebie pobieranie z mysql PHP Ajax nie działa 2 select

0 głosów
1,466 wizyt
pytanie zadane 28 września 2016 w PHP przez Zbigniew Andrysiak Bywalec (2,470 p.)
edycja 28 września 2016 przez Zbigniew Andrysiak

Posiadam taki kod jak poniżej. Niestety nie działa mi drugi select pomóżcie co robię źle. Kolumny w SQL ID model3, brand2.

HEAD

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  <script type="text/javascript">
$(document).ready(function()
{
     $(".brand2").change(function()
     {
     var id = $(this).val();
     var dataString = 'brand2='+ id;

     $.ajax
          ({
               type: "POST",
               url: "ajax_model.php",
               data: dataString,
               cache: false,
               success: function(html)
               {
                    $(".model3").html(html);
               }
          });
     });
});
</script>

 

Poniżej kod PHP

<?php

echo '<select name="marka" class="marka" width="25">'
        .'<option value="">--wybierz markę--</option>';
        $result2 = $db->query("SELECT ID,brand2 FROM cennikmobi10 group by brand2");
        $result2->execute();
        while ($row2 =$result2 -> fetch()) {
          $id = intval($row2['ID']);
          $marka = $row2['brand2'];
          echo '<option value="'.$id.'">'.$marka.'</option>';
        }
        echo '</select><br>';

        echo '<select class="model" name="model">'.'<option selected="selected">--wybierz model--</option>'.'</select>';
?>
 

I plik ajax_model.php

Oczywiście ajax.js też mam

<?php
    include("../configbase.php");
  echo '<option selected="selected">--wybierz model--</option>';
        $mid = $_POST['ID'];
        if(!empty($mid)) {
        
          $result2 = $db -> query("SELECT id,model3 FROM cennikmobi10 WHERE id= $mid order by model3");
          $result2 -> execute();
          while ($row = $result2 -> fetch()) {
            $id = intval($row['ID']);
            $model = $row['model3'];
            echo '<option value="'.$id.;'">'.$model.'</option>';
          }
         }
  	    
  ?>

 

komentarz 28 września 2016 przez Boshi VIP (100,240 p.)
co znaczy nie działa? co zwraca serwer?
komentarz 5 kwietnia 2020 przez Piotr Popławski Użytkownik (610 p.)

@Zbigniew Andrysiak,
Działa wszystko i jest ok, mam pytanie jak dodać kolejne pole select, które będzie podobnie jak drugie uzupełniane w zależności od wyboru drugiego selectu.

Czyli:

wybrałem pierwszy select->uzupełniany jest drugi select->wybrałem pole z drugiego selectu->uzupełniony jest trzeci select.

2 odpowiedzi

+1 głos
odpowiedź 29 września 2016 przez efiku Szeryf (75,160 p.)
edycja 29 września 2016 przez efiku

no bo robisz kopiuj wklej z jakiegoś skryptu to jak ma działać.

1)

<select name="marka" class="marka" width="25" id="marka">
<option value="">--wybierz markę--</option>
 ... itd
</select>

<select class="model" name="model" id="model">
<option selected="selected">--wybierz model--</option>
</select> 

 

2)

$("#marka").change(function(){
     var id = $(this).val();
     $.ajax
          ({
               type: "POST",
               url: "ajax_model.php",
               data: { marka: id },
               cache: false,
               success: function(html)
               { 
                   //  ten argument html zwraca coś takiego dla danej marki: tylko dla zobrazowania
//                      html = {
//                               { id: 33 , name: 'Samsung G4'},
//                               { id: 22, name: 'Nokia 3310'}
//                       };
                    $("#model").html("");
                    html.forEach(function(marka) {
                             $('#model').append( new Option(marka.name,marka.id) );
                         });
               }
          });
});

 

3)  PHP:

<?php
 header(...);
 $model = $sql->prepare("SELECT id,name from MARKA where model=:model");
 $sql->execute( [ ":model" => $_GET["model"] ] );
 ....
 
 $marki = $sql->fetchAll();

 echo json_encode($marki) 
// zwroci  {  id : 10 , name: "Nokia 3310"  } 

 

https://jsfiddle.net/xr1ouL00/

komentarz 7 października 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)

Dobra pozmieniałem, poczytałem i mam coś takiego dwa pliki jeden główny cennik3.php i drugi fecth_state.php. Niestety po wyborze marki nie może wyciągnąć mi modelu. Pokazują się albo wszystkie modele, albo nic się nie pokazuje. Druga kwestia że jest kilka modeli takich samych.

<?php  
include('../configbase.php');
 function load_country()  

 {  
      
    $output = '';  
    global $db;
      $result=$db->query("SELECT * FROM marki Order By Marka_ID"); 
      $result->execute();  

      while($row = $result->fetch())  
     {  
          $output .= '<option value="'.$row["Marka_ID"].'">'.$row["Marka"].'</option>';  
      }  
    return $output;
 }  
?>
<html>  
      <head>  
           <title>Cennik</title>  
           <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.js"></script>  
            <script>  
 $(document).ready(function(){  
      $('#marka').change(function(){  
           var Marka_ID = $(this).val();  
           $.ajax({  
                url:"fetch_state.php",  
                method:"POST",  
                data:{markaId:Marka_ID},  
                dataType:"text",  
                success:function(data)  
                {  
                     $('#model').html(data);  
                }  
           });  
      });  
 });  
 </script>  
      </head>  
      <body>  
     <p>Wybierz Markę  
           <select name="marka" id="marka">  
                <option value="">Wybierz Markę</option>  
               <?php echo load_country(); ?>  
           </select></p>  
           
           <p>Wybierz model
           <select name="model" id="model">  
                <option value="">Wybierz Model</option>  
           </select></p>  
      </body>  
 </html>  

 

Oraz plik fetch_state.php

<?php  
 include ("../configbase.php") ;
 $output = '';  
 global $db;
 $result = $db -> query("SELECT * FROM CennikMobi10 where Marka_ID = :id GROUP BY Model"); 
 $result -> bindValue(":id", $_POST["markaID"] , PDO::PARAM_STR);
 $result -> execute();
 $output = '<option value="">Wybierz model</option>';  
while ($row =$result -> fetch()) 
 {  
      $output .= '<option value="'.$row["Marka_ID"].'">'.$row["Model"].'</option>';  
 }  
 echo $output;  
 ?>  

 

komentarz 7 października 2016 przez efiku Szeryf (75,160 p.)
Global $db. Dalej nie czytam. Ja u siebie nie użyłem ani grama htmla. Zwykle dane jsonem.
komentarz 7 października 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)

Efik Ty definiujesz w skrypcie marki a ja chcę je pobrać z bazy. Global Bo inaczej mi nie nawiązuje połączenia z bazą.

var c = [
  [{
    "id": 33,
    "name": "Samsung G4"
  }, {
    "id": 22,
    "name": "Samsung C10"
  }],
  [{
    "id": 13,
    "name": "Nokia G4"
  }, {
    "id": 3,
    "name": "Nokia C10"
  }]
];

 

komentarz 7 października 2016 przez efiku Szeryf (75,160 p.)
No ale ja pokazałem 3 plkki nie jeden. Zresztą ja je definiuje dla fake json response jsfiddle. Zresztą ja Ci gotowca nie dam. Pokazałem plik php z przykładowym możliwym rozwiązaniu. Global oznacza błąd projektowy. ;)
komentarz 7 października 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)
edycja 7 października 2016 przez Zbigniew Andrysiak

Dyskutujemy dalej (jeśli oczywiście masz ochotę i nikt nas stąd nie wykurzy). Gdy usunę global to mam błąd

<b>Notice</b>:  Undefined variable: db in <b>C:\xampp1\htdocs\mobidoktor\cennik3.php</b> on line <b>9</b><br />
<br />
<b>Fatal error</b>:  Call to a member function query() on null in <b>C:\xampp1\htdocs\mobidoktor\cennik3.php</b> on line <b>9</b><br />

Nawet taki sposób nie daje prawidłowego wykonywania skryptu.

<?php  
//include('../configbase.php');
$db = new PDO('mysql:host=localhost;dbname=artykuly', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
 function load_country()  

 {  
      
    $output = '';  
   // global $db;
      $result=$db->query("SELECT * FROM marki Order By Marka_ID"); 
      $result->execute();  

      while($row = $result->fetch())  
     {  
          $output .= '<option value="'.$row["Marka_ID"].'">'.$row["Marka"].'</option>';  
      }  
    return $output;
 }  
?>

 

–1 głos
odpowiedź 28 września 2016 przez Paweł Barszcz Użytkownik (950 p.)

Robisz podstawowe błędy oraz Twój kod jest troszkę nieczytelny :)

 

  echo '<select class="model" name="model">'.'<option selected="selected">--wybierz model--</option>'.'</select>';

zamień na  :

  echo '<select class="model" name="model"><option selected="selected">--wybierz model--</option></select>'; 

Chociaż lepiej będzie jak przestawisz więcej szczegółów o co chodzi z tym "nie działa".

Chodzi o kwestię HTML czy działania do serwera (PHP) ? 

komentarz 28 września 2016 przez Zbigniew Andrysiak Bywalec (2,470 p.)
A więc tak. Pierwszy select pokazuje mi wszystkie modele z bazy, natomiast po wybraniu tego pierwszego drugi już nie pokazuje. Nie wiem czy można podawać stronę do testów, ale spróbuję. Tutaj jest

http://nastrone.eu/test2.php

Podobne pytania

0 głosów
2 odpowiedzi 830 wizyt
pytanie zadane 7 listopada 2016 w PHP przez lukasz33 Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 582 wizyt
pytanie zadane 29 stycznia 2018 w HTML i CSS przez DudSon Użytkownik (680 p.)
0 głosów
1 odpowiedź 619 wizyt

93,691 zapytań

142,610 odpowiedzi

323,216 komentarzy

63,218 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...