• User Newbie

    passaggio valori campo set da checkbox

    Ciao a tutti, sono nuovo del forum e novizio del php/mysql.
    Il mio problema è questo, non riesco a passare correttamente i valori da una checkbox a un campo del db.
    la query di inserzione è questa:

    $Qry = "INSERT INTO pubblicazioni (
    compilatore, 
    isbn, 
    titolo, 
    sottotitolo, 
    autore, 
    sezione
    ) 
    VALUES (
    '$compilatore', 
    '$isbn', 
    '$titolo', 
    '$sottotitolo', 
    '$autore', 
    '$sezione1'
    )";
    
    

    il campo in questione (quello dichiarato come SET è <sezione>.

    poi ho il seguente costrutto che legge i valori dal form e la funzione implode() che trasforma il vettore in stringa, giusto?

    <php
    if &#40;isset&#40;$_POST&#91;"sezione"&#93;&#41;&#41; &#123;
        $sezione1 = implode&#40;",",$_POST&#91;"sezione"&#93;&#41;;
    &#125; else &#123;
        $sezione1="";
    &#125;
    ?>
    <INPUT TYPE=checkbox name="sezione&#91;&#93;" value="ecologia">
    ecologia
    <INPUT TYPE=checkbox name="sezione&#91;&#93;" value="faunistica">
    faunistica
    <INPUT TYPE=checkbox name="sezione&#91;&#93;" value="conservazione">
    conservazione
    <INPUT TYPE=checkbox name="sezione&#91;&#93;" value="ripristino vegetazionale">
    ripristino vegetazionale
    
    

    allora, niente da fare... dov'è l'errore?

    se passo i valori da un campo di testo, stando bene attenti a immettere le giuste voci del campo set tutto funziona, ma vorrei utilizzare il checkbox, è molto piu' comodo..
    tramite un echo mi visualizzo come prova la variabile $sezione1 che viene settata in modo corretto...
    ho anche provato a trasformare il campo set in campo testuale, ma ancora niente da fare, viene memorizzato il testo ARRAY. il problema deve essere nel checkbox e nella funzione implode.
    ah, dimenticavo, l'errore (che poi non è un errore per mysql) è che il campo sezione rimane vuoto.
    Suggerimenti?


  • User

    Perchè non provi con un foreach:

    For Each Item In Request.Form
    	Sezione1 = Sezione1 & Item & " "
    Next
    

    😄 so che mi vorresti strozzare ma io sò solo asp, il problema è che ti becca tutti i campi del form così.

    Provo a buttarlo giù in php ma non sò se è giusto:

    foreach&#40;$_POST as $nome => $val&#41; &#123;
    	Sezione1 .= $nome . " "
    &#125;
    

    Spero di essere stato d'aiuto


  • User Attivo

    Ciao 🙂

    Penso che l'errore sia questo: il NAME del campo non deve essere "sezione[]" ma solamente "sezione", altrimenti quando controlli con isset() dovresti scrivere " $_POST['sezione[]"] ".

    Quindi io direi così:

    <php 
    if &#40;isset&#40;$_POST&#91;"sezione"&#93;&#41;&#41; &#123; 
        $sezione1 = implode&#40;",",$_POST&#91;"sezione"&#93;&#41;; 
    &#125; else &#123; 
        $sezione1=""; 
    &#125; 
    ?> 
    <INPUT TYPE=checkbox name="sezione" value="ecologia"> 
    ecologia 
    <INPUT TYPE=checkbox name="sezione" value="faunistica"> 
    faunistica 
    <INPUT TYPE=checkbox name="sezione" value="conservazione"> 
    conservazione 
    <INPUT TYPE=checkbox name="sezione" value="ripristino vegetazionale"> 
    ripristino vegetazionale 
    

    Poi non so. 🙂


  • User Newbie

    grazie per la risposta,
    si , inizialmente, ma per una svista, avevo nominato il checkbox con sezione ( senza le [] ), ma in questo caso la variabile $_POST['sezione'] memorizza l'ultimo checkbox spuntato (solamente l'ultimo), non è piu' una scelta multipla, ovvero $_POST['sezione'] è una variabile e non ha piu' senso la funzione implode.

    invece a me serve memorizzare in $_POST['sezione'] tutti i checkbox spuntati ( il name del checkbox con le [] serve prorpio a definire un array) e quindi in questo caso $_POST['sezione'] e' un array che poi posso implodere in una stringa.

    questo e' corretto infatti echo $sezione1 mi restituisce la stringa ottenuta con $sezione1= implode(",", $_POST[sezione'])
    ovvero i valori spuntati nella checkbox separati dalla virgola
    es. valore1,valore2

    e fin qui tutto bene, ma quando vado ad inserire tale variabile nel database sembra come se $sezione1 è diventato un ARRAY

    AIUTO!!!
    qualcuno credo abbia già affrontato un simile caso, è abbastanza comune inserire in un campo di un db valori diversi (chesso' tipo colori preferiti)


  • User

    @vitellozzo73 said:

    e fin qui tutto bene, ma quando vado ad inserire tale variabile nel database sembra come se $sezione1 è diventato un ARRAY

    Puoi provare a gestirlo come un array e fare un ciclo che ti metta tutto in un'altra variabile di tipo stringa.

    Per es.

    foreach&#40;$sezione1 as $a&#41;&#123;
    	$sezione2 .= $a.", "
    &#125;
    

    non sò se la sintassi è giusta 😄 😄