Ottimizzare Form PHP

  • Creatore Discussione Creatore Discussione Lord
  • Data di inizio Data di inizio
Ciao,
il codice che hai postato è pieno di errori di sintassi e logica ( non saprei da dove iniziare a correggerlo )
se come ho capito una volta ricevuti i dati li invii via mail , nella discussione che ti ho postato c'è il codice completo che fa proprio quello
al massimo prova a postare il codice funzionante (senza errori) che stai usando adesso
 
Ciao, la prima parte del codice è quella corretta da te, la seconda parte è quella che sto utilizzando.
Il form utilizza anche jquery ma il codice php è questo e l'invio funziona.
Sto rileggendo la discussione postata, nel pomeriggio integro quel codice nel mio, nel frattempo ringrazio per la pazienza.
 
Credo che questo sia il codice completo e funzionante preso dalla discussione aperta da silver73
PHP:
<?php 
// se hanno premuto il pulsante submit  
if (isset($_POST['submit']) && $_POST['submit'] == "submit") { 
    // inizializzo campi obbligatori  
    $obbligatorio = array(); 
    // eliminiamo il post submit   
    unset($_POST['submit']); 
    // array ceck obbligatorie  
    $array_check = array("original", "ethicalCode", "copyright", "charge", "peerReview"); 
    // inizializzo conteggio check  
    $ck = 0; 
    // ciclo array ceck obbligatorie  
    foreach ($array_check as $value) { 
        // se settata   
        if (isset($_POST[$value])) { 
            // incremento  
            $ck++; 
        } 
    } 
    // se non ne trovo neanche una  
    if ($ck < 5) { 
        $obbligatorio[] = "Checkbox obbligatorie"; 
    } 
    // se sceglie no   
    if ($_POST['selfCandidature'] == 'no') { 
        // lo cancelliamo per non verificarlo   
        unset($_POST['expertise']); 
    } 
    // ciclo del POST  
    foreach ($_POST as $key => $value) { 
        // se non è vuoto  
        if (!empty($value)) { 
            // minimo controllo  
            ${$_POST[$key]} = htmlentities($value); 
        } else { 
            $obbligatorio[] = "\nIl campo $key e' obbligatorio"; 
        } 
    } 
    // estensioni ammesse 
    $estensioni = array("doc", "rtf", "txt"); 
    // se vuoto 
    if (empty($_FILES['all']['tmp_name'])) { 
        $obbligatorio[] = "File obbligatorio"; 
    } else { 
        //altrimenti verifichiamo l'estensione 
        // recuperiamo l'esensione 
        $estensionefile = pathinfo($_FILES["all"]["name"], PATHINFO_EXTENSION); 
        // se non è nell array 
        if (!in_array(strtolower($estensionefile), $estensioni)) { 
            $obbligatorio[] = "File non ammesso"; 
        } 
    } 

    if (count($obbligatorio) == 0) { 
        $header = ""; 
        $msg = ""; 
        $boundary = '--' . md5(uniqid(time())); 
        $ctencoding = "8bit"; 
        $subject = "Submission of a new Article"; 
        $testo_del_messaggio = "Title: $title\n"; 
        $testo_del_messaggio.="Name: $name\n"; 
        $testo_del_messaggio.="Surname: $surname\n"; 
        $testo_del_messaggio.="Email: $email\n"; 
        $testo_del_messaggio.="Telephone: $telephone\n"; 
        $testo_del_messaggio.="Fax: $fax\n"; 
        $testo_del_messaggio.="Title of the Article: $titleArticle\n"; 
        $testo_del_messaggio.="Category: $category\n"; 
        $testo_del_messaggio.="Originality of the article: $original\n"; 
        $testo_del_messaggio.="Ethical Code: $ethicalCode\n"; 
        $testo_del_messaggio.="Rules of the copyright: $copyright\n"; 
        $testo_del_messaggio.="Rules of the page charge: $charge\n"; 
        $testo_del_messaggio.="Anonymous peer review: $peerReview\n"; 
        $testo_del_messaggio.="Self Candidature: $selfCandidature\n"; 
        $testo_del_messaggio.="Expertise: $expertise\n"; 
        $to = "daniela.cardillo@gmail.com"; 
        $from = $_POST['email']; 
        $fromname = $_POST['surname']; 
        $ctype = "application/octet-stream"; 
        $basename = $_FILES['all']['tmp_name']; 
        $name = $_FILES['all']['name']; 
        $header.="From: \"$fromname\" <$from>\nReturn-Path: $from\nX-Priority: 3\nTo: $to\n"; 
        $header.="Mime-Version: 1.0\nContent-Type: multipart/mixed;  \n boundary=\"$boundary\"\n"; 
        $header.="Content-Transfer-Encoding: 8bit\n"; 
        $msg .="This is a multi-part message in MIME format.\n--$boundary\n"; 
        $msg .= "Content-Type: text/plain; charset=iso-8859-1\n"; 
        $msg .= "Content-Transfer-Encoding: 8bit\n\n" . $testo_del_messaggio . "\n"; 
        $msg .="--$boundary\nContent-type: $ctype;\n name=\"$name\"\n"; 
        $msg .="Content-Transfer-Encoding: base64\nContent-Disposition: attachment\n filename=\"$name\"\n"; 
        $linesz = filesize($basename) + 1; 
        $fp = fopen($basename, 'r'); 
        $content = chunk_split(base64_encode(fread($fp, $linesz))); 
        fclose($fp); 
        $msg .= chr(13) . chr(10) . $content; 
        $result = @mail($to, $subject, $msg . "\n", $header); 
        if ($result) { 
            echo "<p>Your data and your article have been successfully sent</p> <p>Thank you very much for your contribution!</p>"; 
        } else { 
            echo " <p>Error.<br>Impossible to send the data.</p><p>Try once again.</p>"; 
        } 
    } else { 
        foreach ($obbligatorio as $value) { 
            echo $value . "<br/>"; 
            echo "Torna al form"; 
        } 
    } 
} else { 
    echo "Post non settato, pagina non accessibile"; 
} 
?>

