Ottimizzare Form PHP

  • Creatore Discussione Creatore Discussione Lord
  • Data di inizio Data di inizio
Hai perfettamente ragione, mancava il simbolo del dollaro :crying:

Per quanto riguarda l'indirizzo del mittente come mai non si prende $email e mi riporta la parte finale del mio dominio?
 
non riesco a vedere l'errore per l'email del mittente
intanto confronta questo pezzo di codice
PHP:
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>"; 
        } 
    }

con questo
PHP:
 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";
        $result = mail($to, $oggetto, $testo_del_messaggio);
        if ($result) {
            echo "<p>Email inviata</p>";
        } else {
            echo " <p>Error.<br>Impossibile inviare l'email.</p>";
        }
    }
questi non ti servono
PHP:
$from = $email;
$fromname = $nome;
qui o la chiami $sbj
PHP:
$sbj = "Info";
o la chiami $oggetto
PHP:
$result = mail($to, $oggetto ... etc
è corretto inizializzare una valiabile prima di concatenarla con il .
PHP:
$testo_del_messaggio = "";
 
Ho eliminato

PHP:
$testo_del_messaggio = "";

Non mi ero accorto che c'era.

PHP:
$sbj = "Info";

era la parte che volevo modificare nel post precedente che non sono riuscito a modificare, ho utilizzato $oggetto.

Ho eliminato anche
PHP:
$from = $email;
$fromname = $nome;

Il mittente non dovrebbe essere $email?

Ho inserito un nuovo campo non obbligatorio

PHP:
	 <label>Sito Internet
            <input type="text" name="sito" placeholder="http://"/> 
         </label> 
        <br/>

Se non lo compilo l'email non parte/arriva e non mi dà nessuno errore.
 
Ultima modifica:
mi sto confondendo anchio
il mittente sei tu stesso , sei tu che ti spedisci la mail
quello che te la fa distinguere è l'oggetto

sicuramente si puo configurare il mittente a livello server ma non ricordo come
 
Ho inserito un nuovo campo non obbligatorio
sicuro di averlo inserito prima della chiusura del form? </form>
che tra l'altro non vedo nel codice che hai postato
 
Io vorrei che l'email riportasse come mittente l'indirizzo inserito nel form.
Il vecchio form aveva
PHP:
$from = $email;
e funzionava, mentre qui non funziona.

Potrebbe dipendere dall'action?
PHP:
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">

Il campo non obbligatorio l'ho inserito prima della chiusura del form, ho tolto questo controllo

PHP:
<?php
            if (isset($obbligatorio['sito'])) {
                echo "<span>" . $obbligatorio['sito'] . "</span>";
            }
            ?>

per non renderlo obbligatorio ma mi sa che non basta, credo che tutti i campi siano obbligatori a prescindere, purtroppo non so nemmeno dove sta l'errore perchè non mi stampa niente.
 
Ultima modifica:
Ho risolto per il mittente, ho aggiunto

PHP:
$from = "$email"; 
$headers.= "From: $from";
$result = mail($to, $oggetto, $testo_del_messaggio, $headers);

Per il resto ancora niente.
 
Ultima modifica:
non avevo capito che non doveva essere obbligatorio
se è solo uno puoi aggiungere un eccezione nel ciclo
PHP:
} else {
            // se non è il campo sito
            if ($key != "sito") {
                $obbligatorio[$key] = "\n Il campo $key e' obbligatorio";
            }
        }
se i campi non obbligatori sono diversi ti conviene riguardare la fiscussione che ti avevo postato dove si indicano nel ciclo solo quelli obbligatori, sugli altri non verrà effettuato il controllo
 
Il campo non obbligatorio è uno soltanto.

Ho modificato così ma la pagina non si carica.

PHP:
            ${$key} = strip_tags(htmlentities($value));
        } else {
// se non è il campo sito
            if ($key != "sito") {
           $obbligatorio[$key] = "\n Il campo $key e' obbligatorio";
        }
    }

Scusa :crying:
 
ho ricontrollato mi pare corretto
ti posto il ciclo intero
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] = "Indirizzo E-mail non valido";
                }
            }
            ${key} = strip_tags(htmlentities($value));
        } else {
            // se non è il campo sito
            if ($key != "sito") {
                $obbligatorio[$key] = "\n Il campo $key e' obbligatorio";
            }
        }
    }
 
Sto cercando di andare avanti con i controlli, sapete dirmi cosa utilizzare per validare il numero di telefono?
Vorrei che il numero sia:
privo di virgole e punti quindi 166554
abbia minimo 5 caratteri
non permetta di inserire per il numero fisso gli 00 all'inizio ma solo uno 0.

Grazie
 
