• User Newbie

    rendere obbligatori campi form

    Salve a tutti, sono un nuovo iscritto al forum con un "problemino" che vorrei sottoporvi.
    Sono alle prese con un form per invio dati via mail da sito, in html + php.
    vorrei rendere obbligatori i campi da compilare ottenendo, in caso di mancata compilazione, un messaggio di errore o comunque un avviso.

    Allego il codice php:

    <?php

    /INVIO DATI/

    $destinatario = "[email protected]";

    $oggetto = "Invio dati e richiesta informazioni corso";

    $messaggio = "Nome: ".htmlentities($_POST['Nome'])."\n";
    $messaggio .= "Cognome: ".htmlentities($_POST['Cognome'])."\n";
    $messaggio .= "Giorno: ".htmlentities($_POST['Giorno'])."\n";
    $messaggio .= "Mese: ".htmlentities($_POST['Mese'])."\n";
    $messaggio .= "Anno: ".htmlentities($_POST['Anno'])."\n";
    $messaggio .= "Citta: ".htmlentities($_POST['Citta'])."\n";
    $messaggio .= "Provincia: ".htmlentities($_POST['Provincia'])."\n";
    $messaggio .= "Telefono: ".htmlentities($_POST['Telefono'])."\n";
    $messaggio .= "Email: ".htmlentities($_POST['email'])."\n";

    //$messaggio .= "Data: $data\n";
    //$messaggio .= "Citta': $citta\n";
    //$messaggio .= "Provincia: $provincia\n";
    //$messaggio .= "Email: $email\n";
    $messaggio .= $testo;

    $da = $email;
    $intestazioni = "From: $da";

    mail($destinatario,$oggetto,$messaggio,$intestazioni);

    ?>

    Qualcuno puo' aiutarmi?

    Grazie 🙂


  • User Attivo

    Tutti i campi sono obbligatori? Se cosi` fosse basta un ciclo che controlla tutti i valori passati in $_POST:

    foreach($_POST as $item){
    if($item == ''){ //oppure !isset($item) credo vada bene
    echo "Errore, campo non compilato!";
    exit;
    }
    }

    Testa e vedi se funziona.
    Ci sono soluzioni piu` eleganti, dal controllo profondo ad alcune librerire javascript ma questo dovrebbe funzionare!


  • User Newbie

    grazie andrearufo per la risposta 🙂
    Si, vorrei rendere obbligatori tutti i campi

    devo inserire il ciclo in qualche punto particolare del codice?


  • User Attivo

    Anche se l'effetto potrebbe essere lo stesso io lo inserirei come primissimo passaggio dello script prima che i valori vengano assegnati alle variabili (ottimizzando lo script).

    Eventualmente aggiungi qualche filtro onde evitare iniezione di codife malevolo!


  • User Newbie

    :mmm: ho provato a metterlo dopo la sfilza di $messaggio e... FUNZIONA!! :vai:

    scusa ma cosa intendi per "ottimizzare lo script"?

    e per filtri contro il codice malevolo? cosi' com'è corro qualche rischio?
    mi piacerebbe inserire un codice CAPTCHA... forse ti riferisci a quello??

    un ultima domanda... l'echo di risposta del tuo script...
    sono riuscito a centrarlo nella riga con un <center>...</center>
    ...posso anche cambiare carattere, dimensione, colore etc etc?
    magari centrarlo nella pagina?

    ti ringrazio per la disponibilità


  • User Attivo

    Bhe, Alberto, mi pare proprio che manchi nelle piu` minime nozione di PHP per comprendere quello che stai facendo.

    Per ottimizzare lo script intendo questo: per inizializzare variabili e per computare alcune operazioni (inizializza $message, aggiungi questo, aggiungi quello e quell'altro...) si occupa tempo e memoria del server che poi e` inutile se, dopo queste operazioni, si esegue il controllo che blocca il tutto. Sarebbe meglio mettere il controllo prima. Ma questo non compromette l'esecuzione.

    A meno di iniezione di codice, ovvero, senza la giusta protezione, un malintenzionato potrebbe inserire del codice nei campi che verrebbe male interpretato dal server mandando in crash lo script e avendo problemi di sicurezza (discorsi complessi). Si puo` evitare questo magari utilizzando dei filtri sui campi (addslashes, htmlentities, replace, ecc.): ti consiglio di leggere un manuale e la documentazione PHP.

    Il CAPTCHA serve solo in fase di inserimento (quindi nella pagina prima dello script che controlla e manda la mail) a vedere se e` unmano o macchina chi scrive nel form.

    Quello restituito dall'echo e puro HTML e puoi scriverci i tag che vuoi e stilarlo anche in CSS: il tag <center> e deprecato e non sarebbe da usare. Usa il tag <p> e stilalo in CSS per avere un risultato moderno, professionale e validato.