Form:convalidare campi obbligatori....

  • Creatore Discussione Creatore Discussione MAX1972
  • Data di inizio Data di inizio

MAX1972

Nuovo Utente
5 Mag 2012
17
0
1
Ciao a tutti come faccio a convalidare i campi obbligatori del form agendo sul file php questo:

PHP:
<?php
// Recupero il valore dei campi del form
$name = $_POST['name'];
$destinatario = $_POST['destinatario'];
$mittente = $_POST['mittente'];
$oggetto = "Questa Email contiene un allegato";
$messaggio = $_POST['messaggio']. "\n phone: " .$_POST['phone'];  

// 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: " . $mittente;
$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 .= $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!;)
 
Ad esempio per il primo parametro potresti fare così:

PHP:
if( (isset($_POST['name'])) && ($_POST['name']!="") )
{
$name = $_POST['name'];
}else{
echo "Devi inserire il nome";
}

per il mittente invece fai così:

PHP:
if(filter_var($mittente, FILTER_VALIDATE_EMAIL))
  {
  echo "E-mail valida";
  }
else
  {
  echo "E-mail non valida";
  }
 
Ioin un form una volta ho fatto cosi:

PHP:
session_start();
// Recupero il valore dei campi del form
if (empty($_POST['name'])) {
    $_SESSION['messaggi']['name'] = "Il nome è un campo obbligatorio";
}
// mettiamo un minimo di controllo
$name = addslashes($_POST['name']);

Se c'è qualche valore che non mi piace creo una SESSION['messaggi'] con il rispoettivo messaggio

Alla fine dei controlli se ho settato qualche messaggio riporto alla pagina del form

PHP:
// se non sono stati settati messaggi
if (!isset($_SESSION['messaggi'])) {
// Invio la mail
    if (mail($destinatario, $oggetto, $msg, $headers)) {
        echo "<p>Mail inviata con successo!</p>";
    } else {
        echo "<p>Errore!</p>";
    }
} else {
    // ritorni al form
    header("location:form.php");
}

Nella pagina del form, se settata, puoi ciclare la session messaggi con un foreach
e ripulirla subito dopo con

unset($_SESSION['messaggi'])

Mi rendo conto di non essere tanto sano di mente :-)
 
probabilmente sbaglio a piazzare i codici perche' mi apre una pagina di errore...comunque lascio stare i campi obbligatori ci rinuncio...sto perdendo 10 anni di vita con sto form e mi sento esaurito....Lo lascio cosi' com'e'......

devo aprire un nuovo post per chiedere come fare una volta premuto il tasto invio di tornare alla pagina iniziale? ovvero la stessa del form solo che il form e' racchiuso nella pagina contatti.html di conseguenza una volta spedito il messaggio via form e aver visionato il messaggio di spedizione andata a buon fine tornare poi alla pagina contatti di nuovo...grazie...una volta trovato la soluzione a questo passo e chiudo il capitolo form per il resto della vita....Per siti casalinghi e' una funzione assurda un form non serve a nulla ma quando qualcuno si impunta che la vuole bisogna obbedire agli ordini purtroppo:hammer::hammer::hammer::hammer:
 
Perchè non metti il form nello stesso file PHP? Risolveresti in maniera semplice.
Prova a modificare nel seguente modo.
PHP:
<?php
// Recupero il valore dei campi del form
$name = $_POST['name'];
$destinatario = $_POST['destinatario'];
$mittente = $_POST['mittente'];
$oggetto = "Questa Email contiene un allegato";
$messaggio = $_POST['messaggio']. "\n phone: " .$_POST['phone'];  

// 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: " . $mittente;
$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 .= $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;
}

if ((trim($name)=="") OR (trim($destinatario)=="") OR (trim($mittente)=="") OR (trim($oggetto)=="") OR (trim($messaggio)=="")) {
  echo "<form method=\"POST\" enctype=\"multipart/form-data\">";
  echo "<input type="text" name=\"name\" value=\"$name\">";
  echo "<input type="text" name=\"destinatario\" value=\"$destinatario\">";
  echo "<input type="text" name=\"mittente\" value=\"$mittente\">";
  echo "<input type="text" name=\"oggetto\" value=\"$oggetto\">";
  echo "<input type="text" name=\"messaggio\" value=\"$messaggio\">";
  echo "<input type="file" name=\"allegato\" value=\"$allegato\">";
  echo "<input type="submit" value=\"Invia\">";
  echo "</form>";
} else {
  // Invio la mail
  if (mail($destinatario, $oggetto, $msg, $headers))
  {
    echo "<p>Mail inviata con successo!</p>";
  }else{
    echo "<p>Errore!</p>";
  }
}
?>

