Ottimizzare Form PHP

  • Creatore Discussione Creatore Discussione Lord
  • Data di inizio Data di inizio
i messaggi non li avevo aggiunti
PHP:
<input type="checkbox" name="privacy" id="privacy" checked/>Acconsento al...<br/>
        <input type="checkbox" name="termini" id="termini" checked />Ho letto... <br/>
        <?php
        if (isset($obbligatorio['privacy'])) {
            echo "<span>" . $obbligatorio['privacy'] . "</span>";
        }
        if (isset($obbligatorio['termini'])) {
            echo "<span>" . $obbligatorio['termini'] . "</span>";
        }
        ?>
dovrai inserirne uno per ogni campo select o check che metterai nel form
 
Hai perfettamente ragione :dormo:

I messaggi di errore sono dei campi compaiono a destra di colore rosso, i messaggi delle checkbox compaiono in nero e spostano i bottoni ANNULLA e INVIA

PHP:
        <input type="checkbox" name="privacy" id="privacy" /checked>Acconsento al...<br/>
 <?php 
        if (isset($obbligatorio['privacy'])) { 
            echo "<span>" . $obbligatorio['privacy'] . "</span>"; 
        } 
?>
        <input type="checkbox" name="termini" id="termini" /checked>Ho letto... <br/> 
 <?php 
    if (isset($obbligatorio['termini'])) { 
    echo "<span>" . $obbligatorio['termini'] . "</span>"; 
        } 
?>

Posso modificare il colore e la posizione se utilizzo il foglio di stile?

Ora è pronto per collegarlo al database?
 
Come dicevo all'inizio devo collegare il form al database mysql e deve avere un controllo sugli input, manca qualcosa?
 
puoi aumentare i controlli qui
PHP:
${$_POST[$key]} = htmlentities($value);
in questo modo
PHP:
${$_POST[$key]} = strip_tags(htmlentities($value));
oppure richiamando una funzione tipo questa
 
Grazie, dovrei anche mettere un controllo sui caratteri? Per esempio il nome dovrà essere composto da minimo 3 caratteri, l'email xxx@xxx.ext, il numero di telefono numerico però c'è anche il prefisso quindi potrebbe servire il punto o il trattino, più o meno ci siamo?
 
dovrai aggiungere i controlli all interno del ciclo del post
ti faccio un esempio
PHP:
// ciclo del POST   
    foreach ($_POST as $key => $value) {
        // se non è vuoto   
        if (!empty($value)) {
            
            if ($key == "email") {
                if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
                    $obbligatorio[$key] = "Mail non valida";
                }
            }
            if ($key == "telefono") {
                if (!is_numeric($value)) {
                    $obbligatorio[$key] = "Il telefono deve essere numerico";
                }
            }
            ${$_POST[$key]} = strip_tags(htmlentities($value));
        } else {
            $obbligatorio[$key] = "\n Il campo $key e' obbligatorio";
        }
    }
 
Ciao, troppo gentile ma credo che avrò ancora bisogno di aiuto.

L'email arriva ma il contenuto è vuoto, cosa manca?
 
riposta il codice completo come lo hai scritto tu e vediamo
 
Ecco il codice completo

PHP:
<?php 
// se hanno premuto il pulsante submit    
if (isset($_POST['submit']) && $_POST['submit'] == "INVIA") { 
    // inizializzo campi obbligatori    
    $obbligatorio = array(); 
    // eliminiamo il post submit     
    unset($_POST['submit']); 
    // array check obbligatorie    
    if (!isset($_POST['privacy'])) { 
        $obbligatorio['privacy'] = "E' obbligatorio accettare le condizioni sulla privacy"; 
    } 
    if (!isset($_POST['termini'])) { 
        $obbligatorio['termini'] = "E' obbligatorio accettare i termini"; 
    } 
    // ciclo del POST    
    foreach ($_POST as $key => $value) { 
        // se non è vuoto    
        if (!empty($value)) { 
           if ($key == "email") {
                if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
                    $obbligatorio[$key] = "Indirizzo E-mail non valido";
                }
            } 
                ${$_POST[$key]} = strip_tags(htmlentities($value));
        } else {
            $obbligatorio[$key] = "\n Il campo $key e' obbligatorio";
        }
    }

    if (count($obbligatorio) == 0) { 
        $oggetto = "Prova"; 
        $testo_del_messaggio.="Nome: $nome\n"; 
	$testo_del_messaggio.="Email: $email\n"; 
        $testo_del_messaggio.="Provincia: $provincia\n";
	$testo_del_messaggio.="Oggetto: $oggetto\n"; 
        $testo_del_messaggio.="Messaggio: $messaggio\n"; 
        $to = "@@@"; 
        $from = $email;
	$fromname = $nome; 
        $result = mail($to, $oggetto, $testo_del_messaggio); 
        if ($result) { 
            echo "<p>Email inviata</p>"; 
        } else { 
            echo " <p>Error.<br>Impossibile inviare l'email.</p>"; 
        } 
    } 
} 
?> 
<body> 
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"> 

        <label>Nome 
            <input type="text" name="nome" placeholder="Nome e Cognome"/> 
            <?php 
            if (isset($obbligatorio['nome'])) { 
                echo "<span>" . $obbligatorio['nome'] . "</span>"; 
            } 
            ?> 
        </label> 
        <br/>