A me non serve che venga caricato il file quindi elimino

PHP:
 // estensioni ammesse 
    $estensioni = array("doc", "rtf", "txt"); 
    // se vuoto 
    if (empty($_FILES['all']['tmp_name'])) { 
        $obbligatorio[] = "File obbligatorio"; 
    } else { 
        //altrimenti verifichiamo l'estensione 
        // recuperiamo l'esensione 
        $estensionefile = pathinfo($_FILES["all"]["name"], PATHINFO_EXTENSION); 
        // se non è nell array 
        if (!in_array(strtolower($estensionefile), $estensioni)) { 
            $obbligatorio[] = "File non ammesso"; 
        }

PHP:
$boundary = '--' . md5(uniqid(time())); 
        $ctencoding = "8bit";
e
PHP:
$basename = $_FILES['all']['tmp_name']; 
        $name = $_FILES['all']['name'];

Se le stringhe da eliminare sono corrette procedo alla modifica aggiungendo i miei campi.

Grazie
 
Ultima modifica:
si ad occhio sono quelle
modifica adatta prova e semmai posta
 
Ciao, ho integrato il codice al mio form in questo modo:

HTML:
<body>
<form name="contatto" enctype="multipart/form-data" method="post" action="invio.php">
<fieldset>
<label for="nome">1</label><a name="nome"></a>
<input  tabindex="1" type="text" name="nome" id="nome" value="" placeholder="1"/><br/>

<label for="azienda">2</label><a name="azienda"></a>
<input  tabindex="2" type="text" name="azienda" id="azienda" value="" placeholder="2" /><br/>

<label for="azienda">3</label><a name="città"></a>
<input  tabindex="3" type="text" name="città" id="città" value="" placeholder="3" /><br/>

<label for="provincia">4</label><a name="provincia"></a>
<select name="provincia" id="provincia" tabindex="4">
<option value=""> Seleziona </option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option></select><br/>
<label for="telefono">5</label><a name="telefono"></a>
<input  tabindex="5" type="text" name="telefono" id="telefono" value="" placeholder="5" /><br/>
<label for="email">6</span></label><a name="email"></a>
<input  tabindex="6" type="email" name="email" id="email" value="" placeholder="6" /><br/>

<label for="oggetto">7</span></label><a name="sito"></a>
<input  tabindex="7" type="sito" name="sito" id="sito" value="" placeholder="http://" /><br/>

<label for="settore">8</span></label><a name="settore"></a>
<select name="settore" id="settore" tabindex="8">
<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></select><br/>

<label for="pubblicità">9</span></label><a name="pubblicità"></a>
<select name="pubblicità" id="pubblicità" tabindex="9">
<option value=""> Seleziona </option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option></select><br/>

<label for="oggetto">Seleziona </span></label><a name="oggetto"></a>
<select name="oggetto" id="oggetto" tabindex="10">
<option value=""> Seleziona </option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option></select><br/>

<label for="messaggio">Messaggio *</label>
<textarea  tabindex="12" cols="50" rows="10" name="messaggio" id="messaggio" placeholder="Messaggio" </textarea><br/>

<input type="checkbox" name="privacy" id="privacy" value="SI"  />Acconsento al...</a><br/>
<input type="checkbox" name="termini" id="termini" value="SI"  />Ho letto... </a><br/>

</fieldset>
<br/>

 <button type="reset">ANNULLA</button>&nbsp;<button type="submit">INVIA</button></form>
</body>

PHP:
<?php 
// se hanno premuto il pulsante submit  
if (isset($_POST['submit']) && $_POST['submit'] == "submit") { 
    // inizializzo campi obbligatori  
    $obbligatorio = array(); 
    // eliminiamo il post submit   
    unset($_POST['submit']); 
    // array ceck obbligatorie  
    $array_check = array("original", "ethicalCode", "copyright", "charge", "peerReview"); 
    // inizializzo conteggio check  
    $ck = 0; 
    // ciclo array ceck obbligatorie  
    foreach ($array_check as $value) { 
        // se settata   
        if (isset($_POST[$value])) { 
            // incremento  
            $ck++; 
        } 
    } 
    // se non ne trovo neanche una  
    if ($ck < 5) { 
        $obbligatorio[] = "Checkbox obbligatorie"; 
    } 
    // se sceglie no   
    if ($_POST['selfCandidature'] == 'no') { 
        // lo cancelliamo per non verificarlo   
        unset($_POST['expertise']); 
    } 
    // ciclo del POST  
    foreach ($_POST as $key => $value) { 
        // se non è vuoto  
        if (!empty($value)) { 
            // minimo controllo  
            ${$_POST[$key]} = htmlentities($value); 
        } else { 
            $obbligatorio[] = "\nIl campo $key e' obbligatorio"; 
        } 
    } 
   
    } 

    if (count($obbligatorio) == 0) { 
        $header = ""; 
        $msg = ""; 
        $boundary = '--' . md5(uniqid(time())); 
        $ctencoding = "8bit"; 
        $subject = "Submission of a new Article"; 
        $testo_del_messaggio = "Title: $title\n"; 
        $testo_del_messaggio.="Name: $name\n"; 
        $testo_del_messaggio.="Surname: $surname\n"; 
        $testo_del_messaggio.="Email: $email\n"; 
        $testo_del_messaggio.="Telephone: $telephone\n"; 
        $testo_del_messaggio.="Fax: $fax\n"; 
        $testo_del_messaggio.="Title of the Article: $titleArticle\n"; 
        $testo_del_messaggio.="Category: $category\n"; 
        $testo_del_messaggio.="Originality of the article: $original\n"; 
        $testo_del_messaggio.="Ethical Code: $ethicalCode\n"; 
        $testo_del_messaggio.="Rules of the copyright: $copyright\n"; 
        $testo_del_messaggio.="Rules of the page charge: $charge\n"; 
        $testo_del_messaggio.="Anonymous peer review: $peerReview\n"; 
        $testo_del_messaggio.="Self Candidature: $selfCandidature\n"; 
        $testo_del_messaggio.="Expertise: $expertise\n"; 
        $to = "i@-it"; 
        $from = $_POST['email']; 
        $fromname = $_POST['surname']; 
        $ctype = "application/octet-stream"; 
       $header.="From: \"$fromname\" <$from>\nReturn-Path: $from\nX-Priority: 3\nTo: $to\n"; 
        $header.="Mime-Version: 1.0\nContent-Type: multipart/mixed;  \n boundary=\"$boundary\"\n"; 
        $header.="Content-Transfer-Encoding: 8bit\n"; 
        $msg .="This is a multi-part message in MIME format.\n--$boundary\n"; 
        $msg .= "Content-Type: text/plain; charset=iso-8859-1\n"; 
        $msg .= "Content-Transfer-Encoding: 8bit\n\n" . $testo_del_messaggio . "\n"; 
        $msg .="--$boundary\nContent-type: $ctype;\n name=\"$name\"\n"; 
        $msg .="Content-Transfer-Encoding: base64\nContent-Disposition: attachment\n filename=\"$name\"\n"; 
        $msg .= chr(13) . chr(10) . $content; 
        $result = @mail($to, $subject, $msg . "\n", $header); 
        if ($result) { 
            echo "<p>Your data and your article have been successfully sent</p> <p>Thank you very much for your contribution!</p>"; 
        } else { 
            echo " <p>Error.<br>Impossible to send the data.</p><p>Try once again.</p>"; 
        } 
    } else { 
        foreach ($obbligatorio as $value) { 
            echo $value . "<br/>"; 
            echo "Torna al form"; 
        } 
    } 
} else { 
    echo "Post non settato, pagina non accessibile"; 
} 
?>

