IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

parse error (Alice)


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 2
    Points
    2
    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 :
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    N'ayant pas ta fonction formulaire sous les yeux.

    je dirais que dans ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    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 ?

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    dans ton form, déjà tu as une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form action="<?php echo $PHP_SELF ?>" method="post">
    a remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form action="<?php echo $_SERVER['PHP_SELF']  ?>" method="post">

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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)

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Après quelques ajustements, j'utilise ce nouveau script (allégé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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"])); ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    C'est plutôt que vous n'utilisez pas les mêmes noms de variable partout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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).

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Même en modifiant mon script selon vos remarques, il s'avère que seul le script suivant retourne un formulaire viable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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)


  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    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 ?

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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) !

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    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 ?

  19. #19
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    if (mail($recipient,$subject,utf8_decode($msg))) {

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Parse Error...
    Par Anduriel dans le forum Langage
    Réponses: 5
    Dernier message: 09/10/2005, 02h23
  2. parse error
    Par Romain93 dans le forum C
    Réponses: 6
    Dernier message: 28/09/2005, 21h03
  3. je ne comprend pas un parse error
    Par bibi_64 dans le forum C
    Réponses: 3
    Dernier message: 21/09/2005, 14h00
  4. XML Parsing Error: not well-formed
    Par localhost dans le forum Valider
    Réponses: 5
    Dernier message: 16/06/2005, 14h20
  5. Parse error
    Par Sylvain James dans le forum XMLRAD
    Réponses: 2
    Dernier message: 02/02/2005, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo