Visualizzazione risultati 1 fino 7 di 7

Discussione: Contact Form con controllo campi obbligatori.

  1. #1
    Guest

    Predefinito Contact Form con controllo campi obbligatori.

    Allora, salve a tutti Ho cercato ma non sono riuscito a trovare nulla, nemmeno su Google, forse ho cercato male io

    Comunque, voglio creare un contact form che controlla i campi obbligatori e guarda che i campi abbiano un contenuto. Trovai per quest'ultimo un po con le espressioni regolari per guardare per ersempio pche la mail avesse almeno e massimo un @ nell'indirizzo e altri campi idem.

    Ora. Ho la mia pagina index.php che mostra tutto il contenuto del sito. Faccio un controllo se la pagina richiamata è Contact quindi, se è true includo un'altra pagina che è questa:

    Codice PHP:
    $recipient = 'Email(a)email.ext'; //Ora posto così, l'indirizzo vero è giusto
    $name = $_POST['name'];
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $mail_body = $_POST['mail_body'];
    $header = "From: ". $name . " <" . $webmaster . ">\r\n";

    if(
    $name == "" || $email == "" || $subject == "" || $mail_body == "")
    {
    $content = 'Devi compilare tutti i campi';
    }
    else
    {
    //mail($recipient, $subject, $mail_body, $header);
    /* Non voglio mandare mail per ogni prova, quindi al posto di inviare,
    stampo il contenuto per vedere che tutto sia apposto */
    $content = 'Recipient: ' . $recipient . '<br />';
    $content .= 'Subject: ' . $subject . '<br />';
    $content .= 'Email: ' . $email . '<br />';
    $content .= 'Mail Body: ' . $mail_body . '<br />';
    $content .= 'Header: ' . $header . '<br />';
    $content .= '<h1>Richiesta Inviata con successo</h1>';
    }
    Questo invece è il .tpl:
    Codice HTML:
    <p>
    <form action="./Contact" method="post">
    Nome: <input name="name" type="text" /><br />
    Indirizzo email: <input name="email" type="text" /><br />
    Oggetto: <input name="subject" type="text" /><br />
    Messaggio:
    <textarea cols="20" rows="5" name="mail_body"></textarea>
    <input type="submit" value="Invia" />
    </form>
    $content
    </p>
    Fino a qui tutto bene, i dati vengono passati senza problemi, e vengono stampati, però ho un problema.

    Se io entro la prima volta nella pagina mi viene subito mostrato (ovviamente) che i campi dacompilare sono vuoti.

    Mentre se invio mostra benissimo i dati passati trami POST.

    Ora, come posso fare che appena entro non mi stampi l'errore, mentre se clicco e i campi sono vuoti, mi mostra l'errore in basso ma mi tiene in memoria i dati delle textarea?

  2. #2
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Potresti inserire un campo hidden con del contenuto casuale come faccio io, se questo campo risulta pieno e i campi obbligatori vuoti mostra l'errore, in caso contrario non lo mostra:

    Codice PHP:
    $recipient = 'Email(a)email.ext'; //Ora posto così, l'indirizzo vero è giusto
    $name = $_POST['name'];
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $mail_body = $_POST['mail_body'];
    $header = "From: ". $name . " <" . $webmaster . ">\r\n";

    if(empty(
    $name)|| empty($email) || empty($subject) || empty($mail_body) && !empty($_POST['form_inviato']))
    {
    $content = 'Devi compilare tutti i campi';
    }
    else
    {
    //mail($recipient, $subject, $mail_body, $header);
    /* Non voglio mandare mail per ogni prova, quindi al posto di inviare,
    stampo il contenuto per vedere che tutto sia apposto */
    $content = 'Recipient: ' . $recipient . '<br />';
    $content .= 'Subject: ' . $subject . '<br />';
    $content .= 'Email: ' . $email . '<br />';
    $content .= 'Mail Body: ' . $mail_body . '<br />';
    $content .= 'Header: ' . $header . '<br />';
    $content .= '<h1>Richiesta Inviata con successo</h1>';
    }
    Codice HTML:
    <p>
    <form action="./Contact" method="post">
    Nome: <input name="name" type="text" /><br />
    Indirizzo email: <input name="email" type="text" /><br />
    Oggetto: <input name="subject" type="text" /><br />
    Messaggio:
    <textarea cols="20" rows="5" name="mail_body"></textarea>
    <input type="hidden" name="form_inviato" value="yes" />
    <input type="submit" value="Invia" />
    </form>
    $content
    </p>
    Probabilmente c'è qualche metodo più veloce ma non conoscendolo io aggiro il problema in questo modo
    Apprezzi l'aiuto? Offrimi un caffè!

  3. #3
    Guest

    Predefinito

    Non funziona come dici te Miki.

    Ho modificato e spero migliorato il codice in questo modo:

    Codice PHP:
    $recipient = $webmaster_mail;
    $name = $_POST['name'];
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $mail_body = $_POST['mail_body'];
    $send_button = $POST['send_button'];
    $header = "From: ". $name . " <" . $webmaster . ">\r\n";

    if(empty(
    $name) || (empty($email)) || (!eregi("^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)*\.([a-zA-Z]{2,6})$", $email)) || empty($subject) || empty($mail_body))
    {

    $content_error = '<div class="contact_error">';
    $content_error .= 'Devi compilare correttamente tutti i campi prima di inviare la mail.<ul>';

    if(empty(
    $name))
    {
    $content_error .= '<li>Devi inserire il tuo Nome.</li>';
    }
    if(empty(
    $email))
    {
    $content_error .= '<li>Devi inserire una email valida per ricevere risposta.</li>';

    }
    elseif (!
    eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $email))
    {
    $content_error .= '<li>Devi inserire una email valida per ricevere risposta.</li>';
    $content_error .= '<ul><li>L\'email deve essere del formato x@x.x</li></ul>';
    }
    if(empty(
    $subject))
    {
    $content_error .= '<li>Devi inserire un Oggetto.</li>';
    }
    if(empty(
    $mail_body))
    {
    $content_error .= '<li>Devi inserire il testo della mail.</li>';
    }
    $content_error .= '</ul></div>';

    $back_content = '<div class="back_content"><h3>Dati precedenti</h3>';
    $back_content .= '<div class="contact_option">Nome:</div> <input type="text" readonly="readonly" value="' . $name . '" />';
    $back_content .= '<div class="contact_option">Email:</div> <input type="text" readonly="readonly" value="' . $email . '" />';
    $back_content .= '<div class="contact_option">Oggetto:</div> <input type="text" readonly="readonly" value="' . $subject . '" />';
    $back_content .= '<div class="contact_option">Messaggio:</div> <textarea>' . $mail_body . '</textarea></li>';
    $back_content .= '</div>';
    }
    else
    {
    //mail($recipient, $subject, $mail_body, $header);
    $content_send = '<div class="contact_send">';
    $content_send .= '<h3>Email Inviata con successo, con i seguenti dati:</h3><ul>';
    $content_send .= '<li>A: ' . $recipient . '</li>';
    $content_send .= '<li>Oggetto: ' . $subject . '</li>';
    $content_send .= '<li>Email: ' . $email . '</li>';
    $content_send .= '<li>testo: ' . $mail_body . '</li>';
    $content_send .= '<li>Header: ' . $header . '</li>';
    $content_send .= '</ul></div>';
    }
    Mentre nel .tpl ho modificato il pulsante di invio in questo modo:
    Codice HTML:
    <input type="submit" name="send_button" value="Invia" />
    E sto facendo delle prove per vedere gli eventi, infatti ho aggiunto alla fine del codice php questa condizione:
    Codice PHP:
    if (empty($send_button)) {
    print
    'ok';
    }
    Dato che ha value="Invia" restituisce sempre true quindi mi stampa a video ok.

    Mentre se metto !empty() naturalmente non mi stampa nulla.

    Come posso fare un controllo senza usare Javascript che dopo aver cliccato su Invia se ci sono degli errori mi stampi gli errori?

    Potete trovare il form per contattarmi. La mail non verrà inviata ma se ttuto va a buon fine verranno stampati a video in alto i dati inseriti tramite post: Contact - Federico Biccheddu


    PS: Ho aggiunto la parte Dati Precedenti proprio per evitare che se qualcuno sbaglia perda i dati, quindi li tengo memorizzati anche li sotto finchè non trovo soluzione

  4. #4
    Guest

    Predefinito

    Prendo il codice del primo messaggio per fare l'esempio, poi modifichi tu

    Codice PHP:
    $recipient = 'Email(a)email.ext'; //Ora posto così, l'indirizzo vero è giusto
    $name = $_POST['name'];
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $mail_body = $_POST['mail_body'];
    $is_send = $_POST['send_form'];

    $header = "From: ". $name . " <" . $webmaster . ">\r\n";
    if(
    $is_send) {
    if(
    $name == "" || $email == "" || $subject == "" || $mail_body == "") {
    $content = 'Devi compilare tutti i campi';
    }else {
    //mail($recipient, $subject, $mail_body, $header);
    /* Non voglio mandare mail per ogni prova, quindi al posto di inviare,
    stampo il contenuto per vedere che tutto sia apposto */
    $content = 'Recipient: ' . $recipient . '<br />';
    $content .= 'Subject: ' . $subject . '<br />';
    $content .= 'Email: ' . $email . '<br />';
    $content .= 'Mail Body: ' . $mail_body . '<br />';
    $content .= 'Header: ' . $header . '<br />';
    $content .= '<h1>Richiesta Inviata con successo</h1>';
    }
    }
    Questo invece è il .tpl:
    Codice HTML:
    <p>
    <form action="./Contact" method="post">
    Nome: <input name="name" type="text" /><br />
    Indirizzo email: <input name="email" type="text" /><br />
    Oggetto: <input name="subject" type="text" /><br />
    Messaggio:
    <textarea cols="20" rows="5" name="mail_body"></textarea>
    <input type="submit" value="Invia" name="send_form" />
    </form>
    $content
    </p>
    Ciao.

  5. #5
    Guest

    Predefinito

    Stoner mi hai salvato

    Ora anche il contact form è risolto, posto il codice per chi vorrebbe utililizzarlo:

    Codice PHP:
    $recipient = 'TUA EMAIL';
    $name = $_POST['name'];
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $mail_body = $_POST['mail_body'];
    $is_send = $_POST['send_form'];
    $header = "From: ". $name . " <" . $webmaster . ">\r\n";

    if(
    $is_send)
    {
    if(empty(
    $name) || empty($email) || (!eregi("^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)*\.([a-zA-Z]{2,6})$", $email)) || empty($subject) || empty($mail_body))
    {
    $content_error = '<div class="contact_error">';
    $content_error .= 'Devi compilare correttamente tutti i campi prima di inviare la mail.<ul>';

    if(empty(
    $name))
    {
    $content_error .= '<li>Devi inserire il tuo Nome.</li>';
    }
    if(empty(
    $email))
    {
    $content_error .= '<li>Devi inserire una email valida per ricevere risposta.</li>';
    }
    elseif (!
    eregi("^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)*\.([a-zA-Z]{2,6})$", $email))
    {
    $content_error .= '<li>Devi inserire una email valida per ricevere risposta.</li>';
    $content_error .= '<ul><li>L\'email deve essere del formato email@dominio.ext</li></ul>';
    }
    if(empty(
    $subject))
    {
    $content_error .= '<li>Devi inserire un Oggetto.</li>';
    }
    if(empty(
    $mail_body))
    {
    $content_error .= '<li>Devi inserire il testo della mail.</li>';
    }
    $content_error .= '</ul></div>';
    }
    else
    {
    $content_send = '<div class="contact_send">';
    $content_send .= '<h3>Email Inviata con successo, con i seguenti dati:</h3><ul>';
    $content_send .= '<li>A: ' . $recipient . '</li>';
    $content_send .= '<li>Oggetto: ' . $subject . '</li>';
    $content_send .= '<li>Email: ' . $email . '</li>';
    $content_send .= '<li>testo: ' . $mail_body . '</li>';
    $content_send .= '<li>Header: ' . $header . '</li>';
    $content_send .= '</ul></div>';
    }
    }
    Mentre questo è il .tpl:

    Codice HTML:
    <form action="" method="post">
    A:<input name="at" type="text" disabled="true" value="$recipient" size="29" /><br /><br />
    <label for="name">Nome:</label> <input id="name" name="name" type="text" size="29" /><br /><br />
    <label for="email">Indirizzo email:</label> <input id="email" name="email" type="text" size="29" /><br /><br />
    <label for="subject">Oggetto:</label> <input id="subject" name="subject" type="text" size="29" /><br /><br />
    <label for="mail_body">Messaggio:</label> <textarea cols="22" rows="5" id="mail_body" name="mail_body"></textarea>
    <input type="submit" value="Invia" name="send_form" />
    </form>
    Grazie ancora a tutti
    Ultima modifica di biccheddu : 02-02-2009 alle ore 01.26.28

  6. #6
    lucatartufari non è connesso Utente giovane
    Data registrazione
    01-03-2007
    Residenza
    Reggio Emilia
    Messaggi
    46

    Smile

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Stoner mi hai salvato

    Ora anche il contact form è risolto, posto il codice per chi vorrebbe utililizzarlo:

    Codice PHP:
    $recipient = 'TUA EMAIL';
    $name = $_POST['name'];
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $mail_body = $_POST['mail_body'];
    $is_send = $_POST['send_form'];
    $header = "From: ". $name . " <" . $webmaster . ">\r\n";

    if(
    $is_send)
    {
    if(empty(
    $name) || empty($email) || (!eregi("^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)*\.([a-zA-Z]{2,6})$", $email)) || empty($subject) || empty($mail_body))
    {
    $content_error = '<div class="contact_error">';
    $content_error .= 'Devi compilare correttamente tutti i campi prima di inviare la mail.<ul>';

    if(empty(
    $name))
    {
    $content_error .= '<li>Devi inserire il tuo Nome.</li>';
    }
    if(empty(
    $email))
    {
    $content_error .= '<li>Devi inserire una email valida per ricevere risposta.</li>';
    }
    elseif (!
    eregi("^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)*\.([a-zA-Z]{2,6})$", $email))
    {
    $content_error .= '<li>Devi inserire una email valida per ricevere risposta.</li>';
    $content_error .= '<ul><li>L\'email deve essere del formato email@dominio.ext</li></ul>';
    }
    if(empty(
    $subject))
    {
    $content_error .= '<li>Devi inserire un Oggetto.</li>';
    }
    if(empty(
    $mail_body))
    {
    $content_error .= '<li>Devi inserire il testo della mail.</li>';
    }
    $content_error .= '</ul></div>';
    }
    else
    {
    $content_send = '<div class="contact_send">';
    $content_send .= '<h3>Email Inviata con successo, con i seguenti dati:</h3><ul>';
    $content_send .= '<li>A: ' . $recipient . '</li>';
    $content_send .= '<li>Oggetto: ' . $subject . '</li>';
    $content_send .= '<li>Email: ' . $email . '</li>';
    $content_send .= '<li>testo: ' . $mail_body . '</li>';
    $content_send .= '<li>Header: ' . $header . '</li>';
    $content_send .= '</ul></div>';
    }
    }
    Mentre questo è il .tpl:

    Codice HTML:
    <form action="" method="post">
    A:<input name="at" type="text" disabled="true" value="$recipient" size="29" /><br /><br />
    <label for="name">Nome:</label> <input id="name" name="name" type="text" size="29" /><br /><br />
    <label for="email">Indirizzo email:</label> <input id="email" name="email" type="text" size="29" /><br /><br />
    <label for="subject">Oggetto:</label> <input id="subject" name="subject" type="text" size="29" /><br /><br />
    <label for="mail_body">Messaggio:</label> <textarea cols="22" rows="5" id="mail_body" name="mail_body"></textarea>
    <input type="submit" value="Invia" name="send_form" />
    </form>
    Grazie ancora a tutti
    Ciao biccheddu, premetto che sono ignorante di php e quanto riguarda la programmazione...sto cercando però tra 1 copia e incolla di far funzionare il form per un mio sito aziendale che sto preparando, volevo sapere se posso introdurre un campo telefono di tipo numerico? la parte form del file .tpl io la devo integrare in una normale pagina html si può fare? certo proverò ad adattarla per la grafica...ma si può fare? io vorrei provare a modificare il tuo codice e adattarlo alle mie esigenze, eventualmente se ho problemi posso postarti il codice coi relativi risultati ottenuti? so 3giorni che ci sto sbattendo la testa...!!
    Grazie.

  7. #7
    Guest

    Predefinito

    Io utilizzo un sitema template (sempre postato su AV), in modo da dividere codice/"grafica", per non sporcare le pagine php.

    Comunque certo.

    Per non andare in OT mandami un MP che ci organizziamo.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •