Aller au contenu

Envoi de formulaire


Nabiot

Sujets conseillés

Bonjour,

Je dispose d'un code php me permetttant d'envoyer par email les informations remplies par nos visiteurs sur un formulaire en html. L'envoi des informations se fait grace a la page action.php dont le code est le suivant :

CODE
<?php

$idFormulaire = '-- WEBSITE -- ENG --'; //objet du mail

$to = 'webmaster_AT_domaine.com'; //destinataires du mail

$location = 'formulaire.htm'; //page de reroutage page pour remerciement

$body = "CONTENT: \n\n";

foreach ($_POST as $variable => $value) {

$body .= $variable . ' -> ' . $value . "\n\n";

}

$body .= "\nEND\n\n Date - " . strftime("%c") . "\n";

$subject = $idFormulaire;

$headers = "From: WEBSITE";

_AT_mail($to, $subject, $body, $headers);

header('location: ' . $location);

foreach($bad_strings as $bad_string) {

if(eregi($bad_string, strtolower($str_to_test))) {

echo "$bad_string found. Suspected injection attempt - mail not being sent.";

exit;

}

}

function contains_newlines($str_to_test) {

if(preg_match("/(%0A|%0D|\\n+|\\r+)/i", $str_to_test) != 0) {

echo "newline found in $str_to_test. Suspected injection attempt - mail not being sent.";

exit;

}

}

?>

voici une partie du code html :

<form method="POST" action="action.php" name="info" onSubmit="MM_validateForm('contact','','R','phone','','NisNum','email','','RisEmail','company','','R');return document.MM_returnValue">
<input type="hidden" name="TYPE" value="INFO">
....
<td width="377" valign="baseline"><input type="radio" name="salutation" value="Mr">
...
<input type="text" name="phone" size="30" maxlength="30" >

Le probleme est que parfois, le formulaire est envoye vide. lorsque je recoit le mail, les informations du formulaire y sont absentes.

Voici un email "vide" type :

CONTENT: 


END

Date - 05/16/08 21:06:41

Avez une idee sur l'origine du probleme ? Un debut de reponse ? Une piste a suivre ?

Si vous en avez, n'hesitez a m'en faire part svp parce que je ne sais pas du tout d'ou ca peut provenir.

Merci d'avance et desole pour le manque d'accent... je ne les ai pas trouves sur les qwerty ;)

Nabiot

Lien vers le commentaire
Partager sur d’autres sites

Hum non desole, trop facile ! 3 champs sont obligatoires. Voici le mail recu qd on remplit juste ces 3 champs :

CONTENT: 

TYPE -> INFO
contact -> Guillaume
title ->
phone ->
email -> me_AT_ou.com
company -> One More test
Country -> -Select your country-
remarks ->
Submit -> Submit

END
Date - 06/17/08 06:42:15

Les tests pour verifier que les champs sont corrects sont effectue par ce script sur la page formulaire.htm :

CODE
<script type="text/JavaScript">

<!--

function MM_findObj(n, d) { //v4.01

var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {

d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}

if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];

for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);

if(!x && d.getElementById) x=d.getElementById(n); return x;

}

function MM_validateForm() { //v4.0

var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;

for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args);

if (val) { nm=val.name; if ((val=val.value)!="") {

if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');

if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';

} else if (test!='R') { num = parseFloat(val);

if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';

if (test.indexOf('inRange') != -1) { p=test.indexOf(':');

min=test.substring(8,p); max=test.substring(p+1);

if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';

} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }

} if (errors) alert('The following error(s) occurred:\n'+errors);

document.MM_returnValue = (errors == '');

}

function MM_showHideLayers() { //v9.0

var i,p,v,obj,args=MM_showHideLayers.arguments;

for (i=0; i<(args.length-2); i+=3)

with (document) if (getElementById && ((obj=getElementById(args))!=null)) { v=args[i+2];

if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }

obj.visibility=v; }

}

//-->

</script>

desole pour le manque de precisions du premier post. je ne sais ce qu'il faut comme renseignements supplementaires

Lien vers le commentaire
Partager sur d’autres sites

je reprecise cela dit que les formulaires qui me sont envoyes par ce biais fonctionnent bien la plupart du temps, mais environ un tiers des formulaires arrivent vides, ce qui est assez penalisant pour un site professionnel ayant pour but d'attirer des contacts...

Est ce du a une certaine configuration au niveau du visiteur du site ? Mes tests en local fonctionnent bien, mais je recois de tps en tps des prises de contacts vides des visiteurs du sites...

Lien vers le commentaire
Partager sur d’autres sites

C'est un test en Javascript, donc un robot spammeur ou autre ne passe pas par ce test (de même qu'un internaute qui l'aurait désactivé).

Il faut tester si les champs sont remplis en PHP, dans la page suivante. Il y a des vestiges ($bad_string par exemple), mais comme on a pas le code complet on en sait pas d'où vient le problème...

