[PHP] Checkbox: inserimento nel db e lettura dal db

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
Salve rieccomi con un nuovo problema, vorrei come da titolo poter gestire alcuni dati con le Checkbox.
Ho questo codice e vorrei inserire le checkbox selezionate nel db ma non ci riesco, qualcuno mi sa aiutare?

PHP:
<form method="post" action="ceckboxRiceve.php">
    <?php
echo "<span style=\"color:red; font-size: 10pt\"> Dati comunali <span style=\"color:red\"><span style=\"color:red\"></span><span style=\"color:blue\"></span><span style=\"color:red\"></span>";
 ?>
 <input type="checkbox" name="tipodato[1]" value="Dati comunali" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<?php
echo "<span style=\"color:green; font-size: 10pt\"> Dati provinciali <span style=\"color:red\"><span style=\"color:red\"></span><span style=\"color:blue\"></span><span style=\"color:red\"></span>";
 ?>
 <input type="checkbox" name="tipodato[2]" value="Dati provinciali" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<?php
echo "<span style=\"color:blue; font-size: 10pt\"> Dati regionali <span style=\"color:black\"><span style=\"color:black\"></span><span style=\"color:blue\"></span><span style=\"color:black\"></span>";
 ?>
 <input type="checkbox" name="tipodato[3]" value="Dati regionali" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<?php
echo "<span style=\"color:black; font-size: 10pt\"> Dati nazionali <span style=\"color:black\"><span style=\"color:black\"></span><span style=\"color:blue\"></span><span style=\"color:black\"></span>";
 ?>
 <input type="checkbox" name="tipodato[4]" value="Dati nazionali" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<?php
echo "<span style=\"color:brown; font-size: 10pt\"> Altri dati <span style=\"color:black\"><span style=\"color:black\"></span><span style=\"color:blue\"></span><span style=\"color:black\"></span>";
 ?>
<input type="checkbox" name="tipodato[5]" value="Altri dati" /><br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" value="  Salva!  ">
</form>

Allego anche codice che legge i valori delle checkbox
PHP:
$tipodato = isset($_POST['tipodato']) ? $_POST['tipodato'] : array();

  $stringa = implode(',', $tipodato);
  echo $stringa;

  if(!$_POST['tipodato']){
      $sqlquery = "INSERT tblarchivioistat tipodato VALUES($tipodato)";
       $result = $db->query($sqlquery);
}
 
if (!count($tipodato)) echo 'Errore! Devi selezionare almeno una casella!';
else {
 foreach($tipodato as $stringa) {
    echo '<li>' . $stringa . '</li>'; 
  }
  echo '</ul>';
}

Con questo secondo codice visualizzo le checkbox biffate, ma non so come memorizzarle nel DB.
Grazie
Max61
 
Ciao, prova cosi
PHP:
if (isset($_POST['tipodato'])) {
    $stringa = implode(',', $_POST['tipodato']);
    $sqlquery = "INSERT tblarchivioistat tipodato VALUES($stringa)";
    $result = $db->query($sqlquery);
    if ($result) {
        echo "dati memorizzati";
    } else {
        echo "errore query : " . $query;
    }
} else {
    echo 'Errore! Devi selezionare almeno una casella!';
}
 
Ciao e grazie, ho provato ma mi da questo errore
Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\Archivio\ceckboxRiceve.php on line 25
su questa riga
PHP:
$result = $db->query($sqlquery);

Ti volevo dire che ad ogni parametro corrisponde un campo:
datocomunale
datoprovinciale
datoregionale
ecc. non so se ti può servire questa specifica
Ciao
 
quell'errore riguarda la connessione al database, avevo dato per scontato che era già a posto visto che lo hai postato tu ?
posta il codice con cui ti connetti alla tabella.
 
Buongiorno ecco il codice di connessione:
PHP:
$host = 'localhost';
$user = 'utente';
$password = 'utente';
$db = 'archivioistat';

//Mi connetto al MySql Server
$myconn = mysql_connect($host, $user, $password) or die('Impossibile connettersi al server');

//Mi connetto al database 'archivio'
mysql_select_db($db, $myconn) or die('Errore di connessione alla tabella');

Comunque penso di aver risolto con il codice che vedi sotto
PHP:
VECCHIO  //$result = $db->query($sqlquery);
 NUOVO   $result = mysql_query($sqlquery);

ma adesso mi da errore sulla colonna:
errore query : INSERT archivioistat tipodato VALUES(Dati comunali,Dati provinciali)Unknown column 'stringa' in 'field list'

Grazie
Max61
 
Ultima modifica:
ma possibile che nessuno di voi si è accorto che la query è scritta male? (oltre tutto..)
PHP:
 $sqlquery = "INSERT tblarchivioistat tipodato VALUES($stringa)";

vi sembra corretta?
1 non si capisce cosa vuol fare.. salvare in un campo? il campo si chiama "tipodato"?
2 INSERT.. non manca qualcosa??.. INTO?

