Visualizzazione dei risultati da 1 a 2 su 2

Discussione: array di checkbox

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    446

    array di checkbox

    Ho bisogno di una mano: ho un elenco di oggetti (letti da un database), ognuno con accanto una checkbox. Voglio inviare tramite form tutti i valori di queste checkbox e memorizzare nel mio database i valori inviati. Pensavo di usare checkbox con id un array, ma non riesco a farlo funzionare. Qualcuno ha qualche suggerimento?

  2. #2
    Basta un semplice ciclo foreach sull'array in cui sono memorizzati i dati (ad es. $_POST). Supponi ad es. che i tuoi checkbox abbiano tutti un prefisso nel nome, magari "sel_". Ora, quando invii il form, puoi recuperare quei valori in un array in questo modo:

    codice:
    $data = array(); // Definisco un array $data vuoto
    foreach ($_POST as $key=>$value) { // Ciclo tutti i dati presenti in POST mantenendo l'associazione nome=valore
    if (substr($key,0,4)=='sel_') { // Se il nome di un dato inizia con "sel_" significa che contiene il valore di un checkbox (utile per escludere altri dati, ad es. il nome del pulsante submit che viene inviato anch'esso e che non deve essere aggiunto all'array $data)...
    $name = substr($key,4); // Estraggo la parte del nome successiva a "sel_"
    $data[$name] = trim(stripslashes($value)); // Memorizzo in $data un elemento che ha per nome il nome del checkbox (privo del prefisso "sel_") e per valore il suo valore "depurato" da slash e da spazi a destra e a sinistra
    }
    }
    
    /* A questo punto $data contiene una copia dei dati di $_POST esclusi quelli superflui.
    Ogni dato è "depurato" da eventuali slash aggiunti automaticamente da PHP (se
    magic_quotes_gpc è attiva nel php.ini) e da spazi prima e dopo. Quindi imposto la
    query trasformando $data in due array: uno contenente le sole chiavi (con array_keys())
    che saranno i nomi dei campi della tabella e l'altro contenente solo i rispettivi valori (con
    array_values()) che saranno appunto i valori di quei campi. Eseguo implode() sui due array
    in modo da trasformarli in stringhe i cui elementi sono separati da una virgola (per i nomi
    dei campi) e dalla sequenza ',' per i valori */
    
    $sql = "INSERT INTO nometabella (".implode(',',array_keys($data)).") VALUES('".implode('\\',\\'',array_values($data))."')";
    die($sql); // Blocco lo script e stampo a video la query per verificare che si corretta
    Ovviamente, se i nomi dei checkbox non hanno nulla a che fare coi nomi dei campi da popolare, ti basta scrivere i nomi dei campi a mano nella query, anziché usare array_keys(). Tieni presente comunque il loro ordine (che è lo stesso ordine con cui i checkbox sono presenti nel form).
    Nota che se i tuoi checkbox hanno valori particolari, per es. stringhe complesse contenenti virgole, apici, ecc., sarebbe opportuno passare questi valori a mysql_real_escape_string() che si occupa di escapizzare i caratteri potenzialmente "pericolosi" per MySQL.
    Spero di esserti stato d'aiuto.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.