<label>E-mail 
            <input type="text" name="email" placeholder="Indirizzo E-mail valido"/> 
            <?php 
            if (isset($obbligatorio['email'])) { 
                echo "<span>" . $obbligatorio['email'] . "</span>"; 
            } 
            ?> 
        </label> 
        <br/> 
        <label>Provincia 
            <select name="provincia"> 
                <option value="">Seleziona</option> 
                <option value="VE">VE</option> 
                <option value="MI">MI</option> 
                <option value="PA">PA</option> 
            </select> 
            <?php 
            if (isset($obbligatorio['provincia'])) { 
                echo "<span>" . $obbligatorio['provincia'] . "</span>"; 
            } 
            ?> 
        </label> 
        <br/>
 <label>Oggetto 
            <select name="oggetto"> 
                <option value="">Seleziona</option> 
                <option value="1">1</option> 
                <option value="2">2</option> 
                <option value="3">3</option> 
            </select> 
            <?php 
            if (isset($obbligatorio['oggetto'])) { 
                echo "<span>" . $obbligatorio['oggetto'] . "</span>"; 
            } 
            ?> 
        </label> 
        <br/> 
        <label>Messaggio * 
            <br/> 
            <textarea cols="50" rows="10" name="messaggio"/></textarea> 
            <?php 
            if (isset($obbligatorio['messaggio'])) { 
                echo "<span>" . $obbligatorio['messaggio'] . "</span>"; 
            } 
            ?> 
        </label><br/> 
        <input type="checkbox" name="privacy" id="privacy" /checked>Acconsento al...<br/>
 <?php 
        if (isset($obbligatorio['privacy'])) { 
            echo "<span>" . $obbligatorio['privacy'] . "</span>"; 
        } 
?>
        <input type="checkbox" name="termini" id="termini" /checked>Ho letto... <br/> 
 <?php 
    if (isset($obbligatorio['termini'])) { 
    echo "<span>" . $obbligatorio['termini'] . "</span>"; 
        } 
?>

        <input type="reset" name="reset" value="ANNULLA"/> 
        <input type="submit" name="submit" value="INVIA"/> 

</body>
 
Come si può vedere non ho modificato niente, l'email arrivava senza contenuto anche prima.
 
c'è un errore qui
PHP:
${$_POST[$key]} = strip_tags(htmlentities($value));
modifica cosi
PHP:
${$key} = strip_tags(htmlentities($value));
 
Ciao, ho modificato la stringa ma non è cambiato niente, il contenuto dell'email è sempre vuoto :(
 
prova a stampare il messaggio prima di inviarlo
PHP:
var_dump($testo_del_messaggio);
die();
$to = "@@@";
$result = mail($to, $oggetto, $testo_del_messaggio);
 
Mi stampa questo

HTML:
string(49) "Nome: Email: Provincia: Oggetto: Messaggio: "
 
mancano tutti i valori Riposta il codice aggiornato
 
