Php problema su inserimento dati mysql

  • Creatore Discussione Creatore Discussione EffeElle
  • Data di inizio Data di inizio

EffeElle

Utente Attivo
25 Set 2012
48
0
0
Ciao ragazzi questo è il mio 2 post su questo forum spero mi sapete dare anche qui un aiuto, mi trovo in difficoltà per inserire dati su un database. Non riesco in particolare a inserire i dati presi da una select o da input radio, ho fatto una prova precedente senza avere dei campi select è tutto funziona corettamente successivamente ho inserito due campi select uno di nome sesso e uno di nome statocivile il primo problema è nel controllo dei campi che l'ho messo come SessoPattern ma non me lo accetta mentre quello NamePattern per il cognome il nome e il codice fiscale me lo accetta e poi non so se per la creazione della tabella mysql si devono dare dei valori specifici per i campi di tipo select io ho inserito tutti i campi di tipo text o varchar ad esclusione del campo id di tipo int AU. Vi posto i 2 file di script spero qualcuno riesce ad aiutarmi...

insert.php
PHP:
<?php
// richiamo il file di configurazione
     require 'connessione.php'; 
 // richiamo lo script responsabile della connessione a MySQL
     require 'config.inc';
 

 $message = "";
if (isset($_GET['alert']))
{
	if ($_GET['alert'] == 0)
	{
		$message = "Dati scritti correttamente nel database";
	}
 
	if ($_GET['alert'] == 1)
	{
		$message = "ERRORE: Nessun dato scritto nel database.<br>Tutti i campi devono essere completati!";
	}
 
	if ($_GET['alert'] == 2)
	{
		$message = "ERRORE: Nessun dato scritto nel database.<br>Campo 
		cognome non nel formato corretto!";
	}
 
	if ($_GET['alert'] == 3)
	{
		$message = "ERRORE: Nessun dato scritto nel database.<br>Campo nome non nel formato corretto!";
	}
 
	if ($_GET['alert'] == 4)
	{
		$message = "ERRORE: Nessun dato scritto nel database.<br>Campo codice fiscale non nel formato corretto!";
	}
	
 
	if ($_GET['alert'] == 5)
	{
		$message = "ERRORE: Nessun dato scritto nel database.<br>Campo sesso non nel formato corretto!";
	}
	if ($_GET['alert'] == 6)
	{
		$message = "ERRORE: Nessun dato scritto nel database.<br>Campo stato civile non nel formato corretto!";
	}
}
 
echo "<br><br>";
echo $message;
 
?>
HTML:
<form name="form1" method="POST" action="insert_data.php">
<table>
    <tr>
 		<td colspan="2"><H3><B>Anagrafica</B></H3></TD>
	</tr>
	<tr>
        <td><label>Cognome:</label></td>
        <td><input type="text" name="cognome" size="20"></td>
	</tr>
	
	<tr>
        <td><label>Nome:</label></td>
        <td><input type="text" name="nome" size="20"></td>
	</tr>
	<tr>
    	<td><label>Codice Fiscale: </label></td>
        <td><input type="text" name="codicefiscale" size="30"></td>
	</tr>
	<tr>
        <td><label>Sesso:</label></td>
        <td><select name="sesso">
            <option value="M"> Maschile</option><br>
            <option value="F"> Femminile</option><br>
        </select></td>
	</tr>
    <tr>
        <td><label>Stato Civile:</label></td>
        <td><select name="statocivile">
            <option>CELIBE/NUBILE</option>
            <option>CONIUGATO/A</option>
            <option>VEDOVO/A</option>
            <option>SEPARATO/A</option>
            
            </select>
        </td>
    </tr>
</table>
<input type="submit" value="inserisci" />
</form>


insert_data.php
PHP:
<?php
$NamePattern = "^[a-zA-Z]{3,20}$";
$CodicePattern = "^[a-zA-Z0-9]{3,30}$";
$SessoPattern = "^[a-zA-Z]{3,15}$";   

 
if (empty($_POST['cognome']) OR empty($_POST['nome']) OR empty($_POST['codicefiscale']) OR empty($_POST['sesso']) OR empty($_POST['statocivile']))
{
	header("Location: insert.php?alert=1");
	die;
}
 