Cliccando su INVIA restituisce l'errore "Post non settato, pagina non accessibile"
Dove sbaglio?
 
qui
HTML:
<button type="submit">INVIA</button>
cambialo con
HTML:
<input type="submit" name="submit" value="submit"/>
altrimenti questa condizione non sarà mai vera
PHP:
if (isset($_POST['submit']) && $_POST['submit'] == "submit") {
 
Ciao, grazie, ho corretto in input e quell'errore è scomparso, comunque il form non funziona.

Ho vari campi obbligatori, tra questi anche quelli nel menu a discesa, poi ho un campo che non è obbligatorio "sito" e due check obbligatorie, se uso questo codice php non c'è il controllo sui campi, dove sbaglio?

Grazie

PHP:
<?php 
// se hanno premuto il pulsante submit  
if (isset($_POST['submit']) && $_POST['submit'] == "submit") { 
    // inizializzo campi obbligatori  
    $obbligatorio = array(); 
    // eliminiamo il post submit   
    unset($_POST['submit']); 
    // array check obbligatorie  
    $array_check = array("original", "ethicalCode", "copyright", "charge", "peerReview"); 
    // inizializzo conteggio check  
    $ck = 0; 
    // ciclo array ceck obbligatorie  
    foreach ($array_check as $value) { 
        // se settata   
        if (isset($_POST[$value])) { 
            // incremento  
            $ck++; 
        } 
    } 
    // se non ne trovo neanche una  
    if ($ck < 5) { 
        $obbligatorio[] = "Checkbox obbligatorie"; 
    } 
    // se sceglie no   
    if ($_POST['selfCandidature'] == 'no') { 
        // lo cancelliamo per non verificarlo   
        unset($_POST['expertise']); 
    } 
    // ciclo del POST  
    foreach ($_POST as $key => $value) { 
        // se non è vuoto  
        if (!empty($value)) { 
            // minimo controllo  
            ${$_POST[$key]} = htmlentities($value); 
        } else { 
            $obbligatorio[] = "\n Il campo $key e' obbligatorio"; 
        } 
    } 
   
    } 

    if (count($obbligatorio) == 0) { 
        $header = ""; 
        $msg = ""; 
        $boundary = '--' . md5(uniqid(time())); 
        $ctencoding = "8bit"; 
        $subject = "Submission of a new Article"; 
        $testo_del_messaggio = "Title: $title\n"; 
        $testo_del_messaggio.="Name: $name\n"; 
        $testo_del_messaggio.="Surname: $surname\n"; 
        $testo_del_messaggio.="Email: $email\n"; 
        $testo_del_messaggio.="Telephone: $telephone\n"; 
        $testo_del_messaggio.="Fax: $fax\n"; 
        $testo_del_messaggio.="Title of the Article: $titleArticle\n"; 
        $testo_del_messaggio.="Category: $category\n"; 
        $testo_del_messaggio.="Originality of the article: $original\n"; 
        $testo_del_messaggio.="Ethical Code: $ethicalCode\n"; 
        $testo_del_messaggio.="Rules of the copyright: $copyright\n"; 
        $testo_del_messaggio.="Rules of the page charge: $charge\n"; 
        $testo_del_messaggio.="Anonymous peer review: $peerReview\n"; 
        $testo_del_messaggio.="Self Candidature: $selfCandidature\n"; 
        $testo_del_messaggio.="Expertise: $expertise\n"; 
        $to = "@@@"; 
        $from = $_POST['email']; 
        $fromname = $_POST['surname']; 
        $ctype = "application/octet-stream"; 
       $header.="From: \"$fromname\" <$from>\nReturn-Path: $from\nX-Priority: 3\nTo: $to\n"; 
        $header.="Mime-Version: 1.0\nContent-Type: multipart/mixed;  \n boundary=\"$boundary\"\n"; 
        $header.="Content-Transfer-Encoding: 8bit\n"; 
        $msg .="This is a multi-part message in MIME format.\n--$boundary\n"; 
        $msg .= "Content-Type: text/plain; charset=iso-8859-1\n"; 
        $msg .= "Content-Transfer-Encoding: 8bit\n\n" . $testo_del_messaggio . "\n"; 
        $msg .="--$boundary\nContent-type: $ctype;\n name=\"$name\"\n"; 
        $msg .="Content-Transfer-Encoding: base64\nContent-Disposition: attachment\n filename=\"$name\"\n"; 
        $msg .= chr(13) . chr(10) . $content; 
        $result = @mail($to, $subject, $msg . "\n", $header); 
        if ($result) { 
            echo "<p>Your data and your article have been successfully sent</p> <p>Thank you very much for your contribution!</p>"; 
        } else { 
            echo " <p>Error.<br>Impossible to send the data.</p><p>Try once again.</p>"; 
        } 
    } else { 
        foreach ($obbligatorio as $value) { 
            echo $value . "<br/>"; 
            echo "Torna al form"; 
        } 
    } 
} else { 
    echo "Post non settato, pagina non accessibile"; 
} 
?>
 
