checkbox multivalore

[email protected]

Nuovo Utente
20 Mar 2015
3
0
0
Ciao,
ho un problema simile con i checkbox multivalore inseriti all'interno di un cms.

I checkbox della form si riferiscono a categorie tipo Moda, Alimenti, Sport, Libri ecc. e li genero dinamicamente con un ciclo while pescando da una tabelle del db. Ora se chi lavora sul cms seleziona i suoi checkbox, perché li associa a un determinato negozio, io li recupero in questo modo:

$categoria = serialize($_POST['categorie']); // nello specifico recupero gli id

In effetti, l'inserimento a DB sembra funzionare. Infatti sul DB, nella tabella negozi, me li salva in un campo con una dicitura del genere

a:2:{i:0;s:1:"8";i:1;s:2:"18";}

Ora li voglio recuperare e lo faccio con la funzione unserialize in questo modo

$categoria_id = $sql_ris['categoria_id']; // salvo tutto nella variabile $categoria_id dopo la chiamata a db e mysql_fetch_array
$single_value=unserialize($categoria_id); // qui unserializzo

Ora se stampo a video $single_value mi restituisce un array del tipo

Array ( [0] => 8 [1] => 18 )

Il problema è che io dovrei confrontare ogni singolo valore (id) di questo array con gli id delle categorie che genero dinamicamento per creare l'elenco di tutte le categorie, in modo da rendere checked quelle corrispondenti.

Ma se faccio questo confronto

if($single_value==$id_categoria) ...

non ottengo alcun risultato.

Potresti gentilmente darmi delle dritte, sempre se ciò che ho scritto risulta comprensibile.

Grazie
Pino
 
ciao
se non ho capito male potresti provare così

PHP:
<?php
//...
if (in_array($id_categoria, $single_value)) {
    echo "checked";
}
//....
?>
 
Ciao, grazie per la risposta, purtroppo il codice mi restituisce un worning, e cioè:

Warning: in_array() [function.in-array]: Wrong datatype for second argument in /web/htdocs/test/admin/add_coupon.php on line 259 value="8" id="Arredamento Casa e Giardi" />Arredamento Casa e Giardi


Ecco il codice dove ho inserito il controllo che mi hai suggerito:


<?php
$sql_cat = @mysql_query("SELECT * FROM categorie order by nome asc ") or die(mysql_error());
while($ris_cat = mysql_fetch_array($sql_cat)) {
$id_categoria=$ris_cat['id_categoria'];
$nome_cat=stripslashes($ris_cat['nome']);
?>

<label>
<input type="checkbox" name="categorie[]" <?php if (in_array($single_value, $id_categoria)) { echo "checked";} ?>value="<?=$id_categoria?>" id="<?=$nome_cat?>" /><?=$nome_cat?>
</label>
<br />

<?php
}
?>
 
Ultima modifica:
ciao
spiega un po' meglio
$single_value
$id_categoria
cosa sono? ha perlato di array, mam da quanto hai postato, non mi senbrano, ora do un occhio
 
ciao
caso 1) $single_value e $id_categoria non sono array
PHP:
<?php
$sql_cat = @mysql_query("SELECT * FROM categorie order by nome asc ") or die(mysql_error());
while($ris_cat = mysql_fetch_array($sql_cat)) {
	$id_categoria=$ris_cat['id_categoria'];
	$nome_cat=stripslashes($ris_cat['nome']);
	$ch="";
	if($single_value==$id_categoria){$ch="checked";}
?>
	<label>
	<input type="checkbox" name="categorie[]" <?php echo $ch; ?>value="<?=$id_categoria?>" id="<?=$nome_cat?>" /><?=$nome_cat?>
	</label>
	<br />
<?php
}
?>
caso 2) $single_value è un array e $id_categoria non array
PHP:
<?php
$sql_cat = @mysql_query("SELECT * FROM categorie order by nome asc ") or die(mysql_error());
while($ris_cat = mysql_fetch_array($sql_cat)) {
	$id_categoria=$ris_cat['id_categoria'];
	$nome_cat=stripslashes($ris_cat['nome']);
?>
	<label>
	<input type="checkbox" name="categorie[]" <?php if (in_array($id_categoria, $single_value)) { echo "checked";} ?>value="<?=$id_categoria?>" id="<?=$nome_cat?>" /><?=$nome_cat?>
	</label>
	<br />
<?php
}
?>
caso 3) $single_value non è un array e $id_categoria è array
PHP:
<?php
$sql_cat = @mysql_query("SELECT * FROM categorie order by nome asc ") or die(mysql_error());
while($ris_cat = mysql_fetch_array($sql_cat)) {
	$id_categoria=$ris_cat['id_categoria'];
	$nome_cat=stripslashes($ris_cat['nome']);
?>
	<label>
	<input type="checkbox" name="categorie[]" <?php if (in_array($single_value, $id_categoria)) { echo "checked";} ?>value="<?=$id_categoria?>" id="<?=$nome_cat?>" /><?=$nome_cat?>
	</label>
	<br />
<?php
}
?>
caso 4) sia $single_value che $id_categoria sono entrambi array, questa potrebbe essere una soluzione
PHP:
<?php
$sql_cat = @mysql_query("SELECT * FROM categorie order by nome asc ") or die(mysql_error());
while($ris_cat = mysql_fetch_array($sql_cat)) {
	$id_categoria=$ris_cat['id_categoria'];
	$nome_cat=stripslashes($ris_cat['nome']);
?>
	<label>
	<input type="checkbox" name="categorie[]"
	<?php if (count(array_intersect($single_value, $id_categoria)) != 0) { echo "checked";} ?>
	value="<?=$id_categoria?>" id="<?=$nome_cat?>" /><?=$nome_cat?>
	</label>
	<br />
<?php
}
?>
vedi tu quale è il tuo caso

dimenticavo: non usare il silent @ gli errori vanno eliminati non nascosti
 

Discussioni simili