if (!ereg($NamePattern, $_POST['cognome']))
{
	header("Location: insert.php?alert=2");
	die;
}
 
if (!ereg($NamePattern, $_POST['nome']))
{
	header("Location: insert.php?alert=3");
	die;
}
 
if (!ereg($CodicePattern, $_POST['codicefiscale']))
{
	header("Location: insert.php?alert=4");
	die;
}
 if (!ereg($SessoPattern, $_POST['sesso']))
{
	header("Location: insert.php?alert=5");
	die;
}
if (!ereg($SessoPattern, $_POST['statocivile']))
{
	header("Location: insert.php?alert=6");
	die;
}
// richiamo il file di configurazione
     require 'connessione.php'; 
 // richiamo lo script responsabile della connessione a MySQL
     require 'config.inc';
	 
	  mysql_select_db("accademiadelsacro");
	 
$query = "INSERT INTO `accademiadelsacro`.`preiscrizione-utenti` (cognome, nome, coficefiscale, sesso, statocivile) VALUES ('$_POST[cognome]','$_POST[nome]','$_POST[codicefiscale]','$_POST[sesso]','$_POST[statocivile]')";

 // invio la query     
        $result = mysql_query($query);

 
header("Location: insert.php?alert=0");
 
?>

strutturatabella
PHP:
CREATE TABLE IF NOT EXISTS `preiscrizione-utenti` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cognome` text NOT NULL,
  `nome` text NOT NULL,
  `codicefiscale` text NOT NULL,
  `sesso` text NOT NULL,
  `statocivile` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
Ultima modifica:
Ciao,
la funzione ereg è deprecata, cito dal manuale
this function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
io proverei usando un ciclo sul POST per verificare i dati tipo questo ( + elegante a mio parere )
 
Si per il controllo dei campi potrebbe andare il problema che non riesco a inserire i campi della select (sesso e statocivile)
 
e cosa ti inserisc? nulla?

è meglio se come tipo campo per il sesso usi enum o set e imposti i due valori possibii esempio enum('M','F')

edit

e ptresti semplicemente verificare in questo modo
PHP:
if ($_POST['sesso'] != "M" || $_POST['sesso'] != "F") {
    header("Location: insert.php?alert=5");
    die;
}
 
Ultima modifica:
Vorrei andare passo passo a imparare qualcosa, il metodo da te postato sarà sicuramente ottimo ma non saprei come interagirlo nel mio script aiutooo!!!
 
nello stato civile invece manca il value

HTML:
<tr>
        <td><label>Stato Civile:</label></td>
        <td><select name="statocivile">
            <option>CELIBE/NUBILE</option>
            <option>CONIUGATO/A</option>
            <option>VEDOVO/A</option>
            <option>SEPARATO/A</option>
            
            </select>
        </td>
    </tr>
 
Allora su phpmyadmin ho inserito come campo sesso e statocivile di tipo enum e su valori gli ho messo come mi hai detto M e F sul php devo modificare qualcosa? il problema però sta anche nel messaggio alert 5 cioè sul controllo che non me lo accetta
 
rileggi le mie due risposte che abbiamo risposto contemporaneamente
 
Ho inserito l'if da te postato ma appena clicco su inserisci mi controlla e mi si blocca sempre sul controllo alert 5 sul campo testo mentre per lo statocivile può andare cosi
HTML:
<td><label>Stato Civile:</label></td>
        <td><select name="statocivile">
            <option value="1">CELIBE/NUBILE</option>
            <option value="2">CONIUGATO/A</option>
            <option value="3">VEDOVO/A</option>
            <option value="4">SEPARATO/A</option>
            
            </select>
        </td>
 
giusto!
colpa mia
non || ma &&
PHP:
if ($_POST['sesso'] != "M" && $_POST['sesso'] != "F") {
    header("Location: insert.php?alert=5");
    die;
}
 
Ok il controllo del campo sesso me lo passa ho impostato quello del campo statocivile cosi non so se è giusto:
PHP:
if ($_POST['statocivile'] != "1" && $_POST['statocivile'] != "2" && $_POST['statocivile'] != "3" && $_POST['statocivile'] != "4") 
{
    header("Location: insert.php?alert=5");
    die;

Con anche questo compilo tutti i campi e mi da alert=0 cioè dati scritti corretamente, vado a verificare ma sul database non mi inserisce nulla devo modificare qualcosa nella query per i campi sesso e statocivile?
 
gli apici sono messi in modo errato

devi cambiarli cosi:
PHP:
VALUES ('" . $_POST['cognome'] . "',  ....   etc etc
 
Sbaglio la chiusura della query mi da errore
PHP:
$query = "INSERT INTO `accademiadelsacro`.`preiscrizione-utenti` (cognome, nome, coficefiscale, sesso, statocivile) VALUES ('" . $_POST['cognome'] . "', '" . $_POST['nome'] . "', '" . $_POST['codicefiscale'] . "', '" . $_POST['sesso'] . "', '" . $_POST['statocivile'] . "'");
 
Si hai invertito gli ultimi caratteri
corretta
PHP:
$query = "INSERT INTO `accademiadelsacro`.`preiscrizione-utenti` (cognome, nome, coficefiscale, sesso, statocivile) VALUES ('" . $_POST['cognome'] . "','" . $_POST['nome'] . "','" . $_POST['codicefiscale'] . "','" . $_POST['sesso'] . "','" . $_POST['statocivile'] . "')";
un parere personale,
io per le INSERT preferisco questa sintassi
PHP:
$query = "INSERT INTO accademiadelsacro.preiscrizione-utenti
                  SET cognome = '" . $_POST['cognome'] . "',
                      nome = '" . $_POST['nome'] . "',
                      coficefiscale = '" . $_POST['codicefiscale'] . "',
                      sesso = '" . $_POST['sesso'] . "',
                      statocivile = '" . $_POST['statocivile'] . "'";
la trovo piu leggibile
 
Ultima modifica:
Mi da dati scritti correttamente ma non mi inserisce nulla nel database cosa ce di sbagliato :(
 
prova a stampare query e eventuali errori e posta
PHP:
// invio la query     
$result = mysql_query($query);
if (!$result) {
    echo $query . "<br/>" . mysql_error();
}
 
Mi da questo errore:
INSERT INTO `accademiadelsacro`.`preiscrizione-utenti` SET cognome = 'Rossi', nome = 'Mario', coficefiscale = 'lahah12hdhgd', sesso = 'M', statocivile = '2'
Unknown column 'coficefiscale' in 'field list'
 
ah dimenticavo oltre a quell errore mi da errore nelle righe
PHP:
if (!ereg($NamePattern, $_POST['cognome']))
{
    header("Location: insert.php?alert=2");
    die;
}
 
if (!ereg($NamePattern, $_POST['nome']))
{
    header("Location: insert.php?alert=3");
    die;
}
 
if (!ereg($CodicePattern, $_POST['codicefiscale']))
{
    header("Location: insert.php?alert=4");
    die;
}
 
Unknown column 'coficefiscale' in 'field list'
tradotto
non conosco il campo 'coficefiscale'
sistema il nome

che errore ti da sulle righe?
 
ok sistemato il nome codicefiscale ora mi inserisce i dati perfettamente però mi restano gli errori sulle righe quelle che ti ho postato che sono le righe per il controllo dei campi nome cognome e codicefiscale queste:
PHP:
if (!ereg($NamePattern, $_POST['cognome']))
{
    header("Location: insert.php?alert=2");
    die;
}
 
if (!ereg($NamePattern, $_POST['nome']))
{
    header("Location: insert.php?alert=3");
    die;
}
 
if (!ereg($CodicePattern, $_POST['codicefiscale']))
{
    header("Location: insert.php?alert=4");
    die;
}
 

Discussioni simili