la query dovrebbe essere così: (sempre se è correttamente creata)
PHP:
 $sqlquery = "INSERT INTO `tblarchivioistat` (`tipodato`) VALUES ('$stringa')";
vi ricordo che non è un campo numerico, servono gli apici..

se la tabella è creata correttamente dovrebbe andare.. (anche se è tutta strana)..
 
Buongiorno Allivio, grazie per l'interessamento, cerco di spiegarmi:
ho 5 campi (datocomunale, datoprovinciale,datoregionale,datonazionale,altrodato e sono di tipo varchar ma non so se va bene perchè ho la necessità di recuperare i dati dal db nell' edit con le checkbox), dove per ognuno di essi vorrei inserire il corrispettivo valore dell'array.
In questo momento la query mi inserisce il valore nel campo $stringa che però non esiste, se al posto del campo stringa metto per esempio il campo $datocomunale mi inserisce tutti i valori selezionati in questo campo, ma non va bene perchè in questo campo deve inserire il dato proveninete dalla check <input type="checkbox" name="tipodato[1]" value="Dati comunali" />
e così via per ogni campo.
Nella speranza di essermi spiegato...
Max61
 
Buongiorno,
se ho capito bene dovrebbe essere cosi:

PHP:
 $sqlquery = "INSERT INTO `tblarchivioistat` (`datocomunale`, `datoprovinciale`,`datoregionale`, `datonazionale`,`altrodato`) VALUES ('".intvar($tipodato[1])."', '".intvar($tipodato[2])."', '".intvar($tipodato[3])."', '".intvar($tipodato[4])."','".intvar($tipodato[5])."')";


converti i campi in ENUM(0,1) e nel value dei vari checkbox mettici 1
usando la funzione intvar se il campo è nullo ti da zero (ed è anche sicuro)..

poi per l'editare basta che ci aggiungi al checkbox ad esempio
PHP:
<?php if ($row->datocomunale == 1) {echo "checked"; } ?>
 
Grazie, ho provato a modificare il db come mi hai detto ma mi dava sempre questo errore qualsiasi valore inserissi 0 1 0,1 null
Errore nella query:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1) NOT NULL' at line 1
allora li ho convertiti in tinyint(1)

adesso mi da questo errore:
Fatal error: Call to undefined function intvar() in C:\xampp\htdocs\ArchivioIstat\views\InserisciDatiIstat.php on line 56
può essere il campo tinyint(1)?
 
Ho tolto intvar e adesso sembra che l'array funziona, ma non mi inserisce gli altri campi.
Ecco la query che uso:
PHP:
$sqlquery = "INSERT INTO `tblarchivioistat` ('livello', 'categoria1', 'categoria2', 'categoria3', 'categoria4', 'categoria5', '__________nomefile__________', '__________variabili__________',
        `datocomunale`, `datoprovinciale`,`datoregionale`, `datonazionale`,`altrodato`)
        VALUES ('$livello', '$categoria1', '$categoria2', '$categoria3', '$categoria4', '$categoria5', '$__________nomefile__________', '$__________variabili__________','".($tipodato[1])."', '".($tipodato[2])."', '".($tipodato[3])."', '".($tipodato[4])."','".($tipodato[5])."')";

Altra cosa, i dati recuperati li visualizzo e sono disabilitati e ho creato una pagina di modifica che apro con questo codice dalla pagina di visualizzazione

PHP:
Apri pagina <input type='checkbox' onClick="document.location.href='Edit_DatiIstat.php?$id';">
ma non riesco a passargli l'id che sto guardando a video
 
ti da mysql quell'errore perchè enum deve essere '0','1' però si va benissimo anche tinyint..

e scusami ho sbagliato da intvar devi cambiare in intval
 
devi togliere le parentesi tonde...

comunque non gli stai passando il campo.. 'Edit_DatiIstat.php?$id' cambialo in 'Edit_DatiIstat.php?id=$id'
 
Ho provato, ho tolto tutte le parentesi ma non inserisce nulla nel db, le ho rimesse togliendo la prima ma niente...
PHP:
$sqlquery = "INSERT INTO `tblarchivioistat` ('livello', 'categoria1', 'categoria2', 'categoria3', 'categoria4', 'categoria5', '__________nomefile__________', '__________variabili__________',
        `datocomunale`, `datoprovinciale`,`datoregionale`, `datonazionale`,`altrodato`)
        VALUES ('$livello', '$categoria1', '$categoria2', '$categoria3', '$categoria4', '$categoria5', '$__________nomefile__________', '$__________variabili__________','".intval($tipodato[1])."', '".intval($tipodato[2])."', '".intval($tipodato[3])."', '".intval($tipodato[4])."','".intval($tipodato[5])."')";

Ho provato come hai detto, anche se lo avevo già provato, ma niente l'id non lo passa
PHP:
$result = mysql_query("SELECT * FROM tblarchivioistat WHERE id=$id")
    or die(mysql_error());

PHP:
Apri pagina <input type='checkbox' onClick="document.location.href='Edit_DatiIstat.php?id=$id';">
scusa ma non sono molto esperto l'avrai capito
 
