Ciao a tutti ragazzi
sono passato a cercare di memorizzare in db e successivamente leggere (sempre dal db) le scelte del checkbox.
Poichè il tema è simile per tutti le tipologie di campi form (textarea,checkbox, radio, select) ho voluto creare nel mio database di prova (chiamato "db_prova") una tabella dal nome "campi".
Questa tabella "campi" ha questi campi colonna : "id" (INT), "textarea", "checkbox", "radio", "select" (tutti e quattro VARCHAR).
Nella pagina html c'è questo form oltre poi al form per il textarea
codice:
<br><br>Quali sono i tuoi interessi?<br>
<input type = "checkbox" name = "ck[]" value = "cucina">cucina <br>
<input type = "checkbox" name= "ck[]" value = "calcio">calcio<br>
<input type = "checkbox" name= "ck[]" value = "auto">auto<br>
Sono riuscito a memorizzare nel mio db la scelta che effettua l'utente , grazie alla funzione php "serialize()"
Questa prende un array e lo serializza, cioè crea una stringa con una serie di caratteri particolari (come vedo appunto da phpMyAdmin).
Il problema è che non riesco a ben capire come far a visualizzare la scelta memorizzata dall'utente.
Quello sotto è il codice per il recupero del checkbox.
Ho ragionato così: in fase di recupero, eseguo l'operazione di deserializzazione con la funzione php
unserialize($campodb)
( dove $campodb è il nome del campo colonna della mia tabella, che è una stringa serializzata).
Per fare in modo che il browser visualizzi il simbolo di spunta in corrispondenza del campo selezionato in precedenza devo avere nel codice html un sistema che mi permette di inserire un attributo "checked" in corrispondenza del campo checkbox selezionato per tutti i campi che l'utente avrà selezionato.
codice:
<input type = "checkbox" name = "ck[]" value = "cucina<?php echo $c1_checked?>">cucina <br>
<input type = "checkbox" name= "ck[]" value = "calcio<?php echo $c2_checked?>">calcio<br>
<input type = "checkbox" name= "ck[]" value = "auto<?php echo $c3_checked?>">auto<br>
Dove
$c1_checked, $c2_checked,$c3_checked li vado a valorizzare a seconda di cosa c'è nel $ck
codice:
<?php
require_once('configurazione_credenziali_esterno.php');
$link = mysqli_connect(DB_HOST, DB_USERN, DB_PSW) or die("Errore connessione: ". mysqli_connect_error());
$dbw = mysqli_select_db($link, DB_PROVA) or die("Errore apertura database: " . mysqli_error($link));
$strsql = "SELECT checkbox FROM campi";
$rs = mysqli_query($link, $strsql) or die("Errore query database: " . mysqli_error($link));
while ($riga = mysqli_fetch_array($rs)) {
$ck=unserialize($riga['checkbox']);
//$ck è array deserializzato
//$riga['checkbox'] conterrà i valori cucina o calcio o auto, o tutti serializzato
$c1_checked=Null;
$c2_checked=Null;
$c3_checked=Null;
if(isset($ck)){
for($i=0; $i<count($ck);$i++){
//dall'indice 0 fino al max num di elementi nell' array, che
//calcolo con la funzione php count
if($ck[$i]=='cucina'){$c1_checked='checked';}
elseif($ck[$i]=='calcio'){$c2_checked='checked';}
elseif($ck[$i]=='auto'){$c3_checked='checked';}
}
}
?>
<form>
<input type = "checkbox" name = "ck[]" value = "cucina<?php echo $c1_checked?>">cucina <br>
<input type = "checkbox" name= "ck[]" value = "calcio<?php echo $c2_checked?>">calcio<br>
<input type = "checkbox" name= "ck[]" value = "auto<?php echo $c3_checked?>">auto<br>
</form>
<?php
}?>
il problema che mi esce è che
Notice: unserialize(): Error at offset 0 of 1 bytes in C:\Program Files\..........leggere-checkbox.php on line 46
che è in corrispondenza della riga $ck=unserialize($riga['checkbox']);