- Home
- Categorie
- Coding e Sistemistica
- PHP
- errore form
-
errore form
Un saluto a tutta la comunità
Appena iscritto
mi chiamo Pierodopo i saluti...... il mio problema
sto creando un form implementato in php
cosa vorrei che facesse......
raccogliere le adesioni di preiscrizioni a corsi specifici, inviare un riepilogo dei dati al mitttente e al destinatario come promemoria e inserire tutti i dati inseriti in un database mysql
le tabelle del db:
--
-- Struttura della tabellaformazione
CREATE TABLE
formazione
(
ID
int(11) NOT NULL auto_increment,
Cognome
varchar(35) default NULL,
Nome
varchar(35) default NULL,
Citt_nascita
varchar(35) default NULL,
Prov_nascita
char(2) default NULL,
Data_nascita
varchar(10) default NULL,
Via
varchar(40) default NULL,
Citt_residenza
varchar(35) default NULL,
Prov_residenza
char(2) default NULL,
CAP
varchar(6) default NULL,
Tel_abit
int(15) default NULL,
Cell
int(15) default NULL,
Tel_Uff
int(15) default NULL,
Email
varchar(50) default NULL,
Codice_Fiscale
varchar(16) default NULL,
Qualifica
varchar(20) default NULL,
Postazione
varchar(30) default NULL,
Corso
varchar(30) default NULL,
Data_Corso
varchar(10) default NULL,
Note
longtext,
PRIMARY KEY (ID
)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;questo il codice del form (farò parte di un modulo phpnuke)
[php]
<?php
######################################################################
if (!defined('MODULE_FILE')) {
die ("You can't access this file directly...");
}
require_once("./mainfile.php");
$module_name = basename(dirname(FILE));
get_lang($module_name);
define('INDEX_FILE', true);
$subject = $sitename." "._ISCRIZIONE;
define('NO_EDITOR', true);
include("./header.php");?>
<!-- FORM HTML -->
<p align="center"><b><font size="5">Modulo Iscrizione Corsi Formazione </font>
</b> </p>
<p align="center"><b><font size="5">Centro Unico di Formazione - ASL TA1</font></b></p>
<form method="POST" action="modules/Iscrizione/registra.php"><table border="0" width="100%">
<tr>
<td width="150"> </td>
<td> </td>
</tr>
</table>
<table border="0" width="100%">
<tr>
<td width="150">
<td></td>
<td> <strong><font color="#FF0000" face="Verdana"><small>*</small></font><font color="#FF0000" face="Arial" size="1">
dato obbligatorio</font></strong></td></tr>
</table>
<table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>Cognome</td>
<td> <input type="text" title="Cognome" name="Cognome" size="40"></td></tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>Nome</td>
<td> <input type="text" size="25" title="Nome" name="Nome"></td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>Luogo di nascita</td>
<td> <input type="text" title="Luogo di Nascita" name="Citt_nascita" size="30"></td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>Provincia di nascita</td>
<td> <input type="text" size="4" title="Provincia" name="Prov_nascita"></td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>data di nascita</td>
<td> <input type="text" title="Data di nascita" name="Data_nascita" size="11"><i>
<small><font color="#FF0000" face="Verdana"> gg/mm/aaaa</font>
</i</td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>Via e n°</td>
<td> <input type="text" title="via e n°" name="Via" size="30"></td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>Città</td>
<td> <input type="text" title="città di residenza" name="Citt_residenza" size="30"></td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>Prov.</td>
<td>
<input type="text" size="4" title="Provincia" name="Prov_residenza"></td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>CAP</td>
<td> <input type="text" title="CAP" name="CAP" size="6"></td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right">Tel ab.</td><td> <input type="text" title="Tel. casa" name="Tel_abit" size="15"></td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>Cell</td><td> <input type="text" title="Cellulare" name="Cell" size="15"></td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right">Tel./Fax Ufficio</td><td> <input type="text" title="el./Fax Ufficio" name="Tel_Uff" size="15"></td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana"></font>Email</td>
<td> <input type="text" size="50" title="Email" name="Email"></td>
</tr>
<tr>
<td width="150">
<p align="right">Cod. Fiscale</td>
<td> <input type="text" title="Codice Fiscale" name="Codice_Fiscale" size="20"><strong><font color="#FF0000" face="Verdana"><small>**</small></font><font color="#FF0000" face="Arial" size="1">
da compilare se il corso è con ECM</font></strong></td>
</tr>
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana"></font>Qualifica</td>
<td>
<select name="Qualifica" title="Qualifica" size="1">
<option value=""></option>
<option value="Medico">Medico</option>
<option value="Infermiere">Infermiere</option>
<option value="Autista/Soccorritore">Autista/Soccorritore</option>
<option value="Volontario">Volontario</option>
<option value="altro">altro</option>
</select></td>
</tr>
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana"></font>Postaz./Reparto</td>
<td>
<select name="Postazione" title="Postazione/Reparto" size="1">
<option value=""></option>
<option value="CO 118">CO 118</option>
<option value="Ta Centro">Ta Centro</option>
<option value="Ta Nord">Ta Nord</option>
<option value="Ta Sud">Ta Sud</option>
<option value="Aut. Talsano">Aut. Talsano</option>
<option value="Ta Porto">Ta Porto</option>
<option value="Ta Pulsano">Ta Pulsano</option>
<option value="Ta Torricella">Ta Torricella</option>
<option value="Ta Manduria">Ta Manduria</option>
<option value="Ta S. Marzano">Ta S. Marzano</option>
<option value="Ta Grottaglie">Ta Grottaglie</option>
<option value="Ta Crispiano">Ta Crispiano</option>
<option value="Ta Massafra">Ta Massafra</option>
<option value="Ta Mottola">Ta Mottola</option>
<option value="Ta Castellaneta">Ta Castellaneta</option>
<option value="Ta Laterza">Ta Laterza</option>
<option value="Ta Ginosa">Ta Ginosa</option>
<option value="Ta Ginosa Marina">Ta Ginosa Marina</option>
<option value="H area Medica">H area Medica </option>
<option value="H area Chirurgica">H area Chirurgica</option>
<option value="H area Intensiva">H area Intensiva</option>
<option value="H area Emergenza">H area Emergenza</option>
<option value="altro">altro</option>
</select></td>
</tr>
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana"></font>Corso</td>
<td> <select name="Corso" title="Tipologia del corso - Seminario" size="1">
<option value=""></option>
<option value="BLSD">BLSD</option>
<option value="BTC">BTC</option>
<option value="PBLS">PBLS</option>
<option value="ALS">ALS</option>
<option value="ATC">ATC</option>
<option value="Triage">Triage</option>
<option value="Maxiemergenze">Maxiemergenze</option>
<option value="altro">altro</option>
</select></td>
</tr>
<tr>
<td width="150">
<p align="right"><small><font color="#FF0000" face="Verdana">*</font>data del corso</td>
<td><input type="text" title="Data del corso" name="Data_Corso" size="11"><i>
<small><font color="#FF0000" face="Verdana"> gg/mm/aaaa</font>
</i</td>
</tr>
</table><table border="0" width="100%">
<tr>
<td width="150">
<p align="right">Comunicazioni aggiuntive</td>
<td><textarea rows="5" cols="60" title="Note" name="Note" ></textarea></td>
</tr>
</table>
<table border="0" width="100%">
<tr>
<td width="100%"> </td>
</tr>
</table>
<table border="0" width="100%">
<tr>
<td width="100%">
<p align="center"><input type="submit" value="Invia" name=""> <input type="reset" value="Reimposta" name=""></td>
</tr>
</table>
</form>
<!-- FINE HTML -->
<?phpinclude("footer.php");
?>
[/php]i dati passano al file registra.php in modalità POST
[php]
<?php
//Connessione al Database
mysql_connect("localhost", "root") or die ("impossibile connettersi");
//selezione del DB
mysql_select_db("nuke") or dir ("impossibile selezionare il db");
//includo la class iscrizione
require_once("iscrizione.class.php");
//definisce le variabili
$ora = date ("H:i:s");
$data = date ("d/m/Y");
$Cognome = $_POST['Cognome'];
$Nome = $_POST['Nome'];
$Citt_nascita = $_POST['Citt_nascita'];
$Prov_nascita = $_POST['Prov_nascita'];
$Data_nascita = $_POST['Data_nascita'];
$Via = $_POST['Via'];
$Citt_residenza = $_POST['Citt_residenza'];
$Prov_residenza = $_POST['Prov_residenza'];
$CAP = $_POST['CAP'];
$Tel_abit = $_POST['Tel_abit'];
$Cell = $_POST['Cell'];
$Tel_Uff = $_POST['Tel_Uff'];
$Email = $_POST['Email'];
$Codice_Fiscale = $_POST['Codice_Fiscale'];
$Qualifica = $_POST['Qualifica'];
$Postazione = $_POST['Postazione'];
$Corso = $_POST['Corso'];
$Data_Corso = $_POST['Data_Corso'];
$Note = $_POST['Note'];// fine variabili
/* Controllo campi obbligatori*/
$errori=0; // Numero di errori riscontrati
if (trim($Cognome)=='') {
echo "<li><tr>
<td><div>Non hai compilato il campo<strong><font color="red"> Cognome</font></strong></div>
</td></tr>\n";$errori++;}
if (trim($Nome)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Nome</font></strong></div>
</td></tr>\n";$errori++;}
if (trim($Citt_nascita)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Città di nascita</font></strong></div>
</td></tr>\n";$errori++;}
if (trim($Prov_nascita)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Provincia di nascita</font></strong></div></td></tr>\n";$errori++;}
if (trim($Data_nascita)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Data di nascita</font></strong></div>
</td></tr>\n";$errori++;}
if (trim($Via)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Indirizzo</font></strong></div>
</td></tr>\n";$errori++;}
if (trim($Citt_residenza)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Città di residenza</font></strong></div></td></tr>\n";$errori++;}
if (trim($Prov_residenza)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Provincia di residenza</font></strong></div></td></tr>\n";$errori++;}
if (trim($CAP)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> CAP</font></strong></div>
</td></tr>\n";$errori++;}
if (trim($Cell)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Cell</font></strong></div>
</td></tr>\n";$errori++;}
if (trim($Email)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Email</font></strong></div>
</td></tr>\n";$errori++;}
if(!ereg("^([0-9,a-z,A-Z]+)(.,_)@(.,_,-).{2}([0-9,a-z,A-Z])?$",$_POST['Email'])){
echo "<li><tr><td><div>   La tua <strong><font color="red"> Email non è corretta oppure il tuo indirizzo non è valido</font></strong></div></td></tr>\n";$errori++;}
if (trim($Qualifica)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Qualifica</font></strong></div>
</td></tr>\n";$errori++;}
if (trim($Postazione)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Postazione</font></strong></div>
</td></tr>\n";$errori++;}
if (trim($Corso)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Corso</font></strong></div>
</td></tr>\n";$errori++;}
if (trim($Data_Corso)=='') {
echo "<li><tr><td><div>Non hai compilato il campo<strong><font color="red"> Data del Corso</font></strong></div>
</td></tr>\n";$errori++;}/* Controllo numero di errori */
if ($errori>0) {
echo "<p align="center"><a href="javascript:history.back()"><img border="0" src="goback.gif" width="150" height="28"></a></p>";}
exit;
////////
//istanzio un nuovo oggetto "iscrizione"
$iscrizione = new iscrizione;
?>
<html>
<head>
<title>Registrazione iscrizione</title>
</head>
<body>
<?php
//setto i dati nell'oggetto
$iscrizione->imposta($_POST);
//prova ad aggiungere il nuovo iscrizione
$iscrizione->aggiungi();
?>
</body>
</html>
[/php]la pagina che controlla l'inserimento iscrizione.class.php
[php]
<?php// controllo parametri
class iscrizione{
//Attributi
var $arrData = array();
var $strSQL = "";
var $bool = true;//Metodi
/**- Metodo: imposta - questo metodo serve ad impostare l'array arrData recuperato tramite $postData
- input
- @param array $postData - Array contenente i vari valori da associare all'array arrData
*/
function imposta($postData){
$this->arrData = $postData;
}
function aggiungi(){
//controllo che l'array non sia vuoto
if(!empty($this->arrData)){
//controllo che tutti i campi siano pieni
foreach($this->arrData as $value){
if(strlen($value) == 0){
$this->bool = true;
break; //Evito di visualizzare piu' volte lo stesso messaggio
}
}
}else{
$this->bool = false;
}if($this->bool){
//costruzione automatica della query SQL
$this->strSQL = "INSERT INTO formazione ("
. implode(", ", array_keys($this->arrData))
. ") VALUES('"
. implode("', '", $this->arrData)
. "')";
//Esecuzione query...
if(mysql_query($this->strSQL)){
echo "Iscrizione aggiunta con successo";
}else{
echo "Problemi durante l'inserimento dei dati nel database";
}
}else{
echo "Attenzione: specificare tutti i campi";
}
}
}
?>
[/php]apparentamente non ci sono errori ma non funziona correttamente
se processo ogni singolo campo obbligatorio il tutto funge alla perfezione
si ritorna indietro fino alla compilazione completa e corretta, invece se i campi sono completi e corretti il ssecondo passaggio (inserimento nel db) non va
si ferma tutto e con una pagina bianca senza errori.
Invece se commento tutti i controlli dei campi obbligatori il processo di inserimento funziona regolarmente a patto che tutti i campi siano pieni.
questo inconveniente al momento l'ho risolto empiricamente impostando su true il giro di foreach quando dovrebbe essere su false[PHP]
function aggiungi(){
//controllo che l'array non sia vuoto
if(!empty($this->arrData)){
//controllo che tutti i campi siano pieni
foreach($this->arrData as $value){
if(strlen($value) == 0){
$this->bool = true;
break; [/PHP]scusate la lunghezza del post ma sono giorni che non riesco ad andare avanti
i pezzi di codice presi singolarmente fungono messi insieme ho l'intoppo e vorrei capire dove si trova l'inghippo.Se non risolvo questo problema non posso andare avanti con la spedizione della mail ricevuta e altre implementazioni che ho in testa.
grazie... Piero
-
....scusate so che non è un codice ancora pulito e ottimizzato quindi se nel frattempo avete suggerimenti almeno questa parte vorrei pulirla e ottimizzarla, anche per una implementazione futura o modifica del form
altro problema..... vorrei validare le due date presenti (gg/mm/aaaa) non vorrei che l'utente nella fretta le scrive in modo diverso creando poi problemi per le varie ricerche nel db
mi auto rispondo...... credo di aver trovato l'inghippo
è colpa di un exit che blocca l'avanzamento del codice (dopo controllo numero errori validazione) se lo tolgo va tutto bene solo che non si arresta a errori>0
come lo risolvo?
...risolto
l'istruzione exit era fuori dal ciclo (la graffetta di chiusura if andava dopo exit e non prima)
finalmente il codice è perfettamente funzionante, compreso l'invio email di risposta.
Passiamo alla prima implementazione che vorrei aggiungereIl form è un modulo di iscrizione, per cui i corsi essendo a numero chiuso vorrei estrarre, al momento dell'inserimento tutti gli iscritti di una determinata data e determinato corso. mostrando a video e la relativa posizione e se presente ne db per lo stesso corso bloccare il processo di iscrizione dando come risultato un messaggio tipo........ Risulti già iscritto, richiesta annullata
:bho:
nessuno ha suggerimenti?
-
Ti servono dei controlli attraverso delle query sql del tipo
"select * from tabella where campo_email=email_inserita_nel_form"
se restituisce uno gli stampi il messaggio di errore e non lo fai registrare... o gli stampi la posizione in base al risultato della query sul database.
-
no se faccio un incrocio sulla email dopo un po bloccherei tutto perchè la stessa persona potrebbe registrare più allievi con stesso indirizzo oppure la stessa persona potrebbe fare due corsi diversi, il controllo deve avvenire tra una data (data del Corso, Cognome e Nome) non so come impostare la query su tre campi per conpararli poi con le variabili passate dal _POST
-
o meglio prendere i tre dati e darli in comparazione a tutto il db
-
Ciao emj,
non postare un messaggio dietro l'altro
-
sorry
scivolato