devi modificare questo array
PHP:
$array_check = array("original", "ethicalCode", "copyright", "charge", "peerReview");
inserendo i name dei tuoi campi obbligatori
PHP:
$array_check = array("nome", "settore", "azienda", "telefono");  // ecosi via per tutti i campi che voui siano obbligatori
 
Ciao, nuovamente grazie, nel post precedente avevo copiato il codice vecchio, nel mio mio file php ho inserito i campi obbligatori

PHP:
$array_check = array("nome", "azienda", "città", "provincia", "telefono", "email", "settore", "pubblicità", "oggetto", "messaggio", "privacy", "termini");

Il controllo non funziona e se faccio submit mi restituisce "Errore HTTP 500 (Internal Server Error): Si è verificata una condizione imprevista durante il tentativo del server di soddisfare la richiesta"

Lo stesso errore si presenta se digito nel browser il percorso del file di invio.php
 
Ultima modifica:
L'errore che hai indicato secondo me non si riferisce al codice in esame
forse includi altri file ?
 
Ciao, il form lo sto provando su due pagine in php, in una c'è il form

HTML:
<body>
<form name="contatto" enctype="multipart/form-data" method="post" action="mail.php">

<label for="nome">1</label><a name="nome"></a>
<input  tabindex="1" type="text" name="nome" id="nome" value="" placeholder="1"/><br/>

