Ottimizzare Form PHP

Lord

Utente Attivo
30 Ott 2012
60
0
0
Ciao a tutti, sto cercando di ottimizzare il form dei contatti che implementerò nel mio sito, da premettere che le mie conoscenze sono frutto di varie letture perciò quello che sto per scrivere potrebbe contenere errori tecnici quindi non condannatemi :hammer:

Ho preso un form dalla rete e l'ho modificato in questo modo:

Form HTML
HTML:
<form action="motore.php" method="post" name="contactform" id="contact">

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

<label for="città">Città *</label><a name="città"></a>
<input  tabindex="3" type="text" name="città" id="città" value="" placeholder="Città" required/>

<label for="provincia">Provincia *</label><a name="provincia"></a>
<select name="provincia" id="provincia" tabindex="4">
<option value="">Seleziona </option>
<option value="Milano">Milano</option>
<option value="Roma">Roma</option>
<option value="Altro">Altro</option> required</select>

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

<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> required</select>

<label for="messaggio">Messaggio *</label>
<textarea  tabindex="12" cols="50" rows="10" name="messaggio" id="messaggio" placeholder="Messaggio" required/></textarea>
Motore PHP
PHP:
<?php
include('setup.php');
session_start();

if(isset($_POST['nome']) && $_POST['nome'] !=""
&& isset($_POST['città']) && $_POST['città'] !=""
&& isset($_POST['provincia']) && $_POST['provincia'] !=""
&& isset($_POST['email']) && $_POST['email'] !=""
&& isset($_POST['privacy']) && $_POST['privacy'] == "si"
&& isset($_POST['condizioni']) && $_POST['condizioni'] == "si"
&& isset($_POST['oggetto']) && $_POST['oggetto'] !=""
&& isset($_POST['messaggio']) && $_POST['messaggio'] !=""

{

$nome 		= 	$_POST['nome'];
$città 	 * * * *= 	$_POST['città'];
$provincia 	= 	$_POST['provincia'];
$email 		= 	$_POST['email'];
$privacy * *	= 	$_POST['privacy'];
$condizioni * *= 	$_POST['condizioni'];
$messaggio 	= 	$_POST['messaggio'];
$oggetto 	= 	$_POST['oggetto'];

if($_POST['fred'] != "") {
* * echo('<p style="color: #000; font-size: 25px; font-weight: bold;">Spiacenti....</p>'); * *
}}

else {

$to 	= $mio_indirizzo;

// ometto il resto //
Vorrei sapere se il controllo dei campi è corretto e se conviene anche farlo con javascript.
A presto
 
Ultima modifica di un moderatore:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao
non vedo controllo sui dati : dovresti usare funzioni tipo mysql_real_escape_string() o htmlentities() o altre, per ripulire le stringhe
poi una volta verificati i dati ... non fai niente?

prova a guardare anche questa soluzione

per quanto riguarda i controlli con javascript secondo me servono solo per dare effetto al form ( che cmq non guasta ) ma alla fine quello che conta sono i controlli in php
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
Ciao, vorrei capirci un pò di più ma cosa dovrei fare dopo aver controllato i campi?
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
Ciao, ho letto tutta la discussione linkata in precedenza ma ora sono più confuso di prima.

Il form che ho recuperato da internet utilizza anche jquery e fa un controllo sui campi, vorrei eliminarlo se non è necessario.

Utilizzando solo php e basandomi su quella discussione ho modificato in questo modo:

Il pusante invia nel form html
Codice:
<input type='submit' name='invia' value='Conferma'/>
Ho eliminato dal motore php l'include

Codice:
<?php
session_start();

if(isset($_POST['nome']) && $_POST['nome'] !=""
&& isset($_POST['città']) && $_POST['città'] !=""
&& isset($_POST['provincia']) && $_POST['provincia'] !=""
&& isset($_POST['email']) && $_POST['email'] !=""
&& isset($_POST['privacy']) && $_POST['privacy'] == "si"
&& isset($_POST['condizioni']) && $_POST['condizioni'] == "si"
&& isset($_POST['oggetto']) && $_POST['oggetto'] !=""
&& isset($_POST['messaggio']) && $_POST['messaggio'] !=""

{

$nome = $_POST['nome'];
$città	= $_POST['città'];
$provincia = $_POST['provincia'];
$email = $_POST['email'];
$privacy = 	$_POST['privacy'];
$condizioni = $_POST['condizioni'];
$messaggio	= $_POST['messaggio'];
$oggetto = 	$_POST['oggetto'];

if($_POST['fred'] != "") {
* * echo('<p style="color: #000; font-size: 25px; font-weight: bold;">Spiacenti....</p>'); * *
}}

else {

$to = "mio_indirizzo";
$from = $email;
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
La session non ti serve per ora
non hai chiuso una )
non hai chiuso una }
PHP:
<?php

if (isset($_POST['nome']) && $_POST['nome'] != ""
        && isset($_POST['città']) && $_POST['città'] != ""
        && isset($_POST['provincia']) && $_POST['provincia'] != ""
        && isset($_POST['email']) && $_POST['email'] != ""
        && isset($_POST['privacy']) && $_POST['privacy'] == "si"
        && isset($_POST['condizioni']) && $_POST['condizioni'] == "si"
        && isset($_POST['oggetto']) && $_POST['oggetto'] != ""
        && isset($_POST['messaggio']) && $_POST['messaggio'] != "") { // mancava una parentesi

/*     * ******** AZIONI IN CASO DI SUCCESSO ************** */

    $nome = $_POST['nome'];
    $città = $_POST['città'];
    $provincia = $_POST['provincia'];
    $email = $_POST['email'];
    $privacy = $_POST['privacy'];
    $condizioni = $_POST['condizioni'];
    $messaggio = $_POST['messaggio'];
    $oggetto = $_POST['oggetto'];


    
} else {

    /*     * ******** AZIONI IN CASO DI ERRORE ************** */

}// mancava la chiusura
una volta recuperati e verificati i dati del form cosa ci devi fare?
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
Ciao, grazie per le correzioni, stavo leggendo un'altra discussione sul forum, purtroppo il form che sto utilizzando penso debba essere riprogrammato e non sono in grado di farlo, per esempio manca un controllo sull'email, a me servirebbe che il sistema in tempo reale facesse un controllo sull'esistenza o meno dell'indirizzo inserito, probabilmente è difficile metterlo in pratica.

Per sommi capi, il form di cui ho bisogno dovrebbe:

fare un controllo sui campi obbligatori
fare un controllo sugli input
salvare i dati nel database
inviare anche una mail di risposta automatica
Scusa, come si inserisce sul forum il codice formattato in html? Io uso il bottone code.
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
cosa intendi per controllo dell'esistenza?
a) che esista in quanto l'utente è già registrato?
b) che l'indirizzo sia formalmente corretto?
c) che esista un account con quell'indirizzo?

