abilitare menu a tendina tramite relativa chekbox

R@ff@

Nuovo Utente
19 Lug 2020
10
0
1
Ciao a tutti
Sono nuovo del forum, spero di aver scelto la sezione corretta, anche se il problema riguarda anche javascript.
Ho questo problema... ho una tabella, dove i dati sono ricavati da un db in sql, sostanzialmente ogni riga ha una checkbox che deve abilitarmi il menu a tendina di quella medesima riga.
Carico una immagine per essere più chiaro.
Questo avviene solo per la prima anche cliccando le successive checkbox non funziona.
Qualcuno può aiutarmi?
Grazie!!!

img.png
 
questo è il codice relativo alla tabella che estrae i dati dal db:
PHP:
$q=mysql_query("SELECT *

                FROM prodotti

                ORDER BY nome_prodotto;");


$r=mysql_num_rows($q);

    if ($r<=0){

        echo "<h4><img src='icone/error.png' style='border:0; width:100px;'/>ATTENZIONE!!! NON SONO PRESENTI PRODOTTI</h4>";

    }else{

    echo "<table class='table3'>";

    echo "<tr><th >Codice Prodotto</th><th>Nome Prodotto</th><th>Album</th><th>Quantità Disponibile</th><th>Prezzo Unitario</th><th>Quantità Ordinata</th><th>Seleziona</th></tr>";

    echo "<tr>";

    while ($r=mysql_fetch_array($q)){

        echo "<td width='120px'>".$r['codice']."</td>";

        echo "<td width='380px'>".$r['nome_prodotto']."</td>";

        echo "<td width='30px'>".$r['album']."</td>";

        echo "<td width='30px'>".$r['q.ta']."";

        if($r['q.ta']<='0'){

             echo "<img src='icone/red.png' style='border:0; width:20px; float:left;'/>";

            }elseif($r['q.ta']=='1'){

                echo "<img src='icone/orange.png' style='border:0; width:20px; float:left;'/>";

            }else{

                echo "<img src='icone/green.png' style='border:0; width:20px; float:left;'/>";

            }

        echo"</td>";

        echo "<td width='30px'>".$r['prezzo']."€</td>";

        echo "<td width='80px'>";

            echo "<select id='menu1' name='qta_ordinata' disabled='disabled'>";

                echo "<option selected='selected'>Seleziona una q.tà</option>";

        for ($c=1; $c<=$r['q.ta']; $c++){

                   echo "<option>$c</option>";

                   }

            echo "</select>";

        echo "<td width='10px'>";

        echo "<input type='checkbox' name='sel[]' value='".$r['codice']."' onclick='abilita_select(this)'></td>";

        echo "</tr>";

    }}

echo "</table>";


questo è la parte java:


<script>

    function abilita_select(obj){

        var stato=(obj.checked)?'':'disabled';

        document.getElementById('menu1').disabled=stato;}

</script>
Grazie!!!
 
Ultima modifica di un moderatore:
@R@ff@

Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
PHP (2).png
quando posti del codice php, oppure la funzione codice dalla barra degli strument
box inserisci.png

Inoltre IMPORTANTE: Prima di creare una nuova discussione o di rispondere alle discussioni esistenti ricordati di leggere attentamente il Regolamento del Forum e l'eventuale regolamento specifico della sezione!

Grazie

Usa i tag per il futuro
mi raccomando altrimenti sarò costretto a cancellare le discussioni
 
Ciao, prima di tutto modifica l'id Menu1 con una class="menu" inoltre aggiungi in "input type='checkbox'" class="sel", spero ti funzioni correttamente.

JavaScript:
'use strict';
        let menu = Array.from(document.getElementsByClassName('menu'));
        let checkbox = Array.from(document.getElementsByClassName('sel'));

        checkbox.forEach((e, key) => e.addEventListener('click', element => {
            if (element.target.checked == true) {
                menu[key].disabled = false;
            } else {
                menu[key].disabled = true;
            }
        }, false));
 
grazie ninja72 per la risposta...
ho provato ma non funziona non abilita nessun menù.
Ho sostituito il mio codice java con il tuo, fatto le sostituzioni che mi hai chiesto ma niente.
 
riposto il codice java, ho sostituito menu con ddl, perchè ho un'altra classe che si chiama cosi...
JavaScript:
<script>
'use strict';
      let ddl = Array.from(document.getElementsByClassName('ddl'));
      let checkbox = Array.from(document.getElementsByClassName('sel'));

      checkbox.forEach((e, key) => e.addEventListener('click', element => {
          if (element.target.checked == true) {
              ddl[key].disabled = false;
          } else {
              ddl[key].disabled = true;
          }
      }, false));
</script>
 
e questo è il codice della tabella con le modifiche.
PHP:
$q=mysql_query("SELECT *
                FROM prodotti
                ORDER BY nome_prodotto;");

$r=mysql_num_rows($q);
    if ($r<=0){
        echo "<h4><img src='icone/error.png' style='border:0; width:100px;'/>ATTENZIONE!!! NON SONO PRESENTI PRODOTTI</h4>";
    }else{
    echo "<table class='table3'>";
    echo "<tr><th >Codice Prodotto</th><th>Nome Prodotto</th><th>Album</th><th>Quantità Disponibile</th><th>Prezzo Unitario</th><th>Quantità Ordinata</th><th>Seleziona</th></tr>";
    echo "<tr>";
    while ($r=mysql_fetch_array($q)){
        echo "<td width='120px'>".$r['codice']."</td>";
        echo "<td width='380px'>".$r['nome_prodotto']."</td>";
        echo "<td width='30px'>".$r['album']."</td>";
        echo "<td width='30px'>".$r['q.ta']."";
        if($r['q.ta']<='0'){
             echo "<img src='icone/red.png' style='border:0; width:20px; float:left;'/>";
            }elseif($r['q.ta']=='1'){
                echo "<img src='icone/orange.png' style='border:0; width:20px; float:left;'/>";
            }else{
                echo "<img src='icone/green.png' style='border:0; width:20px; float:left;'/>";
            }
        echo"</td>";
        echo "<td width='30px'>".$r['prezzo']."€</td>";
        echo "<td width='80px'>";
            echo "<select class='ddl' name='qta_ordinata' disabled='disabled'>";
                echo "<option>Seleziona una q.tà</option>";
        for ($c=1; $c<=$r['q.ta']; $c++){
                   echo "<option>$c</option>";
                   }
            echo "</select>";
        echo "<td width='10px'>";
        echo "<input type='checkbox' class='sel' name='sel[]' value='".$r['codice']."'></td>";
        echo "</tr>";
    }}
echo "</table>";
 
Da me funziona , testato con FF, chrome e edge, (win10 in locale), da remoto forse necessità di una verifica sul caricamento totale del DOM della pagina, prova in questo modo.

JavaScript:
 'use strict';
        document.addEventListener('DOMContentLoaded', f);

        function f() {
            let ddl = Array.from(document.getElementsByClassName('ddl'));
            let checkbox = Array.from(document.getElementsByClassName('sel'));

            checkbox.forEach((e, key) => e.addEventListener('click', element => {
                if (element.target.checked == true) {
                    ddl[key].disabled = false;
                } else {
                    ddl[key].disabled = true;
                }
            }, false));
        }
 
perfetto grazie mille funziona a meraviglia!!! :):):)
ne approfitto per chiederti un'altra cosa.
ho creato 2 array (sel[] e qta_ordinata[]), dove all'interno, rispettivamente, salvo i codici dei prodotti selezionati e le q.tà.
il mio problema è il seguente:
riesco a passare gli array nella pagina successiva che fa l'inserimento nel db (inserimento in 2 tabelle diverse ordine e appartengono), ma non riesco ad avere i dati corretti, quello delle q.tà mi da un valore errato, credo che legga l'indice e non il valore.
posto il codice della pagina di salvataggio.