hai inserito prima della query questo?
PHP:
$id = intval($_GET['id']);

sicuro di aver scritto correttamente i campi '__________nomefile__________', '__________variabili__________' ?

perchè creare campi con nomi così "difficili"? cioè da scriverli sbagliati con facilità.. non basta un _nomefile_ senza tutti quegli underscore?


se non ti inserisce la query c'è un errore o di nomi di campi o di strutturazione della tabella..
controlla per bene se tutto coincide
 
Questi campi li ho fatti così perchè li vedo a video con datagrid e se la stringa è lunga la riga mi diventa troppo alta, mentre così allargo il campo e la vedo più bassa.
I campi sono coretti, ho preso la vecchia pagina di insert e funziona ma aggiungendo il nuovo codice per inserire l'array non funziona più, si vede che sbaglio qualcosa e non inserisce nulla. Stranamente se inserisco i campi normali separatamente dall'array funziona, e viceversa se tolgo i campi normali e inserisco l'array funziona..bo.
Praticamente così inserisce l'array
PHP:
$sqlquery = "INSERT INTO `tblarchivioistat` (`datocomunale`, `datoprovinciale`,`datoregionale`, `datonazionale`,`altrodato`) VALUES ('".intval($tipodato[1])."', '".intval($tipodato[2])."', '".intval($tipodato[3])."', '".intval($tipodato[4])."','".intval($tipodato[5])."')";

così gli altri campi
PHP:
$query = "INSERT INTO tblarchivioistat (livello, categoria1, categoria2, categoria3, categoria4, categoria5,__________nomefile__________, __________variabili__________)
            VALUES ('$livello', '$categoria1', '$categoria2', '$categoria3', '$categoria4', '$categoria5',
            '$__________nomefile__________', '$__________variabili__________')";
se li metto insieme..NULLA
 
Ultima modifica:
hai usato gli apici, l'ho notato adesso...

PHP:
$sqlquery = "INSERT INTO `tblarchivioistat` (`livello`, `categoria1`, `categoria2`, `categoria3`, `categoria4`, `categoria5`, `__________nomefile__________`, `__________variabili__________`,
        `datocomunale`, `datoprovinciale`,`datoregionale`, `datonazionale`,`altrodato`)
        VALUES ('$livello', '$categoria1', '$categoria2', '$categoria3', '$categoria4', '$categoria5', '$__________nomefile__________', '$__________variabili__________','".intval($tipodato[1])."', '".intval($tipodato[2])."', '".intval($tipodato[3])."', '".intval($tipodato[4])."','".intval($tipodato[5])."')";



quelli da me usati non sono apici ma accenti, si possono anche evitare io sono abituato ad usarli
 
Grazie adesso non posso provarlo perchè sono fuori e ti rispondo dal cellulare ma ti volevo chiedere se devo togliere tutti gli apici o soltanto quelli dell'array?
 
basta che fai copia e incolla della query che ti ho postato..

gli apici erano sbagliati qui INSERT INTO `tblarchivioistat` ('livello', 'categoria1', 'categoria2', 'categoria3', ecc

copia e incolla questa:
PHP:
$sqlquery = "INSERT INTO `tblarchivioistat` (`livello`, `categoria1`, `categoria2`, `categoria3`, `categoria4`, `categoria5`, `__________nomefile__________`, `__________variabili__________`,
        `datocomunale`, `datoprovinciale`,`datoregionale`, `datonazionale`,`altrodato`)
        VALUES ('$livello', '$categoria1', '$categoria2', '$categoria3', '$categoria4', '$categoria5', '$__________nomefile__________', '$__________variabili__________','".intval($tipodato[1])."', '".intval($tipodato[2])."', '".intval($tipodato[3])."', '".intval($tipodato[4])."','".intval($tipodato[5])."')";
 
FUNZIONA GRAZIE!
Adesso se non chiedo troppo mi rimane l' update che ho fatto così ma non salva i dati anzi svuota i campi della tabella se sono valorizzati
PHP:
mysql_query("UPDATE tblarchivioistat SET livello='$livello', categoria1='$categoria1', categoria2='$categoria2', categoria3='$categoria3', categoria4='$categoria4', categoria5='$categoria5', 
'".intval($tipodato[1])."', '".intval($tipodato[2])."', '".intval($tipodato[3])."', '".intval($tipodato[4])."','".intval($tipodato[5])."' WHERE id='$id'")
or die(mysql_error());
Ciao e Grazie ancora
 
prova così:
PHP:
mysql_query("UPDATE tblarchivioistat SET livello='$livello', categoria1='$categoria1', categoria2='$categoria2', categoria3='$categoria3', categoria4='$categoria4', categoria5='$categoria5',
datocomunale='".intval($tipodato[1])."', datoprovinciale='".intval($tipodato[2])."',  datoregionale='".intval($tipodato[3])."',  datonazionale='".intval($tipodato[4])."', altrodato='".intval($tipodato[5])."' WHERE id=$id")
or die(mysql_error());
 

Discussioni simili