• User Newbie

    errore form

    Un saluto a tutta la comunità
    Appena iscritto
    mi chiamo Piero

    dopo 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 tabella formazione

    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 -->
    <?php

    include("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>      &nbsp                        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


  • User Newbie

    ....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 aggiungere

    Il 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?

    😢 😢 😢 😢


  • User Attivo

    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.


  • User Newbie

    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


  • User Newbie

    o meglio prendere i tre dati e darli in comparazione a tutto il db


  • Community Manager

    Ciao emj,

    non postare un messaggio dietro l'altro 🙂


  • User Newbie

    sorry
    scivolato