Sicuramente va fatto un ciclo di controllo prima dell'inserimento nella tabella appartengono

PHP:
$cognome=$_POST['cognome'];
$nome=$_POST['nome'];
$indirizzo=$_POST['indirizzo'];
$data_ordine=$_POST['data_ordine'];
$pagato=$_POST['pagato'];
$data_pagamento=$_POST['data_pagamento'];
$data_spedizione=$_POST['data_spedizione'];
$costo_spedizione=$_POST['costo_spedizione'];
//dati prodotti catalogo
$prodotto=$_POST['sel'];
$qta_ordinata=$_POST['qta_ordinata'];

//trasformazione dati in maiuscolo
$COGNOME=strtoupper($cognome);
$NOME=strtoupper($nome);
$INDIRIZZO=strtoupper($indirizzo);
$NOME=strtoupper($nome);

//verifico i dati
foreach ($prodotto as $p_sel=>$value){
    echo "".$p_sel."-".$value."**";
}
    echo "</br>";
    foreach ($qta_ordinata as $nr_qt=>$nr_value){
            echo "".$nr_qt."-".$nr_value."++";
}


//inserisco i prodotti nel db
if($cognome!="" and $nome!="" and $indirizzo!="" and $data_ordine!=""){
        mysql_query ("INSERT INTO ordine VALUES
        ('".$COGNOME." ".$NOME."', '".$data_ordine."', '".$pagato."', '".$data_pagamento."', '".$INDIRIZZO."', '".$data_spedizione."', '".$costo_spedizione."');");
      mysql_query ("INSERT INTO appartengono VALUES
        ('".$value."', '".$nr_value."', '".$data_ordine."','".$COGNOME." ".$NOME."');");
    echo "<h3><img src='icone/ok.png' style='border:0; width:100px;'/>ORDINE INSERITO CORRETTAMENTE.</h3>";
    }else{
        echo "<h4><img src='icone/warning.png' style='border:0; width:100px;'/>ATTENZIONE!!! COMPLETARE TUTTI I CAMPI</h4>";
    }
 
hai corretto questa riga ?
da:
echo "<select class='ddl' name='qta_ordinata' disabled='disabled'>";
a:
echo "<select class='ddl' name='qta_ordinata[]' disabled='disabled'>";
 
si.
gli array contengono i dati corretti, però quando vado a fare l'inserimento, lo fa, ma ci sono dati errati
mi spiego meglio il primo array sel[] contiene i codici dei prodotti in questo formato
0-56342**1-23098**
mentre il secondo qta_ordinata[] contiene i valori che seleziono dal menù a tendina fatto prima e
0-1++1-2++
nella tabella appartengono mi inserisce correttamente tutto tranne le q.tà mi inserisce sempre e solo 1 anche se dalla stampa del array qta_ordinata c'è come valore 2.
sembra che inserisca l'indice del valore e non il valore.
 
potresti verificare il tipo di dato che stai passando con echo gettyp($tuavariabile), magari è diversa dal tipo assegnata al database.
 
non mi da nessun risultato echo gettyp($variabile).
comunque i dati, nel db, sono varchar.
 
Il mio dubbio era sul fatto che potevi passare una dato di tipo stringa ad un campo integer del database, per quello ti ho chiesto il controllo con echo gettyp($nr_value) ma visto che sono di tipo varchar il problema è altrove. Se non ho capito male su $nr_value si trovano le quantità dell'ordine in riferimento al prodotto, verifica se siano ciclate correttamente prima dell'inserimento. Con un minimo di debug non dovrebbe essere complesso risolvere, putroppo non avendo database con i relativi dati sottomano per me è un po' difficile riprodurre il problema.
 
risolto anche questo problema.
semplicemente ho fatto un ciclo for utilizzando la variabile come indice dell'array.
Credevo fosse più complesso, ho provato la soluzione più semplice ed ha funzionato al primo colpo.

Grazie per l'aiuto @ninja72!!!
 

Discussioni simili