Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/04/2007, 10h09   #1
Invité de passage
 
Inscription : avril 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 9
Points : 1
Points : 1
Par défaut parse error (Alice)

Bonjour,

Je me pose plusieurs questions à l'égard du script PHP/HTML plus bas (depuis Alice) :

1. Je ne comprends pas pourquoi s'affiche systématiquement Missing fields ! après l'envoi du formulaire, que tous les champs soient renseignés ou non. Par ailleurs le message du nouveau formulaire contient :
Citation:
Provenance : http://www.xxx.fr/contact.php3
Adresse IP : xxx.xxx.xx.xxx,
Navigateur : Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Nom :
E-mail :
Message :
2. Dans le cas où le message du visiteur est bien envoyé, est-il possible de le lui spécifier puis de rediriger automatiquement ce dernier vers la page d'accueil de mon site ?
3. Comment ce script peut-il être optimisé (erreurs, failles, allègements sémantique et syntaxique, etc) ?

Merci d'avance à ceux qui prendront le temps de répondre.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?".">"; ?>
<!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" xml:lang="fr" lang="fr">
 
<head>
  <title>Contact</title>
  <link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php
function formulaire($name="",$email="",$subject="",$message="") {
?>
 
<div align="center">
 
<p>&nbsp;</p>
 
<form action="<?php echo $PHP_SELF ?>" method="post">
  <table>
    <tr><th colspan="2">Send an e-mail to <a href="http://www.moi.fr">Damien</a></th></tr>
    <tr><td>Name</td><td><input type="text" name="name" size="68" value="<?php echo trim(htmlentities($name)) ?>" /></td></tr>
    <tr><td>Email</td><td><input type="text" name="email" size="68" value="<?php echo trim(htmlentities($email)) ?>" /></td></tr>
    <tr><td>Subject</td><td><input type="text" name="subject" size="68" value="<?php echo trim(htmlentities($subject)) ?>" /></td></tr>
    <tr><td>Message</td><td><textarea name="message" rows="10" cols="70" wrap="virtual"><?php echo trim(htmlentities($message)) ?></textarea></td></tr>
    <tr><td>&nbsp;</td><td><input type="submit" value="Send"/></td></tr>
  </table>
</form>
 
<?php
}
 
if(!isset($name)) {formulaire();}
 
else {
  $Vname=trim(htmlentities($_POST["name"]));
  $Vemail=trim(htmlentities($_POST["email"]));
  $Vsubject=trim(htmlentities($_POST["subject"]));
  $Vmessage=trim(htmlentities($_POST["message"]));
  $recipient='mon@email.fr';
  $msg="Provenance : $HTTP_REFERER\n";
  $msg.="Adresse IP : $REMOTE_ADDR,\n";
  $msg.="Navigateur : $HTTP_USER_AGENT\n";
  $msg.="Nom : $Vname\nE-mail : $Vemail\nMessage : $Vmessage\n";
  if (empty($Vname) || empty($message) || empty($email) || empty($subject)) {
    echo "<p>Missing fields !</p>";
    $error=1;
  }
 
  if (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-_.]?[0-9a-z])*\\.[a-z]{2,4}$",$Vemail) && ($error<>1)){
    echo "<p>Email is not valid.</p>";
    $error=1;
  }
 
  if ($error==1) {
    formulaire($name,$email,$subject,$msg);
  }
 
  else {
    if (mail($recipient,$Vsubject,$msg)) {
      echo "<p>Your message has been sent.</p>\n" ;
      echo "Return to <a href=\"index.html\">homepage</a>";
    }
    else {
      echo "<p>An error occured while sending your message.</p>\n";
    } 
  }
}
?>
 
</div>
</body>
</html>
KrispRolls est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 12h06   #2
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
N'ayant pas ta fonction formulaire sous les yeux.

je dirais que dans ce bout de code
Code :
1
2
3
4
5
 
 if (empty($Vname) || empty($message) || empty($email) || empty($subject)) {
    echo "<p>Missing fields !</p>";
    $error=1;
  }
$message, $email, $subject

sont vide !
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 13h09   #3
Invité de passage
 
Inscription : avril 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 9
Points : 1
Points : 1
MaitrePylos,

La fonction formulaire() définit l'affichage du formulaire par le bout de code HTML contenu dans entre les balises <form>. Même lorsque tous mes champs sont remplis (et l'email valide), Missing Fields ! est retourné alors que le message devrait m'être mailé (il ne l'est d'ailleurs jamais). Quelqu'un a-t-il une idée ?
KrispRolls est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 13h56   #4
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
dans ton form, déjà tu as une erreur