a me funziona per questo di ho chiesto di postare nuovamente il codice magari nelle modifiche che hai fatto hai dimenticato qualcosa
PHP:
<?php
// se hanno premuto il pulsante submit    
if (isset($_POST['submit']) && $_POST['submit'] == "INVIA") {
    // inizializzo campi obbligatori    
    $obbligatorio = array();
    // eliminiamo il post submit     
    unset($_POST['submit']);
    // array check obbligatorie    
    if (!isset($_POST['privacy'])) {
        $obbligatorio['privacy'] = "E' obbligatorio accettare le condizioni sulla privacy";
    }
    if (!isset($_POST['termini'])) {
        $obbligatorio['termini'] = "E' obbligatorio accettare i termini";
    }
    // ciclo del POST    
    foreach ($_POST as $key => $value) {
        // se non è vuoto    
        if (!empty($value)) {
            if ($key == "email") {
                if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
                    $obbligatorio[$key] = "Indirizzo E-mail non valido";
                }
            }
            ${$key} = strip_tags(htmlentities($value));
        } else {
            $obbligatorio[$key] = "\n Il campo $key e' obbligatorio";
        }
    }

    if (count($obbligatorio) == 0) {
        $oggetto = "Prova";
        $testo_del_messaggio = "";
        $testo_del_messaggio.="Nome: $nome\n";
        $testo_del_messaggio.="Email: $email\n";
        $testo_del_messaggio.="Provincia: $provincia\n";
        $testo_del_messaggio.="Oggetto: $oggetto\n";
        $testo_del_messaggio.="Messaggio: $messaggio\n";

        $to = "nome@domino.it";
        $from = $email;
        $fromname = $nome;
        var_dump($testo_del_messaggio);
        die();
        $result = mail($to, $oggetto, $testo_del_messaggio);
        if ($result) {
            echo "<p>Email inviata</p>";
        } else {
            echo " <p>Error.<br>Impossibile inviare l'email.</p>";
        }
    }
}
?> 
<body> 
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"> 

        <label>Nome 
            <input type="text" name="nome" placeholder="Nome e Cognome"/> 
            <?php
            if (isset($obbligatorio['nome'])) {
                echo "<span>" . $obbligatorio['nome'] . "</span>";
            }
            ?> 
        </label> 
        <br/>
        <label>E-mail 
            <input type="text" name="email" placeholder="Indirizzo E-mail valido"/> 
            <?php
            if (isset($obbligatorio['email'])) {
                echo "<span>" . $obbligatorio['email'] . "</span>";
            }
            ?> 
        </label> 
        <br/> 
        <label>Provincia 
            <select name="provincia"> 
                <option value="">Seleziona</option> 
                <option value="VE">VE</option> 
                <option value="MI">MI</option> 
                <option value="PA">PA</option> 
            </select> 
            <?php
            if (isset($obbligatorio['provincia'])) {
                echo "<span>" . $obbligatorio['provincia'] . "</span>";
            }
            ?> 
        </label> 
        <br/>
        <label>Oggetto 
            <select name="oggetto"> 
                <option value="">Seleziona</option> 
                <option value="1">1</option> 
                <option value="2">2</option> 
                <option value="3">3</option> 
            </select> 
            <?php
            if (isset($obbligatorio['oggetto'])) {
                echo "<span>" . $obbligatorio['oggetto'] . "</span>";
            }
            ?> 
        </label> 
        <br/> 
        <label>Messaggio * 
            <br/> 
            <textarea cols="50" rows="10" name="messaggio"/></textarea> 
            <?php
            if (isset($obbligatorio['messaggio'])) {
                echo "<span>" . $obbligatorio['messaggio'] . "</span>";
            }
            ?> 
        </label><br/> 
        <input type="checkbox" name="privacy" id="privacy" checked/>Acconsento al...<br/>
        <?php
        if (isset($obbligatorio['privacy'])) {
            echo "<span>" . $obbligatorio['privacy'] . "</span>";
        }
        ?>
        <input type="checkbox" name="termini" id="termini" checked/>Ho letto... <br/> 
        <?php
        if (isset($obbligatorio['termini'])) {
            echo "<span>" . $obbligatorio['termini'] . "</span>";
        }
        ?>

        <input type="reset" name="reset" value="ANNULLA"/> 
        <input type="submit" name="submit" value="INVIA"/> 

</body>
non saprei cos'altro farti fare
edit
il var_dump di $testo_del_messaggio
Codice:
string(88) "Nome: nome Email: prova@prova.it Provincia: MI Oggetto: Prova Messaggio: testo di prova "
 
Ciao, riposto allora il codice

