Ottimizzare Form PHP

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
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.
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
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 = "[email protected]"; 
        $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:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
si ad occhio sono quelle
modifica adatta prova e semmai posta
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
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?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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") {
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
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"; 
} 
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
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:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
L'errore che hai indicato secondo me non si riferisce al codice in esame
forse includi altri file ?
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
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 = "[email protected]";  
        $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.
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
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?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
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:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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>
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
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.
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
Con l'ultimo codice il controllo checkbox non funziona, l'email parte ugualmente.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ho scritto termin anziche termini
l'ho modificato testato e funziona
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
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
Autore Titolo Forum Risposte Data
C [HTML] come ottimizzare sito web per dispositivi mobili HTML e CSS 2
A [risolto] Ottimizzare salvataggio dati MySQL 4
A Ottimizzare di più JOIN su tabella/e da 25.000 records MySQL 0
A ottimizzare sito per risoluzione 1024x768 Webdesign e Grafica 0
S Come ottimizzare il mio sito PHP? Troppe query... PHP 1
novello88 [MySQL] OPTIMIZE TABLE (ottimizzare una tabella di MySQL) MySQL 0
G ottimizzare velocemente un immagine per il web?? Windows e Software 1
T ottimizzare codice PHP 2
M Come posso ottimizzare il posizionamento su Google SEO e Posizionamento 1
S consiglio per ottimizzare copia dati fra diversi DB Database 0
M Ottimizzare la pagina HTML e CSS 1
WorldWideWeb Ottimizzare il sito x motori di ricerca Webdesign e Grafica 6
E Ottimizzare una query PHP 1
D Ottimizzare il sito per le diverse risoluzioni HTML e CSS 0
O Ottimizzare Spacash Presenta il tuo Sito 0
L Come ottimizzare la visione del mio sito? HTML e CSS 1
I Ottimizzare BIOS per ASUS A7V600 Hardware 0
S passare un valore da un form a un file .php con metodo post PHP 4
K Form che manda dati doppi PHP 1
K Problema form update PHP 2
Elisacau [Contact form 7] Inserire Numero auto incrementante WordPress 1
K form Inserimento record mysql PHP 2
I Form con selettore HTML e CSS 0
K [php]form invio dati PHP 0
G form invio multiplo con checkbox PHP 12
nivaria.achinet Intercettare form solo dopo invio Javascript 1
D Form contatti non funzionante HTML e CSS 0
A Stampare dati da form PHP 15
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
I Form HTML e CSS 17
otto9due $_FILE non passa i dati dal form PHP 1
M Form: come tornare ai campi già compilati dopo invio PHP 1
G Invio form con PHP PHP 3
felino Form action costum e parametri in queryString WordPress 1
M Come recuperare molteplici input form PHP 1
M Collegamento tra form html e script php PHP 4
L form immagini per il database PHP 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
L inserimento form dati multipli ? PHP 0
L Problemi form Pagina php HTML e CSS 3
Cosina Creare bottone delete in form upload PHP 5
Cosina Creare bottone delete in form upload PHP 1
D Devo far funzionare un form di contatti PHP 4
B form gestione input PHP 2
V PHP form intersecate PHP 0
8 Javascript - PDF Form Javascript 0
J Form inserimento dati in database Ajax 1
E Gestione profilo utente tramite Form PHP 3
R [C#] Form principale si blocca mentre un altro Thread lavora .NET Framework 0

Discussioni simili