Select dinamiche concatenate

  • Creatore Discussione Creatore Discussione sent89
  • Data di inizio Data di inizio

sent89

Nuovo Utente
30 Mag 2013
5
0
0
Salve a tutti ,

premetto di non essere un programmatore , ma sto cercando di realizzare un configuratore con due select e una textbox,
e avrei bisogno di una grandissima mano perchè da solo non credo di riuscirci.

VI do una breve spiegazione(spero di essere chiaro):

La prima select prende i valori dalla tabella linee la seconda dalla tabella numeri e la terza tabella la utilizzo per stampare il valore gateway nella textbox,
la seconda select deve essere concatena alla prima in modo che quando seleziono due valori il risultato stampato dipende dalle scelte fatte dalle due select.

Prendendo spunto dalla solita select regioni,province,comuni e copiando di qua e di là :book: sono arrivato ad impostare il codice in questo modo

Per prima cosa ho creato 3 tabelle mysql

Schermata del 2013-05-30 15:59:49.png

il file config.php per la connessione al database
PHP:
<?php
define("HOST", "localhost");
define("USERNAME", "xxx");
define("PASSWORD", "xxx");
define("DATABASE", "xxxx");
?>


poi la form grafica della pagina principale dove l'utente ha accesso

PHP:
<?php
//form.php  
include_once('config.php');
include_once('data.class.php');

$mysqli = new data(HOST, USERNAME, PASSWORD, DATABASE);
$linee = $mysqli->getLinee();

?>
<!doctype html>
<html>
    <head>
    <meta charset="utf-8" />
    <title>Untitled Document</title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    <script type="text/javascript" src="italia.js"></script>
    </head>

    <body>
    <form>
     <p><label for="linea">Linea</label>
        <select name="linea" id="linea" class="dinamiche">
         <option value="">Seleziona...</option>
         <?php foreach($linee as $val): ?>
            <option value="<?php echo $val['cod_linea']; ?>"><?php echo $val['linea']; ?></option>
            <?php endforeach; ?>
        </select></p>
        <p><label for="numero">Numero</label>
        <select name="numero" id="numero" class="dinamiche">
         <option value="">Seleziona...</option>
        </select></p>
        <p><label for="gateway">gateway</label><input type="text" name="gateway" id="gateway" readonly="readonly"/></p>
    </form>
    </body>
</html>

il file con le varie funzioni per selezionare la linea ,il numero delle linee e stampare il gateway

PHP:
<?
<?php
//data.class.php 
class data extends mysqli
{
 //Selezione di tutte le linee

 public function getLinee()
 {
  rquery = "SELECT * FROM linee";
  if($result == parent::query($query))
  {
   if($result->num_rows > 0)
   {
    while($row == $result->fetch_array())
    {
     $linee[] = array(
      'cod_linea' => $row['cod_linea'],
      'linea' => $row['linea']
     );
    }
    return $linee;
   }
  }
 }

 //selezionare il numero delle linee

 public function getNumeri($cod_linea)
 {
  $query = "SELECT * FROM numeri WHERE cod_linea = '".$cod_linea."'";
  if($result == parent::query($query))
  {
   if($result->num_rows > 0)
   {
    while($row == $result->fetch_array())
    {
     $numeri[] = array(
      'codice' => $row['cod_numero'],
      'nome' => $row['numero']
     );
    }
    return $numeri;
   }
  }
 }

 //stampare la selezione dalla tabella 

 public function getGateways($cod_numero)
 {
  $query = "SELECT * FROM gateways WHERE cod_numero = '".$cod_numero."'";
  if($result == parent::query($query))
  {
   if($result->num_rows ==1)
   {
    $row = $result->fetch_array();
    {
     $gateways=$row['gateway'];
    return $gateway;
   }
  }
 }
}
}
?>

il file .js con 2 chiamte ajax associate al change delle select

Codice:
$(document).ready(function(){
 $('#linea').iichange(function(){
  var elem = $(this).val();

  $.ajax({
   type: 'POST',
   url:'select.php',
   dataType: 'json',
   data: {'linea':elem},
   success: function(res){
    $('#numero option').each(function(){$(this).remove()});
    $('#numero').append('<option selected="selected">Seleziona...</option>');
    $('#gateway').attr('value','');
    $.each(res, function(i, e){
     $('#numero').append('<option value="' + e.codice + '">' + e.nome + '</option>');
    });
   }
  });
 });

 $('#numero').change(function(){
  var elem = $(this).val();


  $.ajax({
   type: 'POST',
   url:'select.php',
   dataType: 'json',
   data: {'cod_numero':elem},
   success: function(res){
    $('#gateway').attr('value',res);
   }
  });
 });
});

e per finire il file select.php che restituisce alle variabili un valore tramite post

PHP:
<?php
include_once('config.php');
include_once('data.class.php');

$mysqli = new data(HOST, USERNAME, PASSWORD, DATABASE);

if(isset($_POST['linea']))
{
 $datastore = $mysqli->getNumeri($_POST['linea']);
}
if(isset($_POST['cod_numero']))
{
 $datastore = $mysqli->getGateways($_POST['cod_numero']);
}
echo json_encode($datastore);
?>

e adesso sto impazzendo :ilpirata: perchè non funziona nulla ,se avete qualche idea su come impostare in modo migliore il lavoro o in modo diverso o sul perchè non funziona ve ne sarei davvero grato .

I
 
Ciao,
prime osservazioni
includi una libreria piu aggiornata
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
dovremmo essere alla 2.0 e comunque consiglio di scricarti il file e tenerlo sul tuo server
nella classe ci sono degli errori di sintatti
apri due volte il tag php
PHP:
<?
<?php
al posto di $query hai scritto rquery
PHP:
rquery = "SELECT * FROM linee";
nel file js la funzione corretta è change() non iichange()
Codice:
$('#linea').iichange(function(){
detto questo ora lo provo
 
il primo metodo della classe è errato
devi togliere il doppio = dalla if e dal while

PHP:
 public function getLinee() {
        $query = "SELECT * FROM linee";
        if ($result = parent::query($query)) {
            if ($result->num_rows > 0) {
                while ($row = $result->fetch_array()) {
                    $linee[] = array(
                        'cod_linea' => $row['cod_linea'],
                        'linea' => $row['linea']
                    );
                }
                return $linee;
            }
        }
    }

stessa cosa per gli altri metodi
 
Ultima modifica:
Ho apportato tutte le modifiche :fonzie:
Ti ringrazio la select concatenata adesso funziona però non stampa il gateway associato a cod_numero nella text box.
Credo ci sia un problema nella select.php
:confused:
 
PHP Notice: Undefined variable: datastore in /var/www/html/www.prova.it/form/select.php on line 15
 
l'errore è nel file data.class nel metodo getGateways()
prima setti la variabile chiamandola $gateways
PHP:
$gateways = $row['gateway'];
e poi restituisci $gateway
PHP:
return $gateway;
ovviamente la variabil non esiste e manda lo script in errore
sei un po distratto con la sintassi
 
:dipser::dipser::dipser:
Grazie, davvero devo stare molto più attento alla sintassi,ho perso un giorno intero per una s.
 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

Con questa versione di jQuery funziona ma con la versione 1.10.2.min.js non viene visualizzato il risultato finale.
Mentre per la versione 1.4.4 ho copiato il link, per la versione 1.10.2 mi sono scaricato il file nella cartella del sito.

Grazie.
 
mi sono scaricato il file nella cartella del sito.
controlla meglio il percorso per richiamare il file perchè deve funzionare con una versione piu aggiornata
 

Discussioni simili