PHP:
<?php 
// se hanno premuto il pulsante submit    
if (isset($_POST['submit']) && $_POST['submit'] == "INVIA") { 
    // inizializzo campi obbligatori    
    $obbligatorio = array(); 
    // eliminiamo il post submit     
    unset($_POST['submit']); 
    // array check obbligatorie    
    if (!isset($_POST['privacy'])) { 
        $obbligatorio['privacy'] = "E' obbligatorio accettare le condizioni sulla privacy"; 
    } 
    if (!isset($_POST['termini'])) { 
        $obbligatorio['termini'] = "E' obbligatorio accettare i termini"; 
    } 
    // ciclo del POST    
    foreach ($_POST as $key => $value) { 
        // se non è vuoto    
        if (!empty($value)) { 
           if ($key == "email") {
                if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
                    $obbligatorio[$key] = "Indirizzo E-mail non valido";
                }
            } 
                ${key} = strip_tags(htmlentities($value));
        } else {
            $obbligatorio[$key] = "\n Il campo $key e' obbligatorio";
        }
    }

    if (count($obbligatorio) == 0) { 
        $sbj = "Info"; 
        $testo_del_messaggio.="Nome: $nome\n"; 
	$testo_del_messaggio.="Email: $email\n"; 
        $testo_del_messaggio.="Provincia: $provincia\n";
	$testo_del_messaggio.="Oggetto: $oggetto\n"; 
        $testo_del_messaggio.="Messaggio: $messaggio\n"; 
        $to = "@@@"; 
        $from = $email;
	$fromname = $nome; 
        $result = mail($to, $oggetto, $testo_del_messaggio); 
        if ($result) { 
            echo "<p>Email inviata</p>"; 
        } else { 
            echo " <p>Error.<br>Impossibile inviare l'email.</p>"; 
        } 
    } 
} 
?> 
<body> 
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"> 

        <label>Nome 
            <input type="text" name="nome" placeholder="Nome e Cognome"/> 
            <?php 
            if (isset($obbligatorio['nome'])) { 
                echo "<span>" . $obbligatorio['nome'] . "</span>"; 
            } 
            ?> 
        </label> 
        <br/>
<label>E-mail 
            <input type="text" name="email" placeholder="Indirizzo E-mail valido"/> 
            <?php 
            if (isset($obbligatorio['email'])) { 
                echo "<span>" . $obbligatorio['email'] . "</span>"; 
            } 
            ?> 
        </label> 
        <br/> 
        <label>Provincia 
            <select name="provincia"> 
                <option value="">Seleziona</option> 
                <option value="VE">VE</option> 
                <option value="MI">MI</option> 
                <option value="PA">PA</option> 
            </select> 
            <?php 
            if (isset($obbligatorio['provincia'])) { 
                echo "<span>" . $obbligatorio['provincia'] . "</span>"; 
            } 
            ?> 
        </label> 
        <br/>
 <label>Oggetto 
            <select name="oggetto"> 
                <option value="">Seleziona</option> 
                <option value="1">1</option> 
                <option value="2">2</option> 
                <option value="3">3</option> 
            </select> 
            <?php 
            if (isset($obbligatorio['oggetto'])) { 
                echo "<span>" . $obbligatorio['oggetto'] . "</span>"; 
            } 
            ?> 
        </label> 
        <br/> 
        <label>Messaggio * 
            <br/> 
            <textarea cols="50" rows="10" name="messaggio"/></textarea> 
            <?php 
            if (isset($obbligatorio['messaggio'])) { 
                echo "<span>" . $obbligatorio['messaggio'] . "</span>"; 
            } 
            ?> 
        </label><br/> 
        <input type="checkbox" name="privacy" id="privacy" /checked>Acconsento al...<br/>
 <?php 
        if (isset($obbligatorio['privacy'])) { 
            echo "<span>" . $obbligatorio['privacy'] . "</span>"; 
        } 
?>
        <input type="checkbox" name="termini" id="termini" /checked>Ho letto... <br/> 
 <?php 
    if (isset($obbligatorio['termini'])) { 
    echo "<span>" . $obbligatorio['termini'] . "</span>"; 
        } 
?>

        <input type="reset" name="reset" value="ANNULLA"/> 
        <input type="submit" name="submit" value="INVIA"/> 

</body>

Io di differenze non ne trovo e l'email continua ad arrivare senza testo.
 
Non riesco a modificare il post, se utilizzo il tuo codice l'email arriva completa.

Ho notato però che come mittente non prende l'indirizzo email ma riporta la parte finale dell'indirizzo del destinatario, dovrebbe prendersi $email o sbaglio?
 

Discussioni simili