campi obligatori

  • Creatore Discussione Creatore Discussione monigna
  • Data di inizio Data di inizio

monigna

Nuovo Utente
12 Gen 2010
4
0
0
salve a tutti
non ricordo come poter impostare i campi obbligatori sulla mia form, o meglio sulla pag .php legata alla mia form.

dovrei impostare l'obbligatorietà sui campi mail e cognome.

Codice:
<?php

$all_free = "n";

// Recupero il valore dei campi del form
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$residenza = $_POST['residenza'];
$metri_quadri = $_POST['mq'];
$concessione = $_POST['concessione'];
$finiture = $_POST['finiture'];
$progetto = $_POST['progetto'];
$quando_costruire = $_POST['datacostruzione'];
$dove_costruire = $_POST['paesecostruzione'];
$uso_abitativo = $_POST['uso'];
$altro_uso = $_POST['altrouso'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];
$messaggio = $_POST['messaggio'];

// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];

// Creo 2 variabili che riempirò più avanti...
$headers = "From: " . $mail;
$msg = "";

// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...
if (is_uploaded_file($allegato))
{
  // Apro e leggo il file allegato
  $file = fopen($allegato,'rb');
  $data = fread($file, filesize($allegato));
  fclose($file);

  // Adatto il file al formato MIME base64 usando base64_encode
  $data = chunk_split(base64_encode($data));

  // Genero il "separatore"
  // Serve per dividere, appunto, le varie parti del messaggio.
  // Nel nostro caso separerà la parte testuale dall'allegato
  $semi_rand = md5(time());
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  
  // Aggiungo le intestazioni necessarie per l'allegato
  $headers .= "\nMIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/mixed;\n";
  $headers .= " boundary=\"{$mime_boundary}\"";

  // Definisco il tipo di messaggio (MIME/multi-part)
  $msg .= "This is a multi-part message in MIME format.\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Questa è la parte "testuale" del messaggio
  $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  $msg .= "Content-Transfer-Encoding: 7bit\n\n";
 // $msg .= $nome . $cognome . $messaggio . $residenza . $mq . $concessione . $finiture . $progetto . $datacostruzione . $paesecostruzione . $uso . $altrouso . $mail . $telefono . "\n\n";
 //$msg .= "nome " . $nome . "<BR />cognome " . $cognome . "<BR />messaggio " . $messaggio . " <BR />residenza " .  $residenza . "<BR />mq " . $mq . "<BR />connessione " . $concessione . "<BR />finiture " . $finiture . "<BR />progetto " . $progetto . "<BR />data_costruzione " . $datacostruzione . "<br />paese_costruzione " . $paesecostruzione . "<br />uso " . $uso . "<br />altrouso " . $altrouso . "<br />mail " . $mail . "<br />telefono " . $telefono . "\n\n";
 
  $msg .= "nome " . $nome . "\ncognome " . $cognome .  "\nresidenza " .  $residenza . "\nmq " . $mq . "\nconnessione " . $concessione . "\nfiniture " . $finiture . "\nprogetto " . $progetto . "\ndata_costruzione " . $datacostruzione . "\npaese_costruzione " . $paesecostruzione . "\nuso " . $uso . "\naltrouso " . $altrouso . "\nmail " . $mail . "\ntelefono " . $telefono . "\nmessaggio " . $messaggio . "\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Aggiungo l'allegato al messaggio
  $msg .= "Content-Disposition: attachment;\n";
  $msg .= " filename=\"{$allegato_name}\"\n";
  $msg .= "Content-Transfer-Encoding: base64\n\n";
  $msg .= $data . "\n\n";

  // chiudo con il separatore
  $msg .= "--{$mime_boundary}--\n";
}
else
{
  $msg = $messaggio;
}

// Invio la mail
if (mail($destinatario, $oggetto, $msg, $headers))
{
  echo "<p>Mail inviata con successo!</p>";
}else{
  echo "<p>Errore!</p>";
}
?>

Grazie in anticipo!
 
PHP:
if( (isset($_POST['cognome'])) && ($_POST['cognome']!="") )
{
$cognome = $_POST['cognome'];
}else{
echo "Attenzione: Inserire il cognome";
}
 
grazie mille per la celere risposta.. ho solo una cosa ancora da chiederti...
come mi hai detto te ho impostato i campi obbligatori ma se tipo vado a compilare la form e non immetto il campo ad esempio cognome che ho impostato essere obbligatorio, il messaggio di alert mi compare ma la mail me la invia ugualmente.. che mi sono persa?
 