Code :
1
2
 
<form action="<?php echo $PHP_SELF ?>" method="post">
a remplacer par

Code :
1
2
 
<form action="<?php echo $_SERVER['PHP_SELF']  ?>" method="post">
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 14h12   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
S'agit-il d'un script recyclé, j'entends par là modifié suite à une modification de la directive register_globals à Off car certaines de vos variables ne sont jamais définies ($name, $subject, $email par exemple) ?

Les fonctions ereg* sont dépréciées en faveur des fonctions preg_*

Les variables $HTTP_REFERER, $REMOTE_ADDR, $HTTP_USER_AGENT et $PHP_SELF s'écrivent maintenant $_SERVER['HTTP_REFERER'], etc (rejoint la première remarque)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 14h33   #6
Invité de passage
 
Inscription : avril 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 9
Points : 1
Points : 1
N'ayant jamais fait de PHP j'ai adapté un script de formulaire PHP/HTML (ici) à l'utilisation simple que je souhaite en faire.

Je comprends que si Missing fields ! est retourné en permanence cela signifie bêtement qu'au moins une des variable suivantes $Vname, $message, $email, $subject est 'vide' en permanence. D'ailleurs pourquoi $Vname et non $name ? ou pourquoi pas $Vsubject au lieu de $subject ?

Considérons
Code :
<tr><td>Subject</td><td><input type="text" name="subject" size="68" value="<?php echo trim(htmlentities($subject)) ?>" /></td></tr>

Cela ne signifie-t-il pas qu'on affecte à la variable $subject le 'sujet' du message laissé par le visiteur ?
Auquel cas, la variable $subject prend cette valeur.
KrispRolls est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 14h53   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par KrispRolls
Cela ne signifie-t-il pas qu'on affecte à la variable $subject le 'sujet' du message laissé par le visiteur ? Auquel cas, la variable $subject prend cette valeur.
Cela dépend de la valeur de la directive register_globals : à On, c'est comme cela que ça fonctionnait mais on ne sait pas alors de quelle méthode provient la variable : GET, POST, COOKIE ou SESSION donc c'est gênant autant du point de vue de la sécurité que du développement puisque vous risquez d'écraser vos variables. C'est pourquoi cela fait un certain temps qu'elle est à Off par défaut (ça date de la version 4.2.0), ce qui vous oblige à utiliser le nom de la méthode d'où provient la variable ($_POST['subject'] au lieu de $subject dans le cas d'un formulaire pour reprendre votre exemple). Vous avez pourtant utiliser cette méthodologie dans votre script.

Note : il est facile de vérifier la valeur du paramètre register_globals, il suffit de consulter la sortie de la fonction phpinfo.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h34   #8
Invité de passage
 
Inscription : avril 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 9
Points : 1
Points : 1
Après quelques ajustements, j'utilise ce nouveau script (allégé) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?".">"; ?>
<!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" xml:lang="fr" lang="fr">
 
<head>
  <title>Contact</title>
  <link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php
function formulaire($name="",$subject="",$message="") {
?>
 
<p>&nbsp;</p>
 
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
  <table bgcolor="#a0ffc0" align="center">
    <tr><th colspan="2">Send an e-mail to <a href="index.html">Damien</a></th></tr>
    <tr><td>Name</td><td><input type="text" name="name" size="68" value="<?php echo trim(htmlentities($name)) ?>" /></td></tr>
    <tr><td>Subject</td><td><input type="text" name="subject" size="68" value="<?php echo trim(htmlentities($subject)) ?>" /></td></tr>
    <tr><td>Message</td><td><textarea name="message" rows="10" cols="70" wrap="virtual"><?php echo trim(htmlentities($message)) ?></textarea><br /><small>Should you expect a reply, please do leave your e-mail address in the message area.</small></td></tr>
    <tr><td>&nbsp;</td><td><input type="submit" value="Send"/></td></tr>
  </table>
</form>
 
<?php
}
 
if(!isset($name)) {formulaire();}
 
else {
 
  $Vname=trim(htmlentities($_POST["name"]));
  $Vsubject=trim(htmlentities($_POST["subject"]));
  $Vmessage=trim(htmlentities($_POST["message"]));
  $recipient='mon@email.fr';
  $msg="Nom : $Vname\nMessage : $Vmessage\n";
 
  if (empty($name) || empty($subject) || empty($message)) {
    echo "Fields are missing !";
    formulaire($name,$subject,$message);
  }
 
  else {
 
    if (mail($recipient,$Vsubject,$msg)) {
      echo "Your message has been sent.\n"
//      echo "You are being automatically redirected to my homepage now.";
    } 
 
    else {
      echo "An error occured while sending your message.";
    } 
  }
}
?>
</body>
</html>
Je reçois désormais des mails, vides... Cela peut-il découler de ce que vous dites à propos de la directive register_globals ?
En fait la définition et l'utilisation des variables $V... me perturbent. Pourquoi ce $Vname=trim(htmlentities($_POST["name"])); ?
KrispRolls est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h50   #9
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
C'est plutôt que vous n'utilisez pas les mêmes noms de variable partout :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
}
 
