11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,
après avoir crée un formulaire de contact en php, je me suis rendu compte que les champs que je voulais obligatoires ne l'étaient pas...
J'aimerais savoir si vous voyez d'où celà peut venir svp :

<?php

$email_dest = "monmail@mail.com";

if ($_POST['envoi']) {

$message_remerciement = "Votre demande a bien été prise en compte. Le commercial s\'occupant de votre secteur vous contactera prochainement.";

// E-mail headers:
$headers ="MIME-Version: 1.0 \n";
$headers .="From: monmail@mail.com \n";
$headers .="Content-Type: text/html; charset=iso-8859-1 \n";

$subject = "Demande de catalogue";

$partie_entete = "<html><head>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>
</head>
<body bgcolor=#FFFFFF>";

for ($a=1; $a<= $_POST['nbre_champs_texte']; $a++) {
$partie_champs_texte .= "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_champ'.$a] . " = " . $_POST['champ'.$a] . "</font><br>";
}

if ($_POST['nbre_zone_email'] != 0) {
$partie_zone_email = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_email'] . " = " . $_POST['zone_email'] . "</font><br>";
}

if ($_POST['nbre_zones_texte'] != 0) {
$partie_zone_texte = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_zone'] . " = " . $_POST['zone_texte'] . "</font><br>";
$partie_zone_texte = stripslashes($partie_zone_texte);
}

$fin = "</body></html>";

$sortie = $partie_entete . $partie_champs_texte . $partie_zone_email . $partie_zone_texte . $fin;

// Send the e-mail
if (@!mail($email_dest,$subject,$sortie,$headers)) {
echo("Envoi du formulaire impossible");
} // Closing if !mail...

} // Closing if edit
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Demande de catalogue Cadeaux 2007</title>
<script language="JavaScript">
function verifSelection() {if (mail_form.champ1.value == "") {
alert("Vous n\'avez pas rempli le champ \"Société\"")
return false
} if (mail_form.champ2.value == "") {
function verifSelection() {if (mail_form.champ22.value == "") {
alert("Vous n\'avez pas rempli le champ \"Nom de l'organisme\"")
return false
} if (mail_form.champ2.value == "") {
alert("Vous n\'avez pas rempli le champ \"Nom du contact\"")
return false
} if (mail_form.champ3.value == "") {
alert("Vous n\'avez pas rempli le champ \"Adresse\"")
return false
} if (mail_form.champ4.value == "") {
alert("Vous n\'avez pas rempli le champ \"Code postal\"")
return false
} if (mail_form.champ5.value == "") {
alert("Vous n\'avez pas rempli le champ \"Ville\"")
return false
} if (mail_form.champ6.value == "") {
alert("Vous n\'avez pas rempli le champ \"Téléphone\"")
return false
} if (mail_form.zone_email.value == "") {
alert("Vous n\'avez pas rempli le champ \"Adresse email\"")
return false
}

invalidChars = " /:,;'"

for (i=0; i<invalidChars.length; i++) {        // does it contain any invalid characters?
badChar = invalidChars.charAt(i)

if (mail_form.zone_email.value.indexOf(badChar,0) > -1) {
alert("Votre adresse e-mail contient des caractères invalides. Veuillez vérifier.")
mail_form.zone_email.focus()
return false
}
}

atPos = mail_form.zone_email.value.indexOf("@",1)                        // there must be one "@" symbol
if (atPos == -1) {
alert('Votre adresse e-mail ne contient pas le signe "@". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}

if (mail_form.zone_email.value.indexOf("@",atPos+1) != -1) {        // and only one "@" symbol
alert('Il ne doit y avoir qu\'un signe "@". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}

periodPos = mail_form.zone_email.value.indexOf(".",atPos)

if (periodPos == -1) {                                        // and at least one "." after the "@"
alert('Vous avez oublié le point "." après le signe "@". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}

if (periodPos+3 > mail_form.zone_email.value.length)        {                // must be at least 2 characters after the 
alert('Il doit y avoir au moins deux caractères après le signe ".". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}} // Fin de la fonction

</script>
</head>

<body bgcolor="#7F5D80" text="#000000" topmargin="0">
<table width="642" height="633" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td valign="bottom" background="fond.jpg"><table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td><form name="mail_form" method="post" action="<?=$PHP_SELF?>" onSubmit="return verifSelection()">
  <div align="center"></div>
<p align="center">
<?php
if ($message_remerciement) {
echo("<font face=Verdana size=2>");
echo(stripslashes($message_remerciement));
echo("</p></body></html>");
exit();
}
?>
  <table width="566" border="0" align="center">
<p align="center"></p><tr>
      <td><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Soci&eacute;t&eacute;<font color="#FF0000">*</font></font></strong></td>
      <td><input name="champ1" type="text"></td>
    </tr>
<tr>
  <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Nom de l'organisme (CE, COS...)</strong> <font color="#FF0000">*</font> </font></td>
  <td><input name="champ22" type="text" /></td>
</tr>
<tr>
      <td><strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nom du contact<font color="#FF0000">*</font></font></strong></td>
      <td><input name="champ2" type="text"></td>
    </tr><tr>
      <td><strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Adresse<font color="#FF0000">*</font></font></strong></td>
      <td><input name="champ3" type="text"></td>
    </tr><tr>
      <td><strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Code postal<font color="#FF0000">*</font></font></strong></td>
      <td><input name="champ4" type="text"></td>
    </tr><tr>
      <td><strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Ville<font color="#FF0000">*</font></font></strong></td>
      <td><input name="champ5" type="text"></td>
    </tr><tr>
      <td><strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Téléphone<font color="#FF0000">*</font></font></strong></td>
      <td><input name="champ6" type="text"></td>
    </tr><tr>
      <td width><strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Adresse email<font color="#FF0000">*</font></font></strong></td>
      <td width><input name="zone_email" type="text"></td>
    </tr><tr>
      <td valign="top"><strong><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Commentaires</font></strong></td>
      <td><textarea name="zone_texte" cols="35" rows="5"></textarea></td>
    </tr><tr>
      <td valign="top"><input name="nbre_champs_texte" type="hidden" id="nbre_champs_texte" value="7">
        <input name="nbre_zones_texte" type="hidden" value="1">
<input name="nbre_zone_email" type="hidden" value="1">
<input name="titre_champ1" type="hidden" value="Société">
<input name="titre_champ22" type="hidden" value="Nom de l'organisme">
<input name="titre_champ2" type="hidden" value="Nom du contact">
<input name="titre_champ3" type="hidden" value="Adresse">
<input name="titre_champ4" type="hidden" value="Code postal">
<input name="titre_champ5" type="hidden" value="Ville">
<input name="titre_champ6" type="hidden" value="Téléphone">
<input name="titre_email" type="hidden" value="Adresse email">
<input name="titre_zone" type="hidden" value="Commentaires"></td>
      <td><div align="center">
<input type="reset" name="Reset" value="Effacer">
<input type="submit" name="envoi" value="Envoyer">
        </div></td>
    </tr>
  </table>
  <div align="center"></div>
</form> </td>
      </tr>
    </table></td>
  </tr>
</table>
</body>
</html>

Merci d'avance !
Modifié par Masure (31 Jan 2007 - 17:11)
Salut,

Pour être tout à fait honnête, je doute que quelqu'un ait le courage de lire ton code en entier pour essayer de comprendre où est le problème, d'autant plus que tu es ici sur un forum dédié aux standards du Web, et que ton exemple est très loin d'y adhérer.

Si tu veux une réponse ici, je te conseille d'alléger tout ça et de nous montrer la partie du code minimale qui pose problème.

Bon courage ! Smiley smile
Bonjour,

Je n'ai pas vérifié si le code javascript est correct, mais au vu du code PHP, je peux dire une chose :
si javascript n'est pas disponible pour une raison ou pour une autre, on peut rentrer n'importe quoi dans les champs de formulaire, voire rien du tout. C'est peut-être bien ce qui t'es arrivé.

La vérification d'un formulaire doit toujours être faite côté serveur (en php, donc, dans le cas qui nous interesse) et éventuellement doublée d'une vérification côté client (en javascript). Une vérification en javascript seule est inefficace.
Lanza a écrit :
Bonjour,

Je n'ai pas vérifié si le code javascript est correct, mais au vu du code PHP, je peux dire une chose :
si javascript n'est pas disponible pour une raison ou pour une autre, on peut rentrer n'importe quoi dans les champs de formulaire, voire rien du tout. C'est peut-être bien ce qui t'es arrivé.

La vérification d'un formulaire doit toujours être faite côté serveur (en php, donc, dans le cas qui nous interesse) et éventuellement doublée d'une vérification côté client (en javascript). Une vérification en javascript seule est inefficace.

Bonjour.

A vous entendre j'ai l'impression que php doit toujours faire la vérification or si javascript ( quand il est activé ) passe une variable à php pour lui dire de ne pas la faire çà pourrait marcher non ?

Merci de m'expliquer quelque chose que visiblement je ne connais pas encore.

En passant, quelle est la meilleur méthode pour passer une variable à php via javascript ?
Bonsoir,
CNeo a écrit :
A vous entendre j'ai l'impression que php doit toujours faire la vérification or si javascript ( quand il est activé ) passe une variable à php pour lui dire de ne pas la faire çà pourrait marcher non ?
Le problème est que cela implique que tu fasses confiance à l'utilisateur, ce qui est en général une très mauvaise idée (sauf peut-être dans le cadre d'un public très ciblé). Le fait que JavaScript soit un langage côté client signifie en effet que tu n'as aucune garantie sur son déroulement. L'utilisateur peut très bien s'amuser à ajouter à la main la variable qui informe le code PHP que la vérification a été faite.
CNeo a écrit :
En passant, quelle est la meilleur méthode pour passer une variable à php via javascript ?
C'est une question très vague, ça dépend du contexte. Smiley smile

Tu peux utiliser les cookies, ou ajouter un champ caché dans un formulaire par exemple.