Ciao
 
Ultima modifica:
mi da errore di sintassi in questa parte dello script....
PHP:
echo "<input type="text" name=\"name\" value=\"$name\">";
  echo "<input type="text" name=\"destinatario\" value=\"$destinatario\">";
  echo "<input type="text" name=\"mittente\" value=\"$mittente\">";
  echo "<input type="text" name=\"oggetto\" value=\"$oggetto\">";
  echo "<input type="text" name=\"messaggio\" value=\"$messaggio\">";
  echo "<input type="file" name=\"allegato\" value=\"$allegato\">";
  echo "<input type="submit" value=\"Invia\">";

fare tutto su pagina php...sono titubante anche perche' io tutto il sito l'ho fatto in html e il form in questione non e' una cosa a se stante ma si integra nella pagina contatti.html di un sito come potrei fare un minestrone del genere?
:crying:
 
Se hai la pagina contatti.html potresti provare a rinominarla contatti.php, prima del codice HTML metti il seguente codice PHP
PHP:
<?php
// Recupero il valore dei campi del form
$name = $_POST['name'];
$destinatario = $_POST['destinatario'];
$mittente = $_POST['mittente'];
$oggetto = "Questa Email contiene un allegato";
$messaggio = $_POST['messaggio']. "\n phone: " .$_POST['phone'];  

// 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: " . $mittente;
$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 .= $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;
}

$errori=""; $form="";
if (($_POST['invia']!="invio") AND ((trim($name)=="") OR (trim($destinatario)=="") OR (trim($mittente)=="") OR (trim($oggetto)=="") OR (trim($messaggio)==""))) {
  $errori="Completa tutti i campi";
}
if (($_POST['invia']!="invio") or ($errori!="")) {
  $form.= "<form method=\"POST\" enctype=\"multipart/form-data\">";
  $form.= "<input type="hidden" name=\"invia\" value=\"invio\">";
  $form.= "<br>Nome:<input type="text" name=\"name\" value=\"$name\">";
  $form.= "<br>Nome:<input type="text" name=\"name\" value=\"$name\">";
  $form.= "<br>Destinatario:<input type="text" name=\"destinatario\" value=\"$destinatario\">";
  $form.= "<br>Mittente:<input type="text" name=\"mittente\" value=\"$mittente\">";
  $form.= "<br>Oggetto:<input type="text" name=\"oggetto\" value=\"$oggetto\">";
  $form.= "<br>Messaggio:<input type="text" name=\"messaggio\" value=\"$messaggio\">";
  $form.= "<br>Allegato:<input type="file" name=\"allegato\" value=\"$allegato\">";
  $form.= "<br><input type="submit" value=\"Invia\">";
  $form.= "</form>";
  $form.= "<br>$errori";
} else {
  // Invio la mail
  if (mail($destinatario, $oggetto, $msg, $headers))
  {
    $form.= "<p>Mail inviata con successo!</p>";
  }else{
    $form.= "<p>Errore!</p>";
  }
}
?>

Poi dove va il form metti
PHP:
<?php echo $form; ?>
 
Ultima modifica:
PHP:
echo "<input type="text" name=\"name\" value=\"$name\">"; 
  echo "<input type="text" name=\"destinatario\" value=\"$destinatario\">"; 
  echo "<input type="text" name=\"mittente\" value=\"$mittente\">"; 
  echo "<input type="text" name=\"oggetto\" value=\"$oggetto\">"; 
  echo "<input type="text" name=\"messaggio\" value=\"$messaggio\">"; 
  echo "<input type="file" name=\"allegato\" value=\"$allegato\">"; 
  echo "<input type="submit" value=\"Invia\">";
gli input type sono dichiarati male interrompi l'echo fai cosi usa la sintassi heredoc:

PHP:
echo <<<INPUT
<input type="text" name="name" value="$name">
  <input type="text" name="destinatario" value="$destinatario">
  <input type="text" name="mittente" value="$mittente"> 
  <input type="text" name="oggetto value="$oggetto">
  <input type="text" name="messaggio" value="$messaggio"> 
  <input type="file" name="allegato" value="$allegato">
 <input type="submit" value="Invia">
INPUT;
 

Discussioni simili