if(!isset($_POST['name'])) {formulaire();}
 
else {
 
  $name=trim(htmlentities($_POST['name']));
  $subject=trim(htmlentities($_POST['subject']));
  $message=trim(htmlentities($_POST['message']));
  $recipient='mon@email.fr';
  $msg="Nom : $name\nMessage : $message\n";
 
  if (empty($name) || empty($subject) || empty($message)) {
    echo "Fields are missing !";
    formulaire($name,$subject,$message);
  }
 
  else {
 
    if (mail($recipient,$subject,$msg)) {
      echo "Your message has been sent.\n";
//      echo "You are being automatically redirected to my homepage now.";
    } 
 
    else {
      echo "An error occured while sending your message.";
    } 
  }
}
?>
Note : les traitements trim + htmlentities dans la fonction formulaire n'ont pas lieu d'être puisqu'ils sont déjà réalisés (avant son appel).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 16h33   #10
Invité de passage
 
Inscription : avril 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 9
Points : 1
Points : 1
Le script ci-dessous semble enfin fonctionner en supprimant la re-définition des variables par trim() et htmlentities(). Ne perd-on pas du coup les bienfaits de ces 2 fonctions ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?".">"; ?>
<!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" xml:lang="fr" lang="fr">
 
<head>
  <title>Contact</title>
  <link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php
function formulaire($name="",$subject="",$message="") {
?>
 
<p>&nbsp;</p>
 
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
  <table bgcolor="#a0ffc0" align="center">
    <tr><th colspan="2">Send an e-mail to <a href="index.html">Damien</a></th></tr>
    <tr><td>Name</td><td><input type="text" name="name" size="68" value="<?php echo trim(htmlentities($name)) ?>" /></td></tr>
    <tr><td>Subject</td><td><input type="text" name="subject" size="68" value="<?php echo trim(htmlentities($subject)) ?>" /></td></tr>
    <tr><td>Message</td><td><textarea name="message" rows="10" cols="70" wrap="virtual"><?php echo trim(htmlentities($message)) ?></textarea><br /><small>Should you expect a reply, please do leave your e-mail address in the message area.</small></td></tr>
    <tr><td>&nbsp;</td><td><input type="submit" value="Send"/></td></tr>
  </table>
</form>
 
<?php
}
 
if(!isset($name)) {formulaire();}
 
else {
 
//  $name=trim(htmlentities($_POST["name"]));
//  $subject=trim(htmlentities($_POST["subject"]));
//  $message=trim(htmlentities($_POST["message"]));
  $recipient='mon@email.fr';
  $msg.="Nom : $name\nMessage : $message\n";
 
  if (empty($name) || empty($subject) || empty($message)) {
    echo "Fields are missing!";
    formulaire($name,$subject,$message);
  }
 
  else {
 
    if (mail($recipient,$subject,$msg)) {
      echo "Your message has been sent. You are being automatically redirected to my homepage now.";
    } 
 
    else {
      echo "An error occured while sending your message.";
    } 
  }
}
?>
</div>
</body>
</html>
Je me demande aussi, dans le cas où le message du visiteur est bien envoyé, s'il est possible de le lui spécifier puis de le rediriger automatiquement vers la page d'accueil de mon site ensuite (laps de temps avant redirection à définir) ?

Merci pour vos conseils et votre sagacité.
KrispRolls est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 17h00   #11
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
S'il fonctionne comme vous l'avez redonné c'est que register_globals est à On et je parlais de supprimer les traitements redondants (trim + htmlentities) dans la fonction formulaire.

Citation:
Envoyé par KrispRolls
Je me demande aussi, dans le cas où le message du visiteur est bien envoyé, s'il est possible de le lui spécifier puis de le rediriger automatiquement vers la page d'accueil de mon site ensuite (laps de temps avant redirection à définir) ?
En php vous auriez la fonction header mais vu que vous envoyez des données au client vous ne pourrez pas l'utiliser après. Il faut donc vous orientez vers du HTML ou alors Javascript, quelque chose de ce style :
Code Javascript :
1
2
3
4
5
<script language="Javascript">
<!--//
setTimeout("window.location.href='http://www.developpez.com'", 5000);
-->
</script>