PHP:
<?php
function verifica_telefono($tel){
	$pat='/^[0-9]{5,20}$/';//verifica che siano numeri minimo 5 max 20
	if(!preg_match($pat,$tel)){
		return false;
	}else{
		if(substr($tel, 0, 2)=="00"){//verifica che non inizi per 00
			return false;
		}else{
			return $tel;
		}
	}
}
//***TEST***
$numero="00123456";
if(verifica_telefono($numero)){
	echo "il numero $numero è un numero valido<br />";
}else{
	echo "<b>il numero $numero NON è un numero valido</b><br />";
}
$numero="01993344";
if(verifica_telefono($numero)){
	echo "il numero $numero è un numero valido<br />";
}else{
	echo "<b>il numero $numero NON è un numero valido</b><br />";
}
$numero="123a456";
if(verifica_telefono($numero)){
	echo "il numero $numero è un numero valido<br />";
}else{
	echo "<b>il numero $numero NON è un numero valido</b><br />";
}
$numero="123";
if(verifica_telefono($numero)){
	echo "il numero $numero è un numero valido<br />";
}else{
	echo "<b>il numero $numero NON è un numero valido</b><br />";
}
?>
 
Ciao, ti ringrazio.
Inserisco il codice ma purtroppo non funziona, non invia l'email, ci sarebbe un qualcosa che mi possa aiutare a capire dove sta l'errore?
 
Ciao, allora ora l'email arriva però i campi sono vuoti. :crying:

Scusate ancora ma non riesco a risolvere questo

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] = "Indirizzo E-mail non valido"; 
                } 
            } 
            ${key} = strip_tags(htmlentities($value)); 
        } else { 
            // se non è il campo sito 
            if ($key != "sito") { 
                $obbligatorio[$key] = "\n Il campo $key e' obbligatorio"; 
            } 
        } 
    }

Se non compilo il campo sito (non è obbligatorio) l'email parte ma arriva con i campi vuoti.
 