<label for="azienda">2</label><a name="azienda"></a>
<input  tabindex="2" type="text" name="azienda" id="azienda" value="" placeholder="2" /><br/>

<label for="azienda">3</label><a name="città"></a>
<input  tabindex="3" type="text" name="città" id="città" value="" placeholder="3" /><br/>

<label for="provincia">4</label><a name="provincia"></a>
<select name="provincia" id="provincia" tabindex="4">
<option value=""> Seleziona </option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option></select><br/>

<label for="telefono">5</label><a name="telefono"></a>
<input  tabindex="5" type="text" name="telefono" id="telefono" value="" placeholder="5" /><br/>

<label for="email">6</span></label><a name="email"></a>
<input  tabindex="6" type="email" name="email" id="email" value="" placeholder="6" /><br/>

<label for="sito">7</span></label><a name="sito"></a>
<input  tabindex="7" type="sito" name="sito" id="sito" value="" placeholder="http://" /><br/>

<label for="settore">8</span></label><a name="settore"></a>
<select name="settore" id="settore" tabindex="8">
<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></select><br/>

<label for="pubblicità">9</span></label><a name="pubblicità"></a>
<select name="pubblicità" id="pubblicità" tabindex="9">
<option value=""> Seleziona </option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option></select><br/>

<label for="oggetto">Oggetto </span></label><a name="oggetto"></a>
<select name="oggetto" id="oggetto" tabindex="10">
<option value=""> Seleziona </option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option></select><br/>