Note : il ne faut pas oublier que le Javascript peut être désactivé.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 09h05   #12
Invité de passage
 
Inscription : avril 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 9
Points : 1
Points : 1
Même en modifiant mon script selon vos remarques, il s'avère que seul le script suivant retourne un formulaire viable.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?".">"; ?>
<!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" xml:lang="fr" lang="fr">
 
<head>
  <title>Contact</title>
  <link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php
function formulaire($name="",$subject="",$message="") {
?>
 
<p>&nbsp;</p>
 
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
  <table bgcolor="#a0ffc0" align="center">
    <tr><th colspan="2">Send an e-mail to <a href="index.html">Damien</a></th></tr>
    <tr><td>Name</td><td><input type="text" name="name" size="68" value="<?php echo trim(htmlentities($name)) ?>" /></td></tr>
    <tr><td>Subject</td><td><input type="text" name="subject" size="68" value="<?php echo trim(htmlentities($subject)) ?>" /></td></tr>
    <tr><td>Message</td><td><textarea name="message" rows="10" cols="70" wrap="virtual"><?php echo trim(htmlentities($message)) ?></textarea><br /><small>Should you expect a reply, please do leave your e-mail address in the message area.</small></td></tr>
    <tr><td>&nbsp;</td><td><input type="submit" value="Send"/></td></tr>
  </table>
</form>
 
<?php
}
 
if(!isset($name)) {formulaire();}
 
else {
 
//  $name=trim(htmlentities($_POST['name']));
//  $subject=trim(htmlentities($_POST['subject']));
//  $message=trim(htmlentities($_POST['message']));
  $recipient='mon@email.fr';
  $msg="Provenance : $HTTP_REFERER\n";
  $msg.="Adresse IP : $REMOTE_ADDR\n";
  $msg.="Navigateur : $HTTP_USER_AGENT\n";
  $msg.="Nom : $name\nMessage : $message\n";
 
  if (empty($name) || empty($subject) || empty($message)) {
    echo "Fields are missing!";
    formulaire($name,$subject,$message);
  }
 
  else {
 
    if (mail($recipient,$subject,$msg)) {
      echo "Your message has been sent. You are being automatically redirected to my homepage now.<meta http-equiv=\"refresh\" content=\"4; url=index.html\">";
    } 
 
    else {
      echo "An error occured while sending your message.";
    } 
  }
}
?>
</div>
</body>
</html>
* Si j'écris if(!isset($_POST['name'])) {formulaire();} au lieu de if(!isset($name)) {formulaire();} => erreur : le script est réinitialisé systématiquement que tous les champs soient renseignés ou non (aucun texte ne s'affiche).
* Si j'écris $msg="Provenance : $_SERVER['HTTP_REFERER']\n"; au lieu de $msg="Provenance : $HTTP_REFERER\n"; => erreur : Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in contact.php3 on line 42
* Si j'écris $name=trim(htmlentities($_POST['name'])); au lieu de // $name=trim(htmlentities($_POST['name'])); => erreur : 'Fields are missing' s'affiche systématiquement (le script est également toujours réinitialisé).

En bref, le script semble tourner bien que faisant fi de nombre de vos remarques. Je souhaiterais qu'il prenne en compte vos remarques pour l'optimiser davantage. Comprenez-vous les 3 observations ci-dessus ?
KrispRolls est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 12h04   #13
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
J'ai ma réponse : ils utilisent une version 4.0.5 et register_globals est à On. Donc exit $_POST et donc si vous tenez à spécifier la provenance de votre variable :
  • $_SERVER devient $HTTP_SERVER_VARS ou $HTTP_ENV_VARS
  • $_POST devient $HTTP_POST_VARS