ciao
basta che tu aggiunga a quello che ha detto eliox il ritorno automatico al form, che potrebbe essere

}else{
echo "Attenzione: Inserire il cognome";
echo "<meta http-equiv='Refresh' content='3; URL=pagina_del_form.php'>";
}
 
salve.. avrei ancora una domanda.. c'è un parametro che posso aggiungere per far comparire nella mia mail l'oggetto della mail preimpostato.. del tipo:
da: compare ora la mail del mittente
oggetto: proposte dal web...

come posso fare?

altra cosa.. ora io per la verifica dei dati ho questo codice:
Codice:
if( (isset($_POST['mq'])) && ($_POST['mq']!="") )
{
$mq = $_POST['mq'];
}else{
echo "Attenzione: Inserire i metri quadri";
echo "<meta http-equiv='Refresh' content='3; URL=landing_case.html'>";
} 
//
if( (isset($_POST['finiture'])) && ($_POST['finiture']!="") )
{
$finiture = $_POST['finiture'];
}else{
echo "Attenzione: Inserire bla bla bla";
echo "<meta http-equiv='Refresh' content='3; URL=landing_case.html'>";
}

ma all'invio della mail ho questo codice che mi da il risultato finale di ok mail andata o mi da l'alert di errore
Codice:
// Invio la mail
if (mail($destinatario, $oggetto, $msg, $headers))
{
  echo "<p>Grazie per averci visitato</p>";
}else{
  echo "<p>Errore!</p>";
}

il problema è che quando l'utente non mi compila un campo mi appare a video sia la richiesta di compilare il campo, sia il ringraziamento per aver compilato la form:
"Attenzione: Inserire il cognome
Grazie per averci visitato"

c'è un modo per far apparire i ringraziamente veramente quando mandano la mail correttamente?
 
ciao
potresti fare così
metti un flag di errore e poi tutti gli if di errore

PHP:
<?php
//.......................
$errori=0;//metto il flag a zero
$messaggio_errore="";
if( (isset($_POST['mq'])) && ($_POST['mq']!="") ){
	$mq = $_POST['mq'];
}else{
	$messaggio_errore="Inserire i metri quadri<br>";
	$errori=1;//metto il flag a 1
} 
if( (isset($_POST['finiture'])) && ($_POST['finiture']!="") ){
	$finiture = $_POST['finiture'];
}else{
	$messaggio_errore.="Inserire bla bla bla<br>";//concateno i vari messaggi
	$errori=1;//metto il flag a 1
}
//altre eventuali verifiche.........................
//verifico se vi sono stati errori
//potrei eliminare il flag verificando se messaggio è vuoto o no
if($errori==1){
	echo "ATTENZIONE:<br>".$messaggio_errore;
	//NOTA: content='3 sono i secondi di attesa prima del refresh
	echo "<meta http-equiv='Refresh' content='3; URL=landing_case.html'>";
}else{// se non ci sono errori spedisco
	if (mail($destinatario, $oggetto, $msg, $headers)){
  		echo "<p>Grazie per averci visitato</p>";
	}else{
  		echo "<p>Errore di trasmissione, riprova più tardi!</p>";
	}
	echo "<meta http-equiv='Refresh' content='3; URL=landing_case.html'>";
}
?>

per quanto riguarda l'altra domanda per far comparire l'email del mittente devi mettere un campo ove
l'utente lo possa scrivere (generalmente obbligatorio)
poi lo prelevi con il soloto $_POST e lo concateni al messaggio
 
o dio scusami.. ma non mi arriva la mail così.. in cosa ho toppato?

PHP:
            <?php

$all_free = "n";

// Recupero il valore dei campi del form
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$residenza = $_POST['residenza'];
$metri_quadri = $_POST['mq'];
$quando_costruire = $_POST['datacostruzione'];
$dove_costruire = $_POST['paesecostruzione'];
$uso_abitativo = $_POST['tipologia'];
$altro_uso = $_POST['altrouso'];
$mail = $_POST['mail'];
$telefono = $_POST['tel'];
$messaggio = $_POST['messaggio'];

// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];

// Creo 2 variabili che riempirò più avanti...
$headers = "From: " . $mail;
$msg = "";