i punti a) e b) sono facilmente risolvibile il c) è possibile ma non so quanto possa servire


p.s.
per il codice html l'iconcina prima di php quella con <>
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
Ciao, esattamente il punto c) (oltre al punto b) è proprio ciò che mi piacerebbe aggiungere, posso sapere come mai dici che non possa servire?
Per esempio l'indirizzo bingobongo@bongo.bon dovrebbe superare il controllo ma sicuramente si tratta di un indirizzo inesistente, perchè consentire comunque l'invio dell'email?
Il form sarà utilizzato su un sito che offre un servizio b2b per cui vorrei filtrare quasi tutto, un utente che inserisce un indirizzo inesistente è sicuramente poco interessato al servizio. :ilpirata:

Pretendo troppo? :fonzie:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
ho fatto una piccola ricerca su google e mi sono confermato il mio dubbio sulla non validità della verifica
es. ho l'indirizzo pinco_pallo@mio_dominio.it, con la funzione php
checkdnsrr ( string $host [, string $type = "MX" ] )
riesco a controllare se il mio_dominio.it esista o meno, però non è detto che pur esistendo il dominio esista l'indirizzo
pinco_pallo@mio_dominio.it
se al posto di mio_dominio.it mettessi (es) gmail.com l'email risulterebbe valida, gmail.com esiste
da quello che ho trovato per ora è avere una email di conferma il metodo migliore.
ho visto che esistono dei servizi (siti) che fanno quel lavoro, ma qui non so dirti
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
È consigliabile non inviare una risposta automatica?
Nel caso venisse utilizzato un indirizzo esistente ma di un'altra persona, riceverebbe un'email indesiderata con dati riservati.
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Se vuoi filtrare gli utenti che hanno inserito la loro mail puoi inviare un link tramite e-mail.
Con questo link si procede all'attivazione dell'account.
Puoi inserire un controllo che elimina tutti gli utenti che dopo n-giorni dall'iscrizione non hanno ancora attivato l'account.
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
Ciao, il form servirà per richiedere informazioni e prenotazioni, ho un form base che in pratica non utilizza nessun controllo sui dati e non li salva nel database.
Il controllo sulla validità dell'email non è indispensabile.
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
Ciao, io mi riferivo ai dati riservati in un'email indesiderata, voglio dire che l'intestatario dell'indirizzo email riceve un'email che non ha richiesto e al suo interno legge i riferimenti aziendali del sito che offre il servizio oltre a quelli inseriti nei campi del form, questo nel caso venisse inserito un indirizzo email di un'altra persona.
Essendo un servizio b2b il richiedente dovrà inserire nel form, tra gli altri dati, la ragione sociale, il numero di telefono e l'indirizzo email, se si è interessati al servizio i dati inseriti saranno reali, se non si è interessati si utilizza un numero errato o un'email inesistente o di un'altra persona, il modo lo si trova sempre.
Avevo pensato che se a monte ci fosse stato un controllo immediato sulla validità dell'email si sarebbe potuto evitare di ricevere email fasulle del tipo plutopippo@paperino.minny così da scoraggiare gli imbroglioni e allo stesso tempo mantenere pulito il database.

Premesso questo io avrei bisogno di una mano per riadattare il form che ho modificato che è privo di qualsiasi protezione e non l'ho collegato al database.

