Problema con checkbox multiple

  • Creatore Discussione Creatore Discussione blips
  • Data di inizio Data di inizio

blips

Nuovo Utente
12 Mar 2013
29
1
3
Ciao a tutti, vi espongo un problema che proprio non riesco a risolvere sperando in un vostro aiuto.

Ho una serie di checkbox all'interno di un ciclo while che in base alla selezione inviano il valore 1 o 0 a un campo di una tabella del mio database:

FORM
HTML:
<form action="<?php echo $editFormAction; ?>" method="post" name="form2" id="form2">   
               <table width="100%">                 
  <tr class="title">
    <td width="50%" class="head">Nome Asta</td>    
    <td width="20%" class="head">tipo</td>    
    <td width="10%" class="head">attiva</td>
  </tr>  
<?php do { ?>  
    <tr>
      <td class="table1"><?php echo $row_dataauctionfree['fauctionName']; ?></td>
      <td class="table1"><?php echo $row_dataauctionfree['fauctionType']; ?></td>      
      <td class="table1lastfield"><input type="checkbox" onclick="document.forms.form2.submit();" name="fauctionActive[]" value="<?php echo $row_dataauctionfree['id']; ?>"
<?php if (!(strcmp(htmlentities($row_dataauctionfree['fauctionActive'], ENT_COMPAT, 'utf-8'),1))) {echo "checked=\"checked\"";} ?> /></td>
    </tr>   
    <?php } while ($row_dataauctionfree = mysql_fetch_assoc($dataauctionfree)); ?>
</form>
                </table>

QUERY UPDATE

PHP:
if (isset($_POST ["fauctionActive"])) {
	     $ids = $_POST ['fauctionActive'];  
		 $updateSQL = ("UPDATE f_auctionfree set fauctionActive=1 WHERE id IN ('".implode("','",$ids)."')");
		 mysql_select_db($database_config, $config);
  $Result1 = mysql_query($updateSQL, $config) or die(mysql_error());
		 $updateSQL2 = ("UPDATE f_auctionfree set fauctionActive=0 WHERE id NOT IN ('".implode("','",$ids)."')");		
		  mysql_select_db($database_config, $config);
  $Result1 = mysql_query($updateSQL2, $config) or die(mysql_error());
$updateGoTo = "auctionsv_list.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $updateGoTo));
  }

Ora, il mio problema è questo: tutto funziona alla perfezione, ma rimane sempre selezionata una checkbox. Cioè, in pratica, non riesco ad avere tutte le checkbox deselezionate.

Penso che questo derivi dal fatto che il submit del form avviene tramite la selezione del checkbox(onclick="document.forms.form2.submit();").

Se infatti levo il submit automatico e metto il normale bottone di invio tutto va alla perfezione.

Come risolvo?
 
Ultima modifica:
Mi sembra tutto eccessivamente complicato e caotico. In particolare mi sfugge l'utilità dell'invio automatico: così puoi selezionare solo una checkbox. Ecco come l'avrei fatto io (semplificato):
PHP:
<?php

// ...

if ('POST' === $_SERVER['REQUEST_METHOD']) {
    $ids = isset($_POST['ids']) ? $_POST['ids'] : array();

    // converto tutti gli ID in interi per evitare SQL injection
    $ids = array_map(function($id) {
        return (int)$id;
    }, $ids);

    $idsSql = implode(', ', $ids);

    $sql1 = "UPDATE TABLE f_auctionfree SET fauctionActive = 1 WHERE id IN ({$idsSql})";
    $sql2 = "UPDATE TABLE f_auctionfree SET fauctionActive = 0 WHERE id NOT IN ({$idsSql})";

    // ...
} else {
    // ...

    echo <<<EOF
<form action="{$_SERVER['REQUEST_URI']}" method="post">
    <table>
        <thead>
            <tr>
                <th>Nome</th>
                <th>Tipo</th>
                <th>Attiva</th>
            </tr>
        </thead>

        <tbody>
EOF;

    foreach ($auctions as $auction) {
        echo <<<EOF
            <tr>
                <td>{$auction['fauctionName']}</td>
                <td>{$auction['fauctionType']}</td>
                <td><input type="checkbox" name="ids[]" value="{$auction['id']}"></td>
            </tr>
EOF;
    }

    echo <<<EOF
        </tbody>
    </table>
EOF;
}
Inoltre la libreria mysql è deprecata di fatto. Usa mysqli o PDO.
 

Discussioni simili