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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Un problème épineux sur un formulaire et une question plus générale


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Par défaut Un problème épineux sur un formulaire et une question plus générale
    Bonjour,

    Nous avons sur notre site dans sa partie ouverte à tous des formulaires (cf. code ci-dessous).
    Ils marchent bien.
    Cependant déjà depuis longtemps certains internautes nous disent que quand nous ne recevons rien, ils ont bien rempli le formulaire, ils ont bien été redirigés vers la page de succès après envoi, et ils n'ont pas reçu la copie prévue du formulaire envoyé.
    Cela vient de certains pays (Espagne, Japon, USA).
    Nous n'avons aucune idée de quoi cela peut provenir (leur navigateur, leur émetteur, etc.).
    Naturellement nous avons mis en place une solution de repli par mail direct (et là pas de souci), mais cela nous oblige à recopier les données prévues dans le(s) formulaire(s) dans différents items manuellement.
    Y aurait-il une soluce pour rendre ce formulaire (et d'autres chez nous, similaires) universel?

    La question plus générale concerne un projet de formulaire que nous avons pour la partie fermée du site (membres).
    Quand notre formulaire deviendra universel (avec votre aide) alors nous aimerions que lors du clic sur le bouton de la page d'ouverture (qui ouvre une page neuve), l'URL de la page précédente s'affiche automatiquement comme objet du formulaire.
    Est-ce que c'est faisable en php et si oui quelqu'un du forum pourrait il aider (si c'est simple, nous ne voulons pas abuser).

    Merci d'avance, Steph

    Voici le code à problème mystérieux (repris d'Internet):

    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
    <?php
        $destinataire = 'registration@XXXXXXX.org';
        $copie = 'oui';
        $form_action = '';
        $message_envoye = "<script>\n document.location='form-acknowledgement.php';</script>";
        $message_non_envoye = "Sorry, the message has not been sent, please try again.";
        $message_formulaire_invalide = "Check all fields have been fed and the e-mail address is without mistake.";
        function Rec($text)
        {
            $text = trim($text);
            if (1 === get_magic_quotes_gpc())
            {$stripslashes = create_function('$txt', 'return stripslashes($txt);');}
            else{$stripslashes = create_function('$txt', 'return $txt;');        }
            $text = $stripslashes($text);
            $text = htmlspecialchars($text, ENT_QUOTES);
            $text = nl2br($text);
            return $text;};
        function IsEmail($email)
        {$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
            return (eregi($pattern,$email)) ? true : false;};
        $err_formulaire = false;
        $nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
        $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
        $objet   = (isset($_POST['objet']))   ? Rec($_POST['objet'])   : '';
        $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
        if (isset($_POST['envoi'])){
            $email = (IsEmail($email)) ? $email : '';
            $err_formulaire = (IsEmail($email)) ? false : true;
            if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
            {$headers = 'From: '.$nom.' <'.$email.'>' . "\r\n";
                if ($copie == 'oui')
                {$cible = $destinataire.','.$email;}
                else{$cible = $destinataire;};
                $message = html_entity_decode($message);
                $message = str_replace(''',"'",$message);
                $message = str_replace('’',"'",$message);
                $message = str_replace('<br>','',$message);
                $message = str_replace('<br />','',$message);
                if (mail($cible, $objet, $message, $headers))
                {echo '<p>'.$message_envoye.'</p>'."\n";}
                else{echo '<p>'.$message_non_envoye.'</p>'."\n";};}
            else{echo '<p>'.$message_formulaire_invalide.' <a href="registration.php">Back to blank form.</a></p>'."\n";
                $err_formulaire = true;};};
        if (($err_formulaire) || (!isset($_POST['envoi']))){
            echo '    <form id="order" method="post" action="'.$form_action.'">'."\n";
            echo '    <fieldset><legend>Your coordinates</legend>'."\n";
            echo '    <p>'."\n";
            echo '    <label for="nom">Full name (name, first name, middle name) [required]:</label>'."\n";
            echo '    <input type="text" size="80" id="nom" name="nom" value="'.stripslashes($nom).'" tabindex="1">'."\n";
            echo '    </p>'."\n";
            echo '    <p>'."\n";
            echo '    <label for="email">E-mail [required] (it must be a personal e-mail address with your name mentioned in it) :</label>'."\n";
            echo '    <input type="text" size="60" id="email" name="email" value="'.stripslashes($email).'" tabindex="2">'."\n";
            echo '    </p>'."\n";
            echo '    </fieldset>'."\n";
            echo '    <fieldset><legend>Your message :</legend>'."\n";
            echo '    <p>'."\n";
            echo '    <label for="objet">Subject [required] (fill your name in place of NAME and payment date, in place of YYYY-MM-DD, e.g., 2015-11-03):</label>'."\n";
            echo '    <input type="text" size="130" id="objet" name="objet" value="XXXXXXX, NAME, fee payment date YYYY-MM-DD, membership'.stripslashes($objet).'" tabindex="3">'."\n";
            echo '    </p>'."\n";
            echo '    <p>'."\n";
            echo '    <label for="message">Message [required] (fill data, then delete the explanation texts within parenthesis):</label>'."\n";
            echo '    <textarea id="message" name="message" tabindex="4" cols="100" rows="11">"blabla avec 1056 caractères"'.stripslashes($message).'</textarea>'."\n";
            echo '    </p>'."\n";
            echo '    </fieldset>'."\n";
            echo '    <div style="text-align:center;"><input type="submit" name="envoi" value="Send the form !"></div>'."\n";
            echo '</form>'."\n";};
    ?>

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Par défaut
    UP

    s'il vous plait ne nous laissez pas abandonnées.

    Je signale un autre souci avec ce questionnaire (moins fréquent).
    J'en parle car on vient d'en recevoir un de Colombie.
    Cette fois on le reçoit mais le formulaire reste vierge (le texte pré-établi, à remplacer, est envoyé sans modif), alors que l'Internaute certifie avoir bien rempli ses données personnelles à la place du texte pré-établi.


    Merci d'avance

    Sans réaction dans un délai raisonnable, je considèrerai notre démarche comme indésirable.

    A+ (j'espère)

    Steph

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Utilise la classe PHPMailer plutôt que la fonction mail() : les filtres anti-SPAM sur les serveurs SMTP ont tendance à refuser les mails minimalistes (par exemple avec seulement FROM en en-tête).
    PHPMailer permet de construire des mails conformes simplement.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Par défaut
    Bonjour Modérateur et merci de cette réaction.

    Je ne comprend pas.
    On n'utilise pas la fonction mail.
    La fonction PHPMailer d'après un post sur ce site (Décembre 2012) permet d'envoyer des mails (http://stephaneey.developpez.com/tut...php/phpmailer/).

    Nous, nous avons un formulaire sur notre site web qui nous permet de collecter (recevoir) des infos (pour devenir membre).
    Le formulaire marche la plupart du temps sauf les cas décrits plus hauts (en tout cas hors France, car on n'a jamais eu de pb depuis la France, sauf si c'est une coincidence).

    Désolée mais je ne vois pas le rapport.

    Steph

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Membre à l'essai,
    Citation Envoyé par Stephdem Voir le message
    ...On n'utilise pas la fonction mail...

    ...Désolée mais je ne vois pas le rapport...
    ligne 39 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                if (mail($cible, $objet, $message, $headers))
    et ligne 30 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $headers = 'From: '.$nom.' <'.$email.'>' . "\r\n";
    Voyez-vous le rapport, maintenant ?
    Dernière modification par Invité ; 25/11/2015 à 18h13.

  6. #6
    Invité
    Invité(e)
    Par défaut
    De plus, quand je vois ceci...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            if (1 === get_magic_quotes_gpc())
    ........
    ...ou cela...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        function IsEmail($email)
        {$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
            return (eregi($pattern,$email)) ? true : false;};
    ........
    ...je me dis que le script ne date pas d'hier, et qu'il serait grand temps de faire le ménage et de le mettre à jour.

    get_magic_quotes_gpc ()
    Version 5.4.0 : Retourne toujours FALSE car la fonctionalité des guillemets magiques a été supprimée de PHP.
    eregi()
    Avertissement
    Cette fonction est OBSOLETE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l'utiliser.
    Voir aussi : PHP - Filtres de validation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filter_var($email, FILTER_VALIDATE_EMAIL)
    Mais... ça n'a peut-être aucun rapport...

Discussions similaires

  1. [RestFB] Problème publication sur page facebook avec une application facebook
    Par shark59 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 20/04/2012, 10h20
  2. Problème d'affichage des formulaires d'une application Web
    Par yimson dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 16/03/2011, 09h06
  3. problème Clone() sur un Model d'une Jtable
    Par teroux dans le forum Composants
    Réponses: 7
    Dernier message: 18/02/2011, 10h27
  4. Réponses: 1
    Dernier message: 08/05/2008, 23h00
  5. Réponses: 1
    Dernier message: 24/01/2007, 18h20

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