Lien vers le commentaire
Partager sur d’autres sites

voici les codes complets :

Pour le formulaire.htm

CODE

#####La partie scripts dans le <head>

<script type="text/JavaScript">

<!--

function MM_findObj(n, d) { //v4.01

var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {

d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}

if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];

for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);

if(!x && d.getElementById) x=d.getElementById(n); return x;

}

function MM_validateForm() { //v4.0

var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;

for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args);

if (val) { nm=val.name; if ((val=val.value)!="") {

if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');

if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';

} else if (test!='R') { num = parseFloat(val);

if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';

if (test.indexOf('inRange') != -1) { p=test.indexOf(':');

min=test.substring(8,p); max=test.substring(p+1);

if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';

} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }

} if (errors) alert('The following error(s) occurred:\n'+errors);

document.MM_returnValue = (errors == '');

}

function MM_showHideLayers() { //v9.0

var i,p,v,obj,args=MM_showHideLayers.arguments;

for (i=0; i<(args.length-2); i+=3)

with (document) if (getElementById && ((obj=getElementById(args))!=null)) { v=args[i+2];

if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }

obj.visibility=v; }

}

//-->

</script>

<script src="../quality_control_assembling_china/scripts/AC_RunActiveContent.js" type="text/javascript"></script

#####la partie formulaire

<td valign="top"><form method="POST" action="action.php" name="info"

onSubmit="MM_validateForm('contact','','R','phone','', 'NisNum','email','','RisEmail','company','','R');

return document.MM_returnValue">

<input type="hidden" name="TYPE" value="INFO">

<table width="480" border="0" cellpadding="3" cellspacing="0" class="fonts01">

<tr>

<tr>

<td> </td>

</tr>

<tr>

<td><strong>Would you like us to call you ?</strong>

Clic here for an <a href="call.htm" class="link07">

<strong>IMMEDIATE CALL REQUEST</strong></a></td>

</tr>

<tr>

<td> </td>

</tr>

<td colspan="2" valign="top"><table width="480" border="0" cellpadding="3" cellspacing="1">

Please complete the form below and we will answer you <strong>as soon as possible.</strong>

<br>

<i>* denotes required information.</i>

<tr>

<td> </td>

</tr>

<tr>

<td width="92" align="right">Salutation</td>

<td width="377" valign="baseline"><input type="radio" name="salutation" value="Mr">

Mr.

<input type="radio" name="Salutation" value="Ms">

Ms.

<input type="radio" name="Salutation" value="Mrs" >

Mrs. </td>

</tr>

<tr>

<td align="right"><span class="formFont02"><strong>*</strong></span>Name</td>

<td valign="baseline"><input type="text" name="contact" size="30" maxlength="50"></td>

</tr>

<tr>

<td align="right">Job Title</td>

<td valign="baseline"><input type="text" name="title" size="30" maxlength="30" ></td> </td>

</tr>

<tr>

<td align="right">Telephone</td>

<td valign="baseline"><input type="text" name="phone" size="30" maxlength="30" ></td>

</tr>

<tr>

<td align="right"><span class="formFont02"><strong>*</strong></span>E-mail</td>

<td valign="baseline"><input type="text" name="email" size="30" maxlength="60" ></td>

</tr>

<tr>

<td colspan="2" valign="top"><table width="480" border="0" cellpadding="3" cellspacing="1">

<tr>

<td width="92" align="right"><span class="formFont02"><strong>*</strong></span>Company</td>

<td width="377" valign="baseline"><input type="text" name="company" size="30" maxlength="50" ></td>

</tr>

<tr>

<td align="right"><span class="formFont02"></span>Country</td>

<td valign="baseline"><select name="Country" class="fonts01">

<option selected="selected">-Select your country- </option>

<option value="Afghanistan">Afghanistan</option>

...

<option value="Zimbabwe">Zimbabwe </option>

</select></td>

</tr>

<tr>

<td align="right"><span class="formFont02"></span>Message</td>

<td valign="top">

<div valign="left">

<textarea name="remarks" wrap="VIRTUAL" cols="40" rows="5"></textarea>

</div>

</td>

</tr>

<tr>

<td colspan="2" align="center" valign="top"><input name="Submit" type="submit" id="Submit" value="Submit" >

<input name="Reset" type="reset" id="Reset" value="Reset" ></td>

</tr>

</table></td>

</tr>

</table></table></td>

</form></td>

Je vous rassure ####xxx sont des commentaires que je viens de rajouter sur le post...

Voici le AC_RunActiveContent.js

CODE
//v1.0

//Copyright 2006 Adobe Systems, Inc. All rights reserved.

function AC_AddExtension(src, ext)

{

if (src.indexOf('?') != -1)

return src.replace(/\?/, ext+'?');

else

return src + ext;

}

function AC_Generateobj(objAttrs, params, embedAttrs)