<label for="messaggio">Messaggio *</label><br/>
<textarea  tabindex="11" cols="50" rows="10" name="messaggio" id="messaggio" placeholder="Messaggio" /></textarea><br>

<input type="checkbox" name="privacy" id="privacy" value="SI"  checked/>Acconsento al...</a><br/>
<input type="checkbox" name="termini" id="termini" value="SI" checked />Ho letto... </a><br/>

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

</body>

nell'altra c'è il file php

PHP:
<?php  
// se hanno premuto il pulsante submit   
if (isset($_POST['submit']) && $_POST['submit'] == "submit") {  
    // inizializzo campi obbligatori   
    $obbligatorio = array();  
    // eliminiamo il post submit    
    unset($_POST['submit']);  
    // array check obbligatorie   
    $array_check = array("nome", "azienda", "città", "provincia", "telefono", "email", "settore", "pubblicità", "oggetto", "messaggio", "privacy", "termini");  
    // inizializzo conteggio check   
    $ck = 0;  
    // ciclo array ceck obbligatorie   
    foreach ($array_check as $value) {  
        // se settata    
        if (isset($_POST[$value])) {  
            // incremento   
            $ck++;  
        }  
    }  
    // se non ne trovo neanche una   
    if ($ck < 5) {  
        $obbligatorio[] = "Checkbox obbligatorie";  
    }  
    // se sceglie no    
    if ($_POST['selfCandidature'] == 'no') {  
        // lo cancelliamo per non verificarlo    
        unset($_POST['expertise']);  
    }  
    // ciclo del POST   
    foreach ($_POST as $key => $value) {  
        // se non è vuoto   
        if (!empty($value)) {  
            // minimo controllo   
            ${$_POST[$key]} = htmlentities($value);  
        } else {  
            $obbligatorio[] = "\n Il campo $key e' obbligatorio";  
        }  
    }  
    
    }  

    if (count($obbligatorio) == 0) {  
        $header = "";  
        $msg = "";  
        $boundary = '--' . md5(uniqid(time()));  
        $ctencoding = "8bit";  
        $oggetto = "Submission of a new Article";  
        $testo_del_messaggio.="Name: $nome\n";  
        $testo_del_messaggio.="Surname: $azienda\n";  
        $testo_del_messaggio.="Email: $città\n";  
        $testo_del_messaggio.="Telephone: $provincia\n";  
        $testo_del_messaggio.="Fax: $telefono\n";  
        $testo_del_messaggio.="Title of the Article: $email\n";  
        $testo_del_messaggio.="Category: $settore\n";  
        $testo_del_messaggio.="Originality of the article: $pubblicità\n";  
        $testo_del_messaggio.="Ethical Code: $oggetto\n";  
        $testo_del_messaggio.="Rules of the copyright: $messaggio\n";  
        $testo_del_messaggio.="Rules of the page charge: $privacy\n";  
        $testo_del_messaggio.="Anonymous peer review: $termini\n";  
        $to = "mail@.com";  
        $from = $_POST['email'];  
        $fromname = $_POST['azienda'];  
        $ctype = "application/octet-stream";  
       $header.="From: \"$fromname\" <$from>\nReturn-Path: $from\nX-Priority: 3\nTo: $to\n";  
        $header.="Mime-Version: 1.0\nContent-Type: multipart/mixed;  \n boundary=\"$boundary\"\n";  
        $header.="Content-Transfer-Encoding: 8bit\n";  
        $msg .="This is a multi-part message in MIME format.\n--$boundary\n";  
        $msg .= "Content-Type: text/plain; charset=iso-8859-1\n";  
        $msg .= "Content-Transfer-Encoding: 8bit\n\n" . $testo_del_messaggio . "\n";  
        $msg .="--$boundary\nContent-type: $ctype;\n name=\"$nome\"\n";  
        $msg .="Content-Transfer-Encoding: base64\nContent-Disposition: attachment\n filename=\"$name\"\n";  
        $msg .= chr(13) . chr(10) . $content;  
        $result = @mail($to, $subject, $msg . "\n", $header);  
        if ($result) {  
            echo "<p>Your data and your article have been successfully sent</p> <p>Thank you very much for your contribution!</p>";  
        } else {  
            echo " <p>Error.<br>Impossible to send the data.</p><p>Try once again.</p>";  
        }  
    } else {  
        foreach ($obbligatorio as $value) {  
            echo $value . "<br/>";  
            echo "Torna al form";  
        }  
    }  
} else {  
    echo "Post non settato, pagina non accessibile";  
}  
?>

