Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Update multiplo e checkbox

    salve!
    ho un problema con l'update multiplo e le checkbox:
    Codice PHP:
    <?php
    if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['btn_articolo'])) {
        for (
    $i 0$i count($_POST['codice']); $i++) {
            
    updateArticolo($_POST['window'][$i], $_POST['abilitato'][$i], $_POST['codice'][$i]);
        }
    }
    ?>
    <form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
        <input type="submit" value="Submit" name="btn_articolo" />
        <?php
        
    foreach (getArticoli() as $var) {
            
    $selected '';
            if (
    $var['abilitato'] == 1) {
                
    $selected 'checked="checked"';
            }
            echo 
    '

    '
    ;
            echo 
    $var['articolo_codice'];
            echo 
    ' - <input type="text" name="window[]" value="' $var['window'] . '" size="3" />';
            echo 
    ' - <input type="checkbox" name="abilitato[]" value="1" ' $selected ' />';
            echo 
    '<input type="hidden" name="codice[]" value="' $var['articolo_codice'] . '" />';
            echo 
    '</p>';
        }
        
    ?>
        <input type="submit" value="Submit" name="btn_articolo" />
    </form>
    il problema è questo:
    se metto la spunta su un qualsiasi valore l'update viene sempre fatto sul primo.
    quindi se ad esempio selezioni il 4 rrigo l'update viene fatto sul primo.
    se selezioni il 10 e il 33 viene fatto sul primo e il secondo.
    ecc....
    avete idea del perchè?

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    E' presto detto:
    Come funzionano le checkbox?
    se è selezionata il suo valore viene passato nel form
    se non è selezionata non solo non viene passato alcun valore, ma in $_POST non hai un'indice relativo alla checkbox.

    Esempio:
    codice:
    <input type="checkbox" name="NomeCheck" value="1">
    Se la check box precedente è spuntata potrai acceder al suo valore con $_POST['NomeCheck']
    Se la check box non è spuntata allora l'indice NomeCheck nell'array $_POST non esiste, ovverosia isset($_POST['NomeCheck']) ritorna false.

    Nel tuo codice giustamente utilizzi gli array per le check box
    codice:
    <input type="checkbox" name="abilitato[]" value="1">
    quindi cosa accade se hai 12 checkbox di cui le prime 10 non selezionate e le utlime due selezionate?
    le prime 10 non trasmettono nulla dal form mentre le ultime due generano
    $_POST['NomeCheck'][]=1
    $_POST['NomeCheck'][]=1

    ovvero avrai un array con 2 elementi con indice 0 e 1 entrambi con valore 1

    Ti manca quindi la possibilità di discriminare quali check box sono state selezionate. Per farlo basta che all'attributo value non ti limiti da assegnare sempre 1, ma piuttosto un id (nel tuo caso credo sia articolo_codice) che ti può far discriminare se spuntare o meno una data check box di un certo articolo quando ricarichi la pagina cliccando sul pulsante della form.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    ciao!
    intanto grazie per la spiegazione.
    ma purtroppo nn sono ancora riuscito.
    ho provato in questo modo:
    Codice PHP:
    <?php
    if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['btn_articolo'])) {
        
    $ab NULL;
        for (
    $i 0$i count($_POST['codice']); $i++) {
            if (isset(
    $_POST['abilitato'][$i])) {
                
    $ab 1;
            } else {
                
    $ab 0;
            }
            
    updateArticoli($_POST['window'][$i], $ab$_POST['codice'][$i]);
        }
    }
    ?>
    <form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
        <input type="submit" value="Submit" name="btn_articolo" />
        <?php
        
    foreach (getArticoli() as $var) {
            
    $selected '';
            if (
    $var['abilitato'] == 1) {
                
    $selected 'checked="checked"';
            }
            echo 
    '

    '
    ;
            echo 
    $var['articolo_codice'];
            echo 
    ' - <input type="text" name="window[]" value="' $var['window'] . '" size="3" />';
            echo 
    ' - <input type="checkbox" name="abilitato[]" value="' $var['articolo_codice'] . '" ' $selected ' />';
            echo 
    '<input type="hidden" name="codice[]" value="' $var['articolo_codice'] . '" />';
            echo 
    '</p>';
        }
        
    ?>
        <input type="submit" value="Submit" name="btn_articolo" />
    </form>
    ho assegnato un altro valore alle checkbox, e poi ho fatto il test per vedere se erano ceccate o no.
    però anche così ottengo lo stesso risultato.

  4. #4
    allora.
    dopo aver fatto parecchie prove e essere andato a guardare anche vari esempio su internet nn ho risolto.
    nessuno dice come fare a gestire le checkbox nn selezionate.
    che in sostanza è quello che mi manca a me......

  5. #5
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Penso che il tuo codice con queste due modifiche possa funzionare:

    Codice PHP:
    <?php
    if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['btn_articolo'])) {
        
    $ab NULL;
        if(!
    is_array($_POST['abilitato'])//Nel caso in cui nessun elemento abbia la spunta
            
    $_POST['abilitato']=array();
        for (
    $i 0$i count($_POST['codice']); $i++) {
            if (
    array_search($_POST['codice'][$i],$_POST['abilitato'])!==false) {//MODIFICA
                
    $ab 1;
            } else {
                
    $ab 0;
            }
            
    updateArticoli($_POST['window'][$i], $ab$_POST['codice'][$i]);
        }
    }
    ?>
    <form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
        <input type="submit" value="Submit" name="btn_articolo" />
        <?php
        
    foreach (getArticoli() as $var) {
            
    $selected '';
            if (
    $var['abilitato'] == 1) {
                
    $selected 'checked="checked"';
            }
            echo 
    '

    '
    ;
            echo 
    $var['articolo_codice'];
            echo 
    ' - <input type="text" name="window[]" value="' $var['window'] . '" size="3" />';
            echo 
    ' - <input type="checkbox" name="abilitato[]" value="' $var['articolo_codice'] . '" ' $selected ' />';
            echo 
    '<input type="hidden" name="codice[]" value="' $var['articolo_codice'] . '" />';
            echo 
    '</p>';
        }
        
    ?>
        <input type="submit" value="Submit" name="btn_articolo" />
    </form>
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  6. #6
    grazie mille funziona!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.