[Javascript] Estrazione dal database di un valore in base ad una scelta

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Salve, avrei bisogno di uno script js da affiancare ad un sistema di creazione fatture in php/mysql che permetta di estrarre un valore (editabile, quindi inseribile in un campo input e possibilmente convertibile in una variabile php) in base ad una precedente scelta fatta dall'utente tramite un campo select.

Mi spiego meglio: mettiamo che nella form per la creazione della fattura ho un campo select con tutti i servizi (estratti da un altra tabella del database). Selezionando un servizio in automatico in un altro campo avrò il suo prezzo (presente nella stessa tabella del database dove ho registrato il servizio). Quest'ultimo dovrà poter essere editabile e vorrei che risulti come variabile php così da poterla lavorare più facilmente.

Grazie a tutti per l'aiuto.
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.298
332
83
Perchè in JS e non in PHP?
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Ciao Max, perché vorrei che il prezzo appaia dinamicamente, ovvero che venga mostrato nella form appena l'utente selezioni l'opzione desiderata, e credo che non si possa fare tramite php ma solo in javascript.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
credo che non ti basti js ma ti ci voglia ajax+php, un po che quando con una <selct> selezioni una regione e ti appare una <select> con le provincie della regione selezionata.
penso che max1 sappia farlo (io l'ho fatto ma scopiazzando a dx e sx)
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.298
332
83
Vedi qui!
Select dinamica per scelte multiple
Ovvio che al posto dei link dovrai mettere le tue istruzioni
Se invece vuoi estrarre i dati da un database in base alle scelte la cosa è diversa e le select devono essere abbinate a PHP
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
potresti provare (ocio ho detto provare) a fare una cosa del genere, ho "cercato" di adattare quello che ho copiato per le regioni/province/comuni.
però non so assolutamente se funziona (@max1 potrebbe darci un occhio)
quindi due pagine php.
una con il form con la select e il campo che si dovrebbe riempire con la scelta
PHP:
<!DOCTYPE HTML>
<html>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type="text/javascript">
            $(document).ready(function(){
                prezzi();//comuni()
                $("select").change(function(){
                    prezzi();//comuni()
                })
            })
            function prezzi() { //comuni()
                $.ajax({
                    type: "POST",
                    url: "ricerca.php",
                    data: $("#ricerca").serialize(),
                    success: function(response){
                        eval(response);
                    }
                });
            }
</script>
<head>
<body>
<?php
if(isset($_POST['invia'])){
    var_dump($_POST['sezione']);
    var_dump($_POST['prezzo']);
    //i vari controlli necessari ecc....
}
?>
<form id="ricerca" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
    <select name="servizio">
        <option value=""></option>
    </select>
    <input name="prezzo" type="text" value="">
    <br>
    <input type="submit" name="invia" value="invia">   
</form>
</body>
</html>
e una pagina ricerca.php che riempie il campo prezzo in funzione della scelta
PHP:
<?php
// recupero vaolori delle select
$servizio = $_REQUEST['servizio'];
require_once "../_connessione/connessione.php";
$query = mysql_query("SELECT * FROM servizi ORDER BY sezione");//la tabella in cui hai le varie sezioni
// svuoto la select regione
echo "$('select[name=\"servizio\"]').empty();";
// aggiungo una option vuota
echo "$('select[name=\"servizio\"]').append('<option value=\"\">&darr;&nbsp;&darr;</option>');";
while ($row = mysql_fetch_array($query)) {
    // imposto il selected sull'eventuale regione scelta
   $selected = "";
    if ($row['id'] == $servizio) {
        $selected = "selected=\"selected\"";
    }
    // popolo la select
    echo "$('select[name=\"servizio\"]').append('<option $selected value=\"" . $row['id'] . "\">" . ($row['servizio']) . "</option>');";
}
// se è stata scelta una regione
if (!empty($sezione)) {
    // estraggo il prezzo della sezione scelta
    //$query = mysql_query("SELECT prezzo FROM servizio WHERE id_servizio ='$servizio'");//se il prezzo è in una tabella diversa
    $query = mysql_query("SELECT prezzo FROM servizi WHERE id ='$servizio'");//se il prezzo è nella stessa tabella
    // svuoto il campo del prezzo
    echo "$('input[name=\"prezzo\"]').empty();";
    $row =  mysql_fetch_array($query);
    // popolo il campo prezzo
    echo "$('input[name=\"prezzo\"]').append('value=\"".$row['prezzo']. "');";
}
?>
è evidente comunque che devi adattare i nomi dei campi/tabelle/variabili a quello che hai tu
poi @Max1 dacci un occhio farebbe comodo anche a me che funzionasse
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
In rete ho trovato un interessante esempio di select dinamica che ho provato a riadattare, anche seguendo i vostri consigli, in base alle mie esigenze. Lo devo provare nell'intera form ma per ora il risultato è soddisfacente. L'unica cosa è che vorrei sostituire la seconda select con un classico campo input di testo, quindi ottenere il risultato come value e non come option, sapreste dirmi come si fa? Lo script è questo (forse ho mischiato php e javascript in modo poco ortodosso dato che Komodo mi restituisce un errore, ma funziona).

HTML:
<script language="javascript"> 
/*Questa funzione legga il valore passato come parametro e dato il valore
aggiunge delle opzioni al secondo campo*/
function selezionaOpzioni(scelta)
{ 
/*Resetto le opzioni precedenti del campo*/
var importo = document.form.importo; 
importo.options.length = 0;
/*verifico la scelta e aggiungo i campi*/
<?php
    $quary = "SELECT id, importo FROM $tablePrestazioni ORDER BY descrizione";
    if ($result = mysqli_query($mysqli_connect, $quary))
    {
        while ($row = mysqli_fetch_array($result))
        {   
?>
            if (scelta == "<?php echo $row[0] ?>") { 
            importo.options[importo.options.length] = new Option('<?php echo $row[1] ?>');
            }
<?php
        }
    }
?>   
}
/*questa funzione prende il valore del campo_princilale
e fa una chiamata alla funzione selezionaOpzioni sfruttando il parametro*/
function aggiornaOpzioni(scelta){
    var valore_selezionato = document.form.prestazione.selectedIndex;
    var campo = document.form.prestazione.options;
    selezionaOpzioni(campo[valore_selezionato].value);
}
</script> 

<form name="form"> 
Prestazione:
<select name="prestazione" size="1" onChange="aggiornaOpzioni();">
<?php
$quary = "SELECT id, descrizione FROM $tablePrestazioni ORDER BY descrizione";
if ($result = mysqli_query($mysqli_connect, $quary))
{
    while ($row = mysqli_fetch_array($result))
    {
?>
    <option value="<?php echo $row[0] ?>"><?php echo $row[1] ?></option>
<?php
    }
}


?>
</select> 
<br /> 
<br /> 
Importo:
<select name="importo" size="1"> 
</select> 
</form>