Entrambi i file si trovano nella stessa cartella.
 
Trovato l'errore, c'era una parantesi graffa in più.

Il controllo dei campi ora funziona ma i messaggi di errore si vedono nella pagina di invio, vorrei che si vedessero nella pagina del form, è il caso di aggiungere /required per ogni campo?
 
metti entrmbi i codici in una sola pagina
prima i controlli poi il form in questo modo dovrebbe stamparti gli errori sopra il form
dovrai cambiare la action
 
Ok, l'action dovrebbe puntare #, giusto?

Mi arrivano le email con gli allegati (in realtà non ce ne sono) ho eliminato tutto ciò che riguarda l'upload

PHP:
<?php  
// se hanno premuto il pulsante submit   
if (isset($_POST['submit']) && $_POST['submit'] == "submit") {  
    // inizializzo campi obbligatori   
    $obbligatorio = array();  
    // eliminiamo il post submit    
    unset($_POST['submit']);  
    // array check obbligatorie   
    $array_check = array("nome", "azienda", "città", "provincia", "telefono", "email", "settore", "pubblicità", "oggetto", "messaggio", "privacy", "termini");  
    // inizializzo conteggio check   
    $ck = 0;  
    // ciclo array ceck obbligatorie   
    foreach ($array_check as $value) {  
        // se settata    
        if (isset($_POST[$value])) {  
            // incremento   
            $ck++;  
        }  
    }  
    // se non ne trovo neanche una   
    if ($ck < 5) {  
        $obbligatorio[] = "Checkbox obbligatorie";  
    }  
    // se sceglie no    
   if ($_POST['selfCandidature'] == 'no') {  
        // lo cancelliamo per non verificarlo    
        unset($_POST['expertise']);
    }  
    // ciclo del POST   
    foreach ($_POST as $key => $value) {  
        // se non è vuoto   
        if (!empty($value)) {  
            // minimo controllo   
            ${$_POST[$key]} = htmlentities($value);  
        } else {  
            $obbligatorio[] = "\n Il campo $key e' obbligatorio";  
        }  
    }  
    


    if (count($obbligatorio) == 0) {  
        $header = "";  
        $msg = ""; 
        $oggetto = "Submission of a new Article";  
        $testo_del_messaggio.="Name: $nome\n";  
        $testo_del_messaggio.="Surname: $azienda\n";  
        $testo_del_messaggio.="Email: $città\n";  
        $testo_del_messaggio.="Telephone: $provincia\n";  
        $testo_del_messaggio.="Fax: $telefono\n";  
        $testo_del_messaggio.="Title of the Article: $email\n";  
        $testo_del_messaggio.="Category: $settore\n";  
        $testo_del_messaggio.="Originality of the article: $pubblicità\n";  
        $testo_del_messaggio.="Ethical Code: $oggetto\n";  
        $testo_del_messaggio.="Rules of the copyright: $messaggio\n";  
        $testo_del_messaggio.="Rules of the page charge: $privacy\n";  
        $testo_del_messaggio.="Anonymous peer review: $termini\n";  
        $to = "@.it";  
        $from = $_POST['email'];  
        $fromname = $_POST['azienda'];  
        $ctype = "application/octet-stream";  
        $header.="From: \"$fromname\" <$from>\nReturn-Path: $from\nX-Priority: 3\nTo: $to\n";  
        $header.="Mime-Version: 1.0\nContent-Type: multipart/mixed;  \n boundary=\"$boundary\"\n";  
        $header.="Content-Transfer-Encoding: 8bit\n";  
        $msg .="This is a multi-part message in MIME format.\n--$boundary\n";  
        $msg .= "Content-Type: text/plain; charset=iso-8859-1\n";  
        $msg .= "Content-Transfer-Encoding: 8bit\n\n" . $testo_del_messaggio . "\n";  
        $msg .="--$boundary\nContent-type: $ctype;\n name=\"$nome\"\n";  
        $msg .= chr(13) . chr(10) . $content;
        $result = @mail($to, $oggetto, $msg . "\n", $header);  
        if ($result) {  
            echo "<p>Your data and your article have been successfully sent</p> <p>Thank you very much for your contribution!</p>";  
        } else {  
            echo " <p>Error.<br>Impossible to send the data.</p><p>Try once again.</p>";  
        }  
    } else {  
        foreach ($obbligatorio as $value) {  
            echo $value . "<br/>";  
            echo "Torna al form";  
        }  
    }  
} else {  
    echo "Post non settato, pagina non accessibile";  
}  
?>