Grazie a tutti.
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Se non vuoi effettuare un controllo sulla mail, come puoi assicurarsi che quella effettivamente l'indirizzo dell'utente? Può commettere errori nel compilarlo o direttamente inserirne una fasulla, come hai detto tu.
Potresti anche effettuare un controllo sul numero di telefono inviando un messaggio con un codice da inserire per validare/confermare il tutto.
Se vuoi una mano per il form dovresti iniziare postando un po' di codice.
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
Ciao, nella prima parte della discussione ho postato il codice del motore php che ho riadattato.
Ho inserito i controlli su alcuni campi ma non so se sono corretti e se sono utili in quel modo.
Devo rivedere un pò tutto...
Posto tutto il form?
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
Riporto la parte del codice corretta da criric, a seguire il resto del mio codice.
PHP:
<?php

if (isset($_POST['nome']) && $_POST['nome'] != ""
        && isset($_POST['città']) && $_POST['città'] != ""
        && isset($_POST['provincia']) && $_POST['provincia'] != ""
        && isset($_POST['email']) && $_POST['email'] != ""
        && isset($_POST['privacy']) && $_POST['privacy'] == "si"
        && isset($_POST['condizioni']) && $_POST['condizioni'] == "si"
        && isset($_POST['oggetto']) && $_POST['oggetto'] != ""
        && isset($_POST['messaggio']) && $_POST['messaggio'] != "") { // mancava una parentesi

/*     * ******** AZIONI IN CASO DI SUCCESSO ************** */

    $nome = $_POST['nome'];
    $città = $_POST['città'];
    $provincia = $_POST['provincia'];
    $email = $_POST['email'];
    $privacy = $_POST['privacy'];
    $condizioni = $_POST['condizioni'];
    $messaggio = $_POST['messaggio'];
    $oggetto = $_POST['oggetto'];


    
} else {

    /*     * ******** AZIONI IN CASO DI ERRORE ************** */

}// mancava la chiusura

**-MIO CODICE- ** 
//Inizio invio mail al mio indirizzo

$to= $mioindirizzomail;

<html>
<head>
<style type='text/css'>
body{
	font-family:'Lucida Grande', Arial;
	color:#333;
	font-size:15px;
}
</style>
</head>
<body>
<table width='600' border='0' cellspacing='0' cellpadding='5'>

<tr>
<td align='right' valign='baseline'><strong>Referer:</strong></td>
<td>$referer</td>
</tr>

<tr>
<td align='right' valign='baseline'><strong>Data e Ora:</strong></td>
<td>$data - $ora</td>
</tr>

<tr>
<td align='right' valign='baseline'><strong>IP Remoto:</strong></td>
<td>$ip</td>
</tr>

<tr>
<td align='right' valign='baseline'><strong>IP Server:</strong></td>
<td>$ipserver</td>
</tr>

<tr>
<td align='right' valign='baseline'><strong>Browser:</strong></td>
<td>$browser</td>
</tr>

<tr>
<td width='121' align='right' valign='baseline'><strong>Nome e Cognome:</strong></td>
<td width='459'>$nome</td>
</tr>
  
<tr>
<td width='121' align='right' valign='baseline'><strong>Città:</strong></td>
<td width='459'>$città</td>
</tr>

<tr>
<td width='121' align='right' valign='baseline'><strong>Provincia:</strong></td>
<td width='459'>$provincia</td>
</tr>

<tr>
<td align='right' valign='baseline'><strong>Email:</strong></td>
<td>$email</td>
</tr>

<tr>
<td align='right' valign='baseline'><strong>Oggetto:</strong></td>
<td>$oggetto</td>
</tr>

<tr>
<td align='right' valign='baseline'><strong>Privacy:</strong></td>
<td>$privacy</td>
</tr>

<tr>
<td align='right' valign='baseline'><strong>Condizioni:</strong></td>
<td>$condizioni</td>
</tr>

<tr>
<td align='right' valign='baseline'><strong>Messaggio:</strong></td>
<td>$messaggio</td>
</tr>
</table>
</body>
</html>
";

$from = $email;
$headers = 'MIME-Version: 1.0' . "\n";
$headers.= 'Content-type: text/html; charset=iso-8859-1' . "\n"; 
$headers.= "From: $from";

mail($to,$sbj,$msg,$headers); 
//Fine invio mail al mio indirizzo

//Inizio mail autorisposta

$to = $email;
$msgClient = "
<html>
<head>
<style type='text/css'>
body { font-family:'Lucida Grande', Arial; color:#333; font-size:13px;  text-transform: capitalize; }
</style>
</head>
<body>
TESTO
TESTO
</body>
</html>
";
$fromClient = $email;
$sbjClient = " $oggetto " ;
$headersClient = 'MIME-Version: 1.0' . "\r\n";
$headersClient .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headersClient .= "From: $fromClient";

mail($toClient,$sbjClient,$msgClient,$headersClient); 
//Fine mail autorisposta
?>
Questo è tutto il codice php.
 

Lord

Utente Attivo
30 Ott 2012
60
0
0
Buongiorno ragazzi, qualcuno potrebbe indicarmi la strada da seguire?