(le phpinfo d'Alice)

julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 12h18   #14
Invité de passage
 
Inscription : avril 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 9
Points : 1
Points : 1
Merci pour l'info.

Cela veut-il dire que lorsqu'Alice passera la directive register_globals à Off, mon script deviendra 'moins bien' écrit et sera plus vulnérable ?
KrispRolls est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 13h57   #15
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par KrispRolls
Cela veut-il dire que lorsqu'Alice passera la directive register_globals à Off, mon script deviendra 'moins bien' écrit et sera plus vulnérable ?
Non c'est l'inverse (On = pas bien, je caricature un peu) !
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 14h31   #16
Invité de passage
 
Inscription : avril 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 9
Points : 1
Points : 1
Je me suis mal exprimé : mon code actuel (qui marche) n'utilise pas le nom de la méthode d'où proviennent les variables (ex : $_POST['name'] au lieu de $name). Cela ne pose pas de pb puisque register_globals est à On. Que se passera-t-il lorsqu'Alice le passera à Off ? Utiliser $HTTP_SERVER_VARS, $HTTP_ENV_VARS, $HTTP_POST_VARS, y changera-t-il quelque chose ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?".">"; ?>
<!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" xml:lang="fr" lang="fr">
 
<head>
  <title>Contact</title>
  <link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php
function formulaire($name="",$subject="",$message="") {
?>
 
<p>&nbsp;</p>
 
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
  <table bgcolor="#a0ffc0" align="center">
    <tr><th colspan="2">Send an e-mail to <a href="index.html">Damien</a></th></tr>
    <tr><td>Name</td><td><input type="text" name="name" size="68" value="<?php echo trim(htmlentities($name)) ?>" /></td></tr>
    <tr><td>Subject</td><td><input type="text" name="subject" size="68" value="<?php echo trim(htmlentities($subject)) ?>" /></td></tr>
    <tr><td>Message</td><td><textarea name="message" rows="10" cols="70" wrap="virtual"><?php echo trim(htmlentities($message)) ?></textarea><br /><small>Should you expect a reply, please do leave your e-mail address in the message area.</small></td></tr>
    <tr><td>&nbsp;</td><td><input type="submit" value="Send"/></td></tr>
  </table>
</form>
 
<?php
}
if(!isset($name)) {formulaire();}
else {
  $recipient='mon@email.fr';
  $msg="Provenance : $HTTP_REFERER\n";
  $msg.="Adresse IP : $REMOTE_ADDR\n";
  $msg.="Navigateur : $HTTP_USER_AGENT\n";
  $msg.="Nom : $name\nMessage : $message\n";
  if (empty($name) || empty($subject) || empty($message)) {
    echo "<p style=\"margin-left: 20px\"><font color=\"#ff0000\"><b>Fields are missing!</b></font></p>";
    formulaire($name,$subject,$message);
  }
  else {
    if (mail($recipient,$subject,$msg)) {
      echo "<p style=\"margin-left: 20px\">Your message has been sent. You are being automatically redirected to my homepage now.</p><meta http-equiv=\"refresh\" content=\"4; url=index.html\">";
    } 
    else {
      echo "<p style=\"margin-left: 20px\">An error occured while sending your message. Return to my <a href=\"index.html\">homepage</a> or to the <a href=\"contact2.php3\">contact form</a>.</p>";
    } 
  }
}
?>
</body>
</html>
KrispRolls est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 14h44   #17
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par KrispRolls
Je me suis mal exprimé : mon code actuel (qui marche) n'utilise pas le nom de la méthode d'où proviennent les variables (ex : $_POST['name'] au lieu de $name). Cela ne pose pas de pb puisque register_globals est à On. Que se passera-t-il lorsqu'Alice le passera à Off ? Utiliser $HTTP_SERVER_VARS, $HTTP_ENV_VARS, $HTTP_POST_VARS, y changera-t-il quelque chose ?
Ben c'est simple, votre script ne fonctionnera plus : il faudra alors le modifier pour ajouter le nom de la méthode ($HTTP_POST_VARS ou $_POST, suivant la version, pour des données issues d'un formulaire). Mais apparemment ce n'est pas pour tout de suite
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 15h07   #18
Invité de passage
 
Inscription : avril 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 9
Points : 1
Points : 1
Si jamais je récuperais le numéro d'Alice, c'est pas la 1ère chose que je lui demanderai une upgrade >= 4.2.0...

julp, j'ose encore une fois vous demander conseil : certains caractères (en l'occurrence 'é', '§', 'è', 'ç', 'à', 'ù', 'µ', '¨' et '£') sont retranscrits '??' dans le mail que je reçois. Quelques uns sont courants. Une idée comment les autoriser ?
KrispRolls est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 15h25   #19
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Un problème d'encodage : vous semblez utiliser de l'UTF-8 pour votre page donc je pense que vous devriez ajouter l'en-tête "Content-type: text/html; charset=utf-8" dans votre mail ou changer l'encodage de votre page (iso-8859-1) ou encore appliquer la fonction utf8_decode :
Code :
if (mail($recipient,$subject,utf8_decode($msg))) {
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h54.


 
 
 
 
Partenaires

Hébergement Web