Il controllo checkbox non lo capisco, io ne ho due obbligatorie già checked, se non le spunto l'email arriva comunque e l'errore non compare.

Ho provato a mettere i codici un'unica pagina ma i messaggi si vedono in basso, per farli vedere sotto ogni campo serve /required?
 
Ultima modifica:
ora che lo rileggo bisogna adattarlo meglio alle tue esigenze
in questo array ci vanno i name delle check obbligatorie
PHP:
$array_check = array("privacy", "termini");
non dei campi
i campi sono tutti obbligatori in questo script

il controllo dovrai modificarlo cosi
PHP:
$ck = 0;
        // ciclo array ceck obbligatorie   
        foreach ($array_check as $value) {
            // se non settata    
            if (!isset($_POST[$value])) {
                // incremento   
                $ck++;
            }
        }
        // se il contatore è maggior di 0
        if ($ck > 0) {
            $obbligatorio[] = "Checkbox obbligatorie";
        }
il form presenta cmq degli errori di sintassi HTML sistemali

EDIT:
o semplicemente
PHP:
if(!isset($_POST['privacy'])) {
           $obbligatorio['privacy'] = "E' obbligatorio accettare le condizioni sulla privacy";
        }
 
Ultima modifica:
provalo cosi
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['termin'] = "E' obbligatorio accettare i termini";
    }
    // ciclo del POST   
    foreach ($_POST as $key => $value) {
        // se non è vuoto   
        if (!empty($value)) {
            // minimo controllo   
            ${$_POST[$key]} = htmlentities($value);
        } else {
            $obbligatorio[$key] = "\n Il campo $key e' obbligatorio";
        }
    }

    if (count($obbligatorio) == 0) {
        $oggetto = "Oggetto della mail";
        $testo_del_messaggio.="Nome: $nome\n";
        $testo_del_messaggio.="Provincia: $provincia\n";
        $testo_del_messaggio.="Messaggio: $messaggio\n";
        $to = "@.it";
        $from = $email;
        $fromname = $azienda;
        $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"/>
            <?php
            if (isset($obbligatorio['nome'])) {
                echo "<span>" . $obbligatorio['nome'] . "</span>";
            }
            ?>
        </label>
        <br/>
        <label>Provincia
            <select name="provincia">
                <option value=""></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>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/>
        <input type="checkbox" name="termini" id="termini" checked />Ho letto... <br/>

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

</body>
 
Ciao, dici bene, ho utilizzato questo codice perchè me l'avevi consigliato, non credevo che andando avanti mi sarei complicato la vita :D

Scusa mi diresti dove sono gli errori nell'HTML? Ti riferisci ai campi accentati?

Nel php ho visto che tutti i campi sono obbligatori, devo rifare tutto.
 
Con l'ultimo codice il controllo checkbox non funziona, l'email parte ugualmente.
 
ho scritto termin anziche termini
l'ho modificato testato e funziona
 
L'avevo corretto ma non funziona, nè privacy nè termini.

Se tolgo le spunte l'email non parte ma non ricevo nessun errore e nessun messaggio riferito alle checkbox.

Aggiungo che l'email arriva con i campi vuoti.
 
Ultima modifica:

Discussioni simili