Visualizzazione risultati 1 fino 9 di 9

Discussione: [PHP] Contact form nella stessa pagina php: come controllare i campi

  1. #1
    Guest

    Predefinito [PHP] Contact form nella stessa pagina php: come controllare i campi

    Ciao a tutti.

    Ho questo script php:
    Codice PHP:
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    if(!empty(
    $_POST['email']) and !empty($_POST['message']) and !empty($_POST['name']))
    {
    $to = 'nome@email.it';
    $subject = 'Messaggio';

    $headers = 'From: '.$name.'<'.$email.'>';

    mail($to, $subject, $message, $headers);

    echo
    "Messaggio inviato con successo!";
    }
    else{
    echo
    'Compila tutti i campi!';
    }
    e sotto, nella stessa pagina .php, ho il contact form:

    Codice HTML:
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    
    <input type="text" name="name" value=""/>
     
    <input type="text" name="email" value=""/>
     
    <textarea name="message" rows="8" cols="40"></textarea>
     
    <input type="submit" value="Invia"/>
    
    </form>
    Il problema è che appena apro la pagina .php mi stampa subito "Compila tutti i campi!", ed invece lo dovrebbe stampare solo quando clicco sul pulsante "Invia" ed i campi sono vuoti.
    Ultima modifica di musicanapoli : 15-09-2011 alle ore 18.01.33

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Assegna all'input submit l'attributo name, verifica con isset se $_POST['nome_submit'] è definito.
    In questo modo:
    Codice PHP:
    if(isset($_POST['submit'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    if(!empty(
    $_POST['email']) and !empty($_POST['messaggio']) and !empty($_POST['nome'])) {
    $to = 'nome@email.it';
    $subject = 'Messaggio';

    $headers = 'From: '.$name.'<'.$email.'>';
    echo
    "Messaggio ", mail($to, $subject, $message, $headers) ? "" : "non ", "inviato";
    } else {
    echo
    'Compila tutti i campi!';
    }
    }
    Codice HTML:
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    
    <input type="text" name="name" value=""/>
     
    <input type="text" name="email" value=""/>
     
    <textarea name="message" rows="8" cols="40"></textarea>
     
    <input type="submit" name="submit" value="Invia"/>
    
    </form>

  3. #3
    Guest

    Predefinito

    Ho scritto male:
    Codice PHP:
    if(!empty($_POST['email']) and !empty($_POST['message']) and !empty($_POST['name']))

    Comunque...

    lo script non invia e-mail e neppure mi stampa gli errori.

  4. #4
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Codice PHP:
    if(isset($_POST['submit'])){
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    if(!empty(
    $_POST['email']) and !empty($_POST['message']) and !empty($_POST['name']))
    {
    $to = 'nome@email.it';
    $subject = 'Messaggio';

    $headers = 'From: '.$name.'<'.$email.'>';

    mail($to, $subject, $message, $headers);

    echo
    "Messaggio inviato con successo!";
    }
    else{
    echo
    'Compila tutti i campi!';
    }
    }
    Prova così (non ho aggiustato l'e-mail).

  5. #5
    Guest

    Predefinito

    Neppure questo funziona.
    Non mi appare nessun echo e non invia nessuna mail.

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Hai assegnato il nome al submit?

  7. #7
    Guest

    Predefinito

    Cioè?

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,754

    Predefinito

    ..Scusate, ma non è meglio controllare direttamente i valori, invece del dato passato da submit?

    Cioè, una cosa del genere:

    Codice PHP:
    if(isset($_POST['name'],$_POST['email'],$_POST['message'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    if(!empty(
    $_POST['email']) and !empty($_POST['message']) and !empty($_POST['name']))
    {
    $to = 'nome@email.it';
    $subject = 'Messaggio';

    $headers = 'From: '.$name.'<'.$email.'>';

    mail($to, $subject, $message, $headers);

    echo
    "Messaggio inviato con successo!";
    }
    else {
    echo
    'Compila tutti i campi!';
    }
    }
    Consiglio anche di controllare cosa restituisce mail().
    Poi (personalmente), i 3 assegnamenti dei dati prelevati da $_POST li farei dentro il secondo if.. Ma così va bene (funziona {almeno, dovrebbe}) ugualmente :)

    Ciao!

    EDIT:

    ah, comunque javascripter ha chiesto se hai assegnato il name al submit:
    Codice HTML:
    <input type="submit" name="submit" value="Invia"/>
    Senza il name nel submit, l'if:
    Codice PHP:
    if(isset($_POST['submit'])){
    Non potrà mai essere true...
    Ultima modifica di alemoppo : 15-09-2011 alle ore 23.34.17

  9. #9
    Guest

    Predefinito

    @alemoppo:
    Funziona. Invia la mail e restituisce i vari messaggi.

Tags for this Thread

Regole di scrittura

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