Modulo PHP con campi Select

exposure

Nuovo Utente
29 Gen 2017
4
0
1
Ciao, ho un problema con un modulo contatti che contiene sia campi di testo che campi select..
Uso già un modulo contatti sul sito in questione e funziona.. fino a che si tratta di aggiungere campi o modificarli nessun problema.. ma se devo fare di più.. beh sono totalmente incapace!

Copio qui il codice php del modulo.. magari qualcuno mi aiuterà a capire come fare, anche per il futuro.
Online ho trovato qualche info e ci ho provato.. ma già so che sarà stracolmo di errori.. quindi non massacratemi!!
Non cerco qualcuno che mi sviluppi il codice ma che mi aiuti a svilupparlo insegnandomi almeno le basi..
Grazie!

PHP:
<?php

// Define some constants
define( "RECIPIENT_NAME", "" );
define( "RECIPIENT_EMAIL", "" );


// Read the form values
$success = false;
$firstName = isset( $_POST['firstname'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_POST['firstname'] ) : "";

if(isset($_POST[['submit'])) {
    $domiciliazione = $_POST['domiciliazione'];
    
if(isset($_POST[['submit'])) {
    $ufficio = $_POST['ufficio'];

if(isset($_POST[['submit'])) {
    $materia = $_POST['materia'];

$indirizzo = isset( $_POST['indirizzo'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_POST['indirizzo'] ) : "";

$città = isset( $_POST['città'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_POST['città'] ) : "";

$cap = isset( $_POST['cap'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_POST['cap'] ) : "";

$provincia = isset( $_POST['provincia'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_POST['provincia'] ) : "";

$phone = isset( $_POST['phone'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_POST['phone'] ) : "";

$mail = isset( $_POST['mail'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_POST['mail'] ) : "";

$subject = isset( $_POST['subject'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_POST['subject'] ) : "";

$message = isset( $_POST['message'] ) ? preg_replace( "/(From:|To:|BCC:|CC:|Subject:|Content-Type:)/", "", $_POST['message'] ) : "";

// If all values exist, send the email
if ( $firstName && $domiciliazione && $ufficio && $materia && $indirizzo && $città && $cap && $provincia && $phone && $mail && $subject && $message) {
  $recipient = RECIPIENT_NAME . " <" . RECIPIENT_EMAIL . ">";
  $headers = "From: " . $firstName . "" . $mail . " <" . $senderPhone . ">";
  $success = mail( $recipient, $message, $subject, $headers, $domiciliazione, $ufficio, $materia, $indirizzo, $città, $cap, $provincia);

  //Set Location After Successfull Submission
  header('Location: area-domiciliazioni-true.html');
}

else{
    //Set Location After Error
      header('Location: area-domiciliazioni-false.html');   
}

?>
 
ciao
scusa, ma il codice che hai postato è un po' (per essere gentili) un caos, basterebbe sottoliniare che la funzione mail supporta solo 4 parametri e tu ne metti 11.
è tutto completamente da rifare
 
Si infatti io ho preso iil codice di un modulo contatti che ho funzionante e l'ho modificato.. non capendoci nulla ho inserito tutti i campi del modulo... come posso risolvere? potresti darmi una mano a capire come si fa? così almeno per la base di un modulo contatti posso vedermela da sola..
 
ciao
ti schematizzo
PHP:
<?php
if(isset($_POST['submit'])){//ti serve se form e php nella stessa pagina, se diverse non servirebbe
    define( "RECIPIENT_NAME", "pinco" );//qui dovrai mettere il nome
    define( "RECIPIENT_EMAIL", "<pinco@pallo.it>" );//e l'indirizzo del destinatario
    //poi devi decidere quali campi del form sono obbligatori o meno
    //io ti metto solo in nome e l'email del mittente, poi per gli altri ci pensi tu
    //per fare questo io uso una variabile che metto a vuoto inizialmente
    $errori="";
    if(empty(trim( $_POST['firstname']))){$errori.="il nome è obbligatorio<br />";}else{$nome=$_POST['firstname'];}
    $mail=filter_var($_POST['mail'], FILTER_SANITIZE_EMAIL);//ripulisco
    if(!filter_var($mail, FILTER_VELIDATE_EMAIL)){
        //l'indirizzo email non è valido
        $errori.="indirizzo email non valido<br />";
    }
    //e eventuali altri controlli che ti servono
    //e la lettura degli altri $_POST......
    //se $errori è rimasta vuota vuol dire che non ci sono sin qui errori
    if($errori==""){
        //quindi comincio a preparare l'email
        $subject=trim($_POST['subject']);
        $messaggio ="";//lo metto a vuoto per sicurezza
        //e comincio a riempirlo, nota che uso il concatenamento tra stinghe
        $messaggio .="nome: $nome\r\n";
        $messaggio .="domiciliazione $domiciliazione \r\n";
        //e continui a riempire $messaggio con tutto quello che ti serve...
        //il \r\n ti serve in quanto inviando in formato testo per andare a capo
        $messaggio .=$message;
        //prepari il destinatario
        $email_to=RECIPIENT_NAME.RECIPIENT_EMAIL;
        $header="replay to $mail\r\n";
        //e finalmente invii
        if(mail($email_to,$subject,$messaggio,$header)){
            //messaggio inviato
            //ringrazi e riinvii dove vuoi
            header( "refresh:5;url=../dove_vuoi.php" );
            echo "grazie di avermi contattato....";
        }else{
            //errore nell'invio, avvisi e rimandi sempre dove vuoi
            header( "refresh:5;url=../dove_vuoi.php" );
            echo "c'è stato un errore di trasmissione, riprova più tardi";
        }
    }else{
        //l'utente ha fatto degli errori, quindi lo avvisi e rimandi dove vuoi
        header( "refresh:5;url=../dove_vuoi.php" );
        echo $errori;
    }
    //nota il refresh:5 il messaggio rimane visibile per 5 secondi prima di essere rinviati a dove vuoi
}
?>
comunque questo è uno schema, butta giù qualcosa ed eventualmete posta se non funziona
ho notato comunque una cosa nello scripit che hai postato: attento all'apertura/chiusura delle parentesi graffe
 
ciao
ti schematizzo
PHP:
<?php
if(isset($_POST['submit'])){//ti serve se form e php nella stessa pagina, se diverse non servirebbe
    define( "RECIPIENT_NAME", "pinco" );//qui dovrai mettere il nome
    define( "RECIPIENT_EMAIL", "<pinco@pallo.it>" );//e l'indirizzo del destinatario
    //poi devi decidere quali campi del form sono obbligatori o meno
    //io ti metto solo in nome e l'email del mittente, poi per gli altri ci pensi tu
    //per fare questo io uso una variabile che metto a vuoto inizialmente
    $errori="";
    if(empty(trim( $_POST['firstname']))){$errori.="il nome è obbligatorio<br />";}else{$nome=$_POST['firstname'];}
    $mail=filter_var($_POST['mail'], FILTER_SANITIZE_EMAIL);//ripulisco
    if(!filter_var($mail, FILTER_VELIDATE_EMAIL)){
        //l'indirizzo email non è valido
        $errori.="indirizzo email non valido<br />";
    }
    //e eventuali altri controlli che ti servono
    //e la lettura degli altri $_POST......
    //se $errori è rimasta vuota vuol dire che non ci sono sin qui errori
    if($errori==""){
        //quindi comincio a preparare l'email
        $subject=trim($_POST['subject']);
        $messaggio ="";//lo metto a vuoto per sicurezza
        //e comincio a riempirlo, nota che uso il concatenamento tra stinghe
        $messaggio .="nome: $nome\r\n";
        $messaggio .="domiciliazione $domiciliazione \r\n";
        //e continui a riempire $messaggio con tutto quello che ti serve...
        //il \r\n ti serve in quanto inviando in formato testo per andare a capo
        $messaggio .=$message;
        //prepari il destinatario
        $email_to=RECIPIENT_NAME.RECIPIENT_EMAIL;
        $header="replay to $mail\r\n";
        //e finalmente invii
        if(mail($email_to,$subject,$messaggio,$header)){
            //messaggio inviato
            //ringrazi e riinvii dove vuoi
            header( "refresh:5;url=../dove_vuoi.php" );
            echo "grazie di avermi contattato....";
        }else{
            //errore nell'invio, avvisi e rimandi sempre dove vuoi
            header( "refresh:5;url=../dove_vuoi.php" );
            echo "c'è stato un errore di trasmissione, riprova più tardi";
        }
    }else{
        //l'utente ha fatto degli errori, quindi lo avvisi e rimandi dove vuoi
        header( "refresh:5;url=../dove_vuoi.php" );
        echo $errori;
    }
    //nota il refresh:5 il messaggio rimane visibile per 5 secondi prima di essere rinviati a dove vuoi
}
?>
comunque questo è uno schema, butta giù qualcosa ed eventualmete posta se non funziona
ho notato comunque una cosa nello scripit che hai postato: attento all'apertura/chiusura delle parentesi graffe


Nulla.. non riesco.. ho provato a modificare secondo i commenti che mi hai inserito nel codice.. almeno non mi da più errore php come mi diceva prima (riga 9 e poi riga 10).. ti copio il codice che ho modificato... un'altra domanda.. ma i campi select vengono trasmessi bene in email? Con il codice scritto così vengono inviate le scelte del menu a tendina?

PHP:
<?php
{
    define( "RECIPIENT_NAME", "nome" );//qui dovrai mettere il nome
    define( "RECIPIENT_EMAIL", "mail" );//e l'indirizzo del destinatario
    //poi devi decidere quali campi del form sono obbligatori o meno
    //io ti metto solo in nome e l'email del mittente, poi per gli altri ci pensi tu
    //per fare questo io uso una variabile che metto a vuoto inizialmente
   
    $mail=filter_var($_POST['mail'], FILTER_SANITIZE_EMAIL);//ripulisco
    if(!filter_var($mail, FILTER_VELIDATE_EMAIL)){
        //l'indirizzo email non è valido
        $errori.="indirizzo email non valido<br />";
    }
    //e eventuali altri controlli che ti servono
    //e la lettura degli altri $_POST......
    //se $errori è rimasta vuota vuol dire che non ci sono sin qui errori
    if($errori==""){
        //quindi comincio a preparare l'email
        $subject=trim($_POST['subject']);
        $messaggio ="";//lo metto a vuoto per sicurezza
        //e comincio a riempirlo, nota che uso il concatenamento tra stinghe
        $messaggio .="nome: $nome\r\n"; "domiciliazione $domiciliazione \r\n"; "ufficio $ufficio \r\n"; "materia $materia \r\n"; "indirizzo $indirizzo \r\n"; "città $città \r\n"; "cap $cap \r\n"; "provincia $provincia \r\n"; "phone $phone \r\n"; "mail $mail \r\n"; "subject $subject \r\n"; "privacy $privacy \r\n";

        //e continui a riempire $messaggio con tutto quello che ti serve...
        //il \r\n ti serve in quanto inviando in formato testo per andare a capo
        $messaggio .=$message;
        //prepari il destinatario
        $email_to=RECIPIENT_NAME.RECIPIENT_EMAIL;
        $header="replay to $mail\r\n";
        //e finalmente invii
        if(mail($email_to,$subject,$messaggio,$header)){
            //messaggio inviato
            //ringrazi e riinvii dove vuoi
            header('Location: contatti-true.html');
        }else{
            //errore nell'invio, avvisi e rimandi sempre dove vuoi
            header('Location: contatti-false.html');
        }
    }else{
        //l'utente ha fatto degli errori, quindi lo avvisi e rimandi dove vuoi
        header( 'Location: contatti-false.html' );
        echo $errori;
    }
    //nota il refresh:5 il messaggio rimane visibile per 5 secondi prima di essere rinviati a dove vuoi
}
?>
 
ciao
cosa intendi per "i campi select vengono trasmessi bene in email"?
comunque si il value della otpion viene trasmesso come qualsiasi testo
 
Nel senso.. con la stringa che ti copio qui viene mandata per email la voce scelta nella casella a discesa?

PHP:
$messaggio .="nome: $nome\r\n"; "domiciliazione $domiciliazione \r\n"; "ufficio $ufficio \r\n"; "materia $materia \r\n"; "indirizzo $indirizzo \r\n"; "città $città \r\n"; "cap $cap \r\n"; "provincia $provincia \r\n"; "phone $phone \r\n"; "mail $mail \r\n"; "subject $subject \r\n"; "privacy $privacy \r\n";

..Cmq non invia la mail.. volendo aggiungere solo un campo select al modulo che già ho funzionante, come dovrei scrivere? come il codice che ho copiato sopra oppure c'è un altro metodo? aggiungendo poi alla fine nel messaggio di invio che voglio visualizzare in mail la scelta.. così come mi hai scritto su?
Non ci capisco nulla... ;/
 
ciao
ma cosa hai fatto? se vuoi che tutti quei dati siano compresi nella variabile $messaggio
PHP:
$messaggio .="nome: $nome\r\n domiciliazione $domiciliazione \r\nufficio $ufficio \r\n materia $materia \r\n
 indirizzo $indirizzo \r\n città $città \r\n cap $cap \r\n provincia $provincia \r\n phone $phone \r\n mail $mail \r\n subject $subject \r\n privacy $privacy \r\n";
non capisco poi perche tu metta es. la variabile $subject dentro il messaggio
ricorda che per php quello che hai fatto ...";"... corrisponde alla fine di una istruzione
se intendevi fare un concatenamente al posto di ; dovevi mettere ..."."..., ma è un lavoro in più
 

Discussioni simili