Ottimizzare Form PHP

  • Creatore Discussione Creatore Discussione Lord
  • Data di inizio Data di inizio
Ciao, grazie, una funzione simile la posso integrare per fare un controllo sul nome?
Io richiedo Nome e Cognome perciò serve inserire minimo due parole di minimo 3 lettere ciascuna.
Mi confermi che si può fare?

Grazie
 
ciao
prova queste due funzioni
la prima verifica solo una parola, la seconda due parole separate da uno spazio
PHP:
<?php
function verifica_nome($n){//verifica che un testo sia fatto solo di lettere minimo 3
    $pat='/^[a-zA-Z]{3,}$/';
    if(!preg_match($pat,$n)){
        return false;
    }else{
        return $n;
    }
}
//return preg_match("/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/", $num);
function verifica_nome_nome($n){//verifica che un testo sia fatto due parolesolo di lettere minimo 3
    $pat='/^[a-zA-Z]{3,}[ ]{1}[a-zA-Z]{3,}$/';//verifica che siano numeri minimo 5 max 20
    if(!preg_match($pat,$n)){
        return false;
    }else{
        return $n;
    }
}
//**test verifica_nome
$testo= "Pinco";
if(verifica_nome($testo)){
	echo verifica_nome($testo)." nome valido<br />";
}else{
	echo "$testo non è un nome valido<br />";
}
$testo= "Pin9co";
if(verifica_nome($testo)){
	echo verifica_nome($testo)."<br />";
}else{
	echo "$testo non è un nome valido<br />";
}
$testo= "co";
if(verifica_nome($testo)){
	echo verifica_nome($testo)."<br />";
}else{
	echo "$testo non è un nome valido<br />";
}
//**test verifica nome e cognome, solo lettere parole minimo 3 caratteri separate da uno spazio
$testo= "Pinco Pallino";
if(verifica_nome_nome($testo)){
	echo verifica_nome_nome($testo)." nome valido<br />";
}else{
	echo "$testo non è un nome valido<br />";
}
$testo= "PincoPallino";
if(verifica_nome_nome($testo)){
	echo verifica_nome_nome($testo)." nome valido<br />";
}else{
	echo "$testo non è un nome valido<br />";
}
$testo= "Pinco li";
if(verifica_nome_nome($testo)){
	echo verifica_nome_nome($testo)." nome valido<br />";
}else{
	echo "$testo non è un nome valido<br />";
}
$testo= "Pinco Pal8ino";
if(verifica_nome_nome($testo)){
	echo verifica_nome_nome($testo)." nome valido<br />";
}else{
	echo "$testo non è un nome valido<br />";
}
$testo= "Pinco de Pallis";//questo caso non saprei come risolverlo se non in modo arzigogolato
if(verifica_nome_nome($testo)){
	echo verifica_nome_nome($testo)." nome valido<br />";
}else{
	echo "$testo non è un nome valido<br />";
}
?>

p.s.
se vuoi dare un limite massimo (es 40) modifica {3,} in {3,40}
 
Ciao, grazie, mi è venuto un dubbio, nel caso il cognome fosse D'artagnan ci sarebbe un errore, giusto?
Consigli un controllo meno rigido del tipo due parole, la prima minimo 3 caratteri e la seconda minimo 2 inclusi gli apici?
 
ciao
Ciao, grazie, mi è venuto un dubbio, nel caso il cognome fosse D'artagnan ci sarebbe un errore, giusto?
Consigli un controllo meno rigido del tipo due parole, la prima minimo 3 caratteri e la seconda minimo 2 inclusi gli apici?
alla prima: d'artagnan ti da errore
alla seconda non è semplice perche puoi avere diversi casi oltre a d'artagnan come detto "pinco de pallis", in questo caso le parole sono tre, senza considerare eventuali nomi e/o cognomi con caratteri accentati
 
Capito, un sistema tipo minimo 2 parole composte da, la prima con minimo 3 caratteri, la seconda con minimo 1 carattere+eventuale apice e la terza minimo 2 caratteri (senza apici)

I caratteri accentati non sono compresi tra le lettere?
 
Ciao, sono nuovamente qui, ho inserito il controllo sul numero così:

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";
            }
        }
    }

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

    $sito = $_POST['sito'];

//continua continua

Forse sbaglio qualcosa, se scrivo delle lettere nel campo telefono l'email viene inviata e ricevo però il campo in formato numerico.
 
ciao
scusa ma non capisco quello che hai fatto (combinato), intanto nello script che ti avevo postato per il controllo dei numeri quella parte dopo il commento //**test NON dovevi inseririla era solo per farti vedere come funziona la funzione
 
Ciao, ho ricopiato il tuo codice interamente ma la funzione è

PHP:
<?php  
function verifica_telefono($telefono){  
    $pat='/^[0-9]{5,20}$/';//verifica che siano numeri minimo 5 max 20  
    if(!preg_match($pat,$telefono)){  
        return false;  
    }else{  
        if(substr($telefono, 0, 2)=="00"){//verifica che non inizi per 00  
            return false;  
        }else{  
            return $telefono;  
        }  
    }  
} 

?>
devo inserirla nell'altra parte del 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 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";
	$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>

Sbaglio qualcosa?
 
Ultima modifica:

Discussioni simili