{

var str = '<object ';

for (var i in objAttrs)

str += i + '="' + objAttrs + '" ';

str += '>';

for (var i in params)

str += '<param name="' + i + '" value="' + params + '" /> ';

str += '<embed ';

for (var i in embedAttrs)

str += i + '="' + embedAttrs + '" ';

str += ' ></embed></object>';

document.write(str);

}

function AC_FL_RunContent(){

var ret =

AC_GetArgs

( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"

, "application/x-shockwave-flash"

);

AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);

}

function AC_SW_RunContent(){

var ret =

AC_GetArgs

( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"

, null

);

AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);

}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){

var ret = new Object();

ret.embedAttrs = new Object();

ret.params = new Object();

ret.objAttrs = new Object();

for (var i=0; i < args.length; i=i+2){

var currArg = args.toLowerCase();

switch (currArg){

case "classid":

break;

case "pluginspage":

ret.embedAttrs[args] = args[i+1];

break;

case "src":

case "movie":

args[i+1] = AC_AddExtension(args[i+1], ext);

ret.embedAttrs["src"] = args[i+1];

ret.params[srcParamName] = args[i+1];

break;

case "onafterupdate":

case "onbeforeupdate":

case "onblur":

case "oncellchange":

case "onclick":

case "ondblClick":

case "ondrag":

case "ondragend":

case "ondragenter":

case "ondragleave":

case "ondragover":

case "ondrop":

case "onfinish":

case "onfocus":

case "onhelp":

case "onmousedown":

case "onmouseup":

case "onmouseover":

case "onmousemove":

case "onmouseout":

case "onkeypress":

case "onkeydown":

case "onkeyup":

case "onload":

case "onlosecapture":

case "onpropertychange":

case "onreadystatechange":

case "onrowsdelete":

case "onrowenter":

case "onrowexit":

case "onrowsinserted":

case "onstart":

case "onscroll":

case "onbeforeeditfocus":

case "onactivate":

case "onbeforedeactivate":

case "ondeactivate":

case "type":

case "codebase":

ret.objAttrs[args] = args[i+1];

break;

case "width":

case "height":

case "align":

case "vspace":

case "hspace":

case "class":

case "title":

case "accesskey":

case "name":

case "id":

case "tabindex":

ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1];

break;

default:

ret.embedAttrs[args] = ret.params[args] = args[i+1];

}

}

ret.objAttrs["classid"] = classid;

if (mimeType) ret.embedAttrs["type"] = mimeType;

return ret;

}

voici la page action.php pour envoye le formulaire

CODE
<?php

$idFormulaire = '-- WEBSITE -- ENG --'; //objet du mail

$to = 'guillaume_AT_asiapack.com, sales_AT_asiapack.com, webmaster_AT_asiapack.com'; //destinataires du mail

$location = 'thankyou1.htm'; //page de reroutage page pour remerciement

$body = "CONTENT: \n\n";

foreach ($_POST as $variable => $value) {

$body .= $variable . ' -> ' . $value . "\n\n";

}

$body .= "\nEND\n\n Date - " . strftime("%c") . "\n";

$subject = $idFormulaire;

$headers = "From: WEBSITE";

_AT_mail($to, $subject, $body, $headers);

header('location: ' . $location);

foreach($bad_strings as $bad_string) {

if(eregi($bad_string, strtolower($str_to_test))) {

echo "$bad_string found. Suspected injection attempt - mail not being sent.";

exit;

}

}

function contains_newlines($str_to_test) {

if(preg_match("/(%0A|%0D|\\n+|\\r+)/i", $str_to_test) != 0) {

echo "newline found in $str_to_test. Suspected injection attempt - mail not being sent.";

exit;

}

}

?>

Cette page action.php m'a ete fournie par un ami qui m'a dit avoir le mm probleme mais ne pas savoir d'ou cela provient.

j'ajoute que je suis un boulet en javascript... :(

merci de votre aide !

Lien vers le commentaire
Partager sur d’autres sites

Je confirme ce que j'ai dit : les contrôles sont en Javascript, donc si pas de javascript (robots), pas de tests.

Les tests en PHP ne semblent pas complet ($str_to_test jamais utilisée)

Quant au fichier AC_RunActiveContent.js, aucun rapport avec la choucroute, c'est pour le flash dans IE7.

Lien vers le commentaire
Partager sur d’autres sites

Pour resumer :

Le robot qui confirme depuis la page de formulaire n'est pas la cause car le mail recu devrait etre

CONTENT:

TYPE -> INFO
contact ->
title ->
phone ->
email ->
company ->
Country -> -Select your country-
remarks ->
Submit -> Submit

END

Mais par contre l'envoi du formulaire vient du fait qu'un visiteur, robot probablement, passe sur la page action.php directement, sans etre passe par une page de formulaire, d'ou le fait que le mail recu est totalement vide. Pas de champs transmis par la page precedente....

CONTENT:

END

Ok, la solution n'est finalement pas tres difficile, encore merci de vous etre penche sur mon cas...

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...