Ciao a tutti, sono nuovamente qui, riporto 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 la 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 { 
            // se non è il campo sito 
            if ($key != "sito") { 
                $obbligatorio[$key] = "\n Il campo $key e' obbligatorio"; 
            } 
        } 
    }

    if (count($obbligatorio) == 0) {
        $oggetto = "Prova";
        $testo_del_messaggio.="Nome: $nome\n";
	$testo_del_messaggio.="Città: $città\n";
        $testo_del_messaggio.="Provincia: $provincia\n";
        $testo_del_messaggio.="Telefono: $telefono\n";
        $testo_del_messaggio.="Email: $email\n";
        $testo_del_messaggio.="Sito: $sito\n";
        $testo_del_messaggio.="Oggetto: $oggetto\n";
        $testo_del_messaggio.="Messaggio: $messaggio\n";
        $to = "@@@";
	$from = "$email"; 
	$headers.= "From: $from";
        $result = mail($to, $oggetto, $testo_del_messaggio, $headers);
        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" required="required" />
	    <?php
            if (isset($obbligatorio['nome'])) {
                echo "<span>" . $obbligatorio['nome'] . "</span>";
            }
            ?> 
        </label> 
        <br/>

	 <label>Città
            <input type="text" name="città" placeholder="Città" required="required" /> 
            <?php
            if (isset($obbligatorio['città'])) {
                echo "<span>" . $obbligatorio['città'] . "</span>";
            }
            ?> 
        </label> 
        <br/>

        <label>Provincia 
            <select name="provincia" required="required" /> 
                <option value="">Seleziona</option>
		<option value="1">1</option>	
		<option value="2">2</option>
		<option value="3">3</option>
		<option value="4">4</option>
		<option value="5">5</option>
		<option value="6">6</option>
            </select> 
            <?php
            if (isset($obbligatorio['provincia'])) {
                echo "<span>" . $obbligatorio['provincia'] . "</span>";
            }
            ?> 
        </label> 
        <br/>

	 <label>Telefono
            <input type="text" name="telefono" placeholder="Telefono" required="required" /> 
            <?php
            if (isset($obbligatorio['telefono'])) {
                echo "<span>" . $obbligatorio['telefono'] . "</span>";
            }
            ?> 
        </label> 
        <br/>

        <label>E-mail 
            <input type="text" name="email" placeholder="E-mail" required="required" /> 
            <?php
            if (isset($obbligatorio['email'])) {
                echo "<span>" . $obbligatorio['email'] . "</span>";
            }
            ?> 
        </label> 
        <br/>

	 <label>Sito Internet
            <input type="text" name="sito" placeholder="http://"/> 
         </label> 
        <br/>

	<label>Oggetto 
            <select name="oggetto" required="required" /> 
                <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="5" name="messaggio" required="required"/></textarea><br/>
            <?php
            if (isset($obbligatorio['messaggio'])) {
                echo "<span>" . $obbligatorio['messaggio'] . "</span>";
            }
            ?> 
        </label>
	<br/> 

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

</form>
</body>

Il campo sito non è obbligatorio, se viene o non viene compilato l'email parte ma arriva senza testo.

Grazie
 
qui manca un $
PHP:
${key} = strip_tags(htmlentities($value));
mi sembra che te lo avevo gia corretto
PHP:
${$key} = strip_tags(htmlentities($value));
ho aggiunto questo
PHP:
$sito = $_POST['sito'];
ho tolto $headers che non ti serve e ti ho risistemato le concatenazioni (.=) nel messaggio
fatto questo l'ho testato e la stringa del messaggio è la seguente
Codice:
string 'Nome: fsaf
Città : dsfs
Provincia: 2
Telefono: 23423
Email: [email]d@d.it[/email]
Sito: 
Oggetto: Prova
Messaggio: dsafasd
' (length=108)
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 la 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 {
            // se non è il campo sito 
            if ($key != "sito") {
                $obbligatorio[$key] = "\n Il campo $key e' obbligatorio";
            }
        }
    }

    $sito = $_POST['sito'];

    if (count($obbligatorio) == 0) {
        $oggetto = "Prova";
        $testo_del_messaggio = "Nome: $nome\n";
        $testo_del_messaggio.="Città: $città\n";
        $testo_del_messaggio.="Provincia: $provincia\n";
        $testo_del_messaggio.="Telefono: $telefono\n";
        $testo_del_messaggio.="Email: $email\n";
        $testo_del_messaggio.="Sito: $sito\n";
        $testo_del_messaggio.="Oggetto: $oggetto\n";
        $testo_del_messaggio.="Messaggio: $messaggio\n";
        $to = "@@@";
        $from = "$email";
       
        $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" required="required" />
            <?php
            if (isset($obbligatorio['nome'])) {
                echo "<span>" . $obbligatorio['nome'] . "</span>";
            }
            ?> 
        </label> 
        <br/>

        <label>Città
            <input type="text" name="città" placeholder="Città" required="required" /> 
            <?php
            if (isset($obbligatorio['città'])) {
                echo "<span>" . $obbligatorio['città'] . "</span>";
            }
            ?> 
        </label> 
        <br/>

        <label>Provincia 
            <select name="provincia" required="required" /> 
            <option value="">Seleziona</option>
            <option value="1">1</option>    
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
            <option value="6">6</option>
            </select> 
            <?php
            if (isset($obbligatorio['provincia'])) {
                echo "<span>" . $obbligatorio['provincia'] . "</span>";
            }
            ?> 
        </label> 
        <br/>

        <label>Telefono
            <input type="text" name="telefono" placeholder="Telefono" required="required" /> 
            <?php
            if (isset($obbligatorio['telefono'])) {
                echo "<span>" . $obbligatorio['telefono'] . "</span>";
            }
            ?> 
        </label> 
        <br/>

        <label>E-mail 
            <input type="text" name="email" placeholder="E-mail" required="required" /> 
            <?php
            if (isset($obbligatorio['email'])) {
                echo "<span>" . $obbligatorio['email'] . "</span>";
            }
            ?> 
        </label> 
        <br/>

        <label>Sito Internet
            <input type="text" name="sito" placeholder="http://"/> 
        </label> 
        <br/>

        <label>Oggetto 
            <select name="oggetto" required="required" /> 
            <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="5" name="messaggio" required="required"/></textarea><br/>
            <?php
            if (isset($obbligatorio['messaggio'])) {
                echo "<span>" . $obbligatorio['messaggio'] . "</span>";
            }
            ?> 
        </label>
        <br/> 

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

    </form>
</body>
 
Ciao, grazie, stavo continuamente ricopiando il vecchio codice, dove non c'era

PHP:
${$key} = strip_tags(htmlentities($value));

ho tolto $headers che non ti serve

Questo l'ho lasciato perchè mi serve leggere dall'intestazione chi è il mittente dell'email, senza $headers il mittente sono sempre io.

Il form e l'invio ora funzionano bene, sto vedendo come inserire il controllo sul numero postato da borgoitalia

PHP:
<?php 
function verifica_telefono($tel){ 
    $pat='/^[0-9]{5,20}$/';//verifica che siano numeri minimo 5 max 20 
    if(!preg_match($pat,$tel)){ 
        return false; 
    }else{ 
        if(substr($tel, 0, 2)=="00"){//verifica che non inizi per 00 
            return false; 
        }else{ 
            return $tel; 
        } 
    } 
} 
//***TEST*** 
$numero="00123456"; 
if(verifica_telefono($numero)){ 
    echo "il numero $numero è un numero valido<br />"; 
}else{ 
    echo "<b>il numero $numero NON è un numero valido</b><br />"; 
} 
$numero="01993344"; 
if(verifica_telefono($numero)){ 
    echo "il numero $numero è un numero valido<br />"; 
}else{ 
    echo "<b>il numero $numero NON è un numero valido</b><br />"; 
} 
$numero="123a456"; 
if(verifica_telefono($numero)){ 
    echo "il numero $numero è un numero valido<br />"; 
}else{ 
    echo "<b>il numero $numero NON è un numero valido</b><br />"; 
} 
$numero="123"; 
if(verifica_telefono($numero)){ 
    echo "il numero $numero è un numero valido<br />"; 
}else{ 
    echo "<b>il numero $numero NON è un numero valido</b><br />"; 
} 
?>

Cosa sarebbe $pat?
 

Discussioni simili