// verifico dei dati obligatori
$errori=0;//metto il flag a zero 
$messaggio_errore=""; 
if( (isset($_POST['cognome'])) && ($_POST['cognome']!="") ){ 
    $cognome = $_POST['cognome']; 
}else{ 
    $messaggio_errore="compilare il campo COGNOME<br>"; 
    $errori=1;//metto il flag a 1 
}  
if( (isset($_POST['mq'])) && ($_POST['mq']!="") ){ 
    $cognome = $_POST['mq']; 
}else{ 
    $messaggio_errore="compilare il campo METRI QUADRI<br>"; 
    $errori=1;//metto il flag a 1 
}  
if( (isset($_POST['tipologia'])) && ($_POST['tipologia']!="") ){ 
    $uso_abitativo = $_POST['tipologia']; 
}else{ 
    $messaggio_errore.="definire la TIPOLOGIA DI COPERTURA<br>";//concateno i vari messaggi 
    $errori=1;//metto il flag a 1 
} 
//altre eventuali verifiche......................... 
//verifico se vi sono stati errori 
//potrei eliminare il flag verificando se messaggio è vuoto o no 
if($errori==1){ 
    echo "ATTENZIONE:<br>".$messaggio_errore; 
    //NOTA: content='3 sono i secondi di attesa prima del refresh 
    echo "<meta http-equiv='Refresh' content='3; URL=landing_tetti.html'>"; 
}else{// se non ci sono errori spedisco 
    if (mail($destinatario, $oggetto, $msg, $headers)){ 
          echo "<p>Grazie per averci visitato</p>"; 
    }else{ 
          echo "<p>Errore di trasmissione, riprova più tardi!</p>"; 
    } 
    echo "<meta http-equiv='Refresh' content='3; URL=landing_tetti.html'>"; 
}


// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...
if (is_uploaded_file($allegato))
{
  // Apro e leggo il file allegato
  $file = fopen($allegato,'rb');
  $data = fread($file, filesize($allegato));
  fclose($file);

  // Adatto il file al formato MIME base64 usando base64_encode
  $data = chunk_split(base64_encode($data));

  // Genero il "separatore"
  // Serve per dividere, appunto, le varie parti del messaggio.
  // Nel nostro caso separerà la parte testuale dall'allegato
  $semi_rand = md5(time());
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  
  // Aggiungo le intestazioni necessarie per l'allegato
  $headers .= "\nMIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/mixed;\n";
  $headers .= " boundary=\"{$mime_boundary}\"";

  // Definisco il tipo di messaggio (MIME/multi-part)
  $msg .= "This is a multi-part message in MIME format.\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Questa è la parte "testuale" del messaggio
  $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  $msg .= "Content-Transfer-Encoding: 7bit\n\n";
  $msg .= "nome " . $nome . "\ncognome " . $cognome .  "\nresidenza " .  $residenza . "\nmq " . $mq .  "\ndata_costruzione " . $datacostruzione . "\npaese_costruzione " . $paesecostruzione . "\ntipologia " . $tipologia . "\naltrouso " . $altrouso . "\nmail " . $mail . "\ntelefono " . $telefono . "\nmessaggio " . $messaggio . "\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Aggiungo l'allegato al messaggio
  $msg .= "Content-Disposition: attachment;\n";
  $msg .= " filename=\"{$allegato_name}\"\n";
  $msg .= "Content-Transfer-Encoding: base64\n\n";
  $msg .= $data . "\n\n";

  // chiudo con il separatore
  $msg .= "--{$mime_boundary}--\n";
}
else
{
  $msg = $messaggio;
}

?>
 
Ti do anche un altro consiglio se lo vuoi, non fare mai una cosa del genere:
PHP:
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$residenza = $_POST['residenza'];
$metri_quadri = $_POST['mq'];
$quando_costruire = $_POST['datacostruzione'];
$dove_costruire = $_POST['paesecostruzione'];
$uso_abitativo = $_POST['tipologia'];
$altro_uso = $_POST['altrouso'];
$mail = $_POST['mail'];
$telefono = $_POST['tel'];
$messaggio = $_POST['messaggio'];

// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];

Ovvero non prendere mai i dati direttamente da POST o GET senza averli filtrati, il PHP è un linguaggio molto insicuro in questi frangenti perché passa qualsiasi schifezza immetti nel form, quindi anche script di programmazione o query di database ad esempio.
La prassi in questi casi è sempre di filtrare i dati anteponendo alla variabile $_POST una funzione di filtro come html_entity_decode() ad esempio che trasforma tutti i possibili tag in entità.
Oppure usare i filtri che è molto meglio ma di difficile comprensione.
 
ciao
due cose
o dio scusami.. ma non mi arriva la mail così.. in cosa ho toppato?
(se non ho visto male)la preparazione del messaggio ecc.. devi metterla prima di inviare l'email (comunque verifico poi ti so dire)

marcograzia ha detto una cosa sacrosanta
 

Discussioni simili