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 :

Captcha sur formulaire


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Captcha sur formulaire
    Bonjour, je rencontre actuellement un problème d'adaptation de captcha sur un formulaire.

    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
    <?php
    	session_start();
    	$_SESSION['security_number']=rand(10000,99999);
    	$protection = 
    	urlencode($_POST['number_inserted_by_user']) . "&vs=" . 
    	urlencode($_SESSION['security_number']); 
     
    if(isset($_POST['email']) and isset($_POST['sujet']) and isset($_POST['message']) and isset($_POST['number_inserted_by_user']))
    {
            $destinataire = 'altordj@gmail.com';
            $email = htmlentities($_POST['email']);
            if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&amp;','&',$email)))
    		if(!preg_match("|<verification result=\"yes\"/>|", $protection))
            {
                    $sujet = 'Contact: '.stripslashes($_POST['sujet']);
                    $message = stripslashes($_POST['message']);
                    $headers = "From: <".$email.">\n";
                    $headers .= "Reply-To: ".$email."\n";
                    $headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"";
                    if(mail($destinataire,$sujet,$message,$headers))
                    {
                            echo "<script type=\"text/javascript\">alert(\"Votre message a bien été envoyé.\"); window.location =\"index.php\";</script>";
                    }
                    else 
                    {
                            echo "<script type=\"text/javascript\">alert(\"Une erreur s'est produite, prière de réessayer.\"); window.location =\"index.php\";</script>";
                    }
            }
            else if(preg_match("|<authorization status=\"0\"|", $protection)) 
            {
                    echo "<script type=\"text/javascript\">alert(\"Le code de vérification et votre e-mail ne sont pas valides, prière de réessayer.\"); window.location =\"index.php\";</script>";
            }
            else if(!preg_match("|<verification result=\"yes\"/>|", $protection))
            {
                    echo "<script type=\"text/javascript\">alert(\"L'e-mail que vous avez entré est invalide.\"); window.location =\"index.php\";</script>";
            }
    }
    else
    {
    ?>
        <p id="08">
    <ul class="cont1">
    <form action="" method="post">
            <fieldset>
            <legend>Formulaire de contact</legend><BR>
            <label for="email" style="display:inline-block;width:100px;"><strong>Votre Email:</strong></label> <input type="text" name="email" id="email" /><br />
            <label for="sujet" style="display:inline-block;width:100px;"><strong>Sujet:</strong></label> <input type="text" name="sujet" id="sujet" /><br />
            <label for="message"><strong>Message:</strong></label><br />
            <textarea cols="70" rows="4" name="message" id="message"></textarea><br />
            <label for="number_inserted_by_user" style="display:inline-block;width:100px;">
    		<strong><img src="script/image.php" alt="well, this is out capcha image" /></strong></label> <input type="text" name="number_inserted_by_user" id="number_inserted_by_user" /><br />		
            <input type="submit" value="Envoyer" />
        </fieldset>
    </form>
    <BR>
    </ul>
    	</p> &nbsp
    <?php
    }
    ?>
    D'avance merci.

  2. #2
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Et ton problème est ... ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Et ton problème est ... ?
    Que le code soit juste ou pas le mail part et les messages ne correspondent pas au statut (si le code est ou et/ou si le mail est valide).

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Est-il normal que tu ais 2 ifs à la suite ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&amp;','&',$email)))
        if(!preg_match("|<verification result=\"yes\"/>|", $protection))
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Ah non c'était pas normal...
    J'ai corrigé.

    Cependant le mail par quel que soit ce que je rentre comme code captcha :-(

  6. #6
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    session_start();
    $_SESSION['security_number']=rand(10000,99999);
    $protection = urlencode($_POST['number_inserted_by_user']) . "&vs=" . urlencode($_SESSION['security_number']);
    Tu réinitialises ton numéro de sécurité quoiqu'il arrive ? Du coup, comment tu conserves l'ancien pour le comparer à celui envoyé en POST ?

    De même, tu as vu que tu as une condition négative ici ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!preg_match("|<verification result=\"yes\"/>|", $protection))
    Autrement dit, le même test est fait ligne 11 et ligne 31

    Dernier point : tu devrais afficher des traces pour voir ce que tu fais, notamment un var_dump($protection) t'aiderait bien
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par k'amm Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    session_start();
    $_SESSION['security_number']=rand(10000,99999);
    $protection = urlencode($_POST['number_inserted_by_user']) . "&vs=" . urlencode($_SESSION['security_number']);
    Tu réinitialises ton numéro de sécurité quoiqu'il arrive ? Du coup, comment tu conserves l'ancien pour le comparer à celui envoyé en POST ?
    C'est pour définir le code dans l'image. Non?!...

    Citation Envoyé par k'amm Voir le message
    De même, tu as vu que tu as une condition négative ici ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!preg_match("|<verification result=\"yes\"/>|", $protection))
    Autrement dit, le même test est fait ligne 11 et ligne 31
    Je voulais mettre une variable dans le cas où le code serait juste mais le mail invalide...

    Citation Envoyé par k'amm Voir le message
    Dernier point : tu devrais afficher des traces pour voir ce que tu fais, notamment un var_dump($protection) t'aiderait bien
    Ca dépasse mon entendement, pourrais-tu m'en dire plus?

    Désolé mais j'ai un niveau très limité en php. Si tu as un ou deux liens intéressants je serai preneur si tu ne veux pas perdre ton temps avec moi...

    Merci en tous cas.

  8. #8
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par altordj Voir le message
    C'est pour définir le code dans l'image. Non?!...
    Le problème est que tu définis le code de l'image à chaque fois que tu charges ta page, sauf que pour vérifier si le code soumis par l'utilisateur est bon, il faut bien que tu gardes le code précédent non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <verification result=\"yes\"/>
    Qu'est-ce qui te permet d'obtenir ce genre de choses aussi ?
    Tu fais appelles à du code autre ?

    Je voulais mettre une variable dans le cas où le code serait juste mais le mail invalide...
    Vas-y doucement, on apprend à marcher avant d'apprendre à courir ! Commences déjà par un formulaire tout simple qui fonctionne et fais le évoluer ensuite avec ce genre de fonctionnalités

    Ca dépasse mon entendement, pourrais-tu m'en dire plus?
    Mettre une trace dans un code signifie afficher des informations pour permettre au développeur de mieux voir ce qu'il fait. http://php.net/var_dump t'expliquera, par exemple, que var_dump($protection) affiche le contenu de $protection

    Désolé mais j'ai un niveau très limité en php. Si tu as un ou deux liens intéressants je serai preneur si tu ne veux pas perdre ton temps avec moi...
    Ce tutoriel est plutôt bien fait par exemple.
    Et puis la bible de tout développeur php : http://www.php.net
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    J'ai utilisé un autre script dont voici les éléments :

    Formulaire :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <form action="contact.php" method="post" name="contact" id="contact">
    <p>
    <label for="mail">Votre adresse mail :</label><br />
    <input type="text" id="mail" name="mail" size="20" maxlength="100"/><br />
    <label for="objet">Objet du mail :</label><br />
    <input name="objet" type="text" size="20" maxlength="100" /><br />
    <label for="msg">Texte du mail :</label><br />
    <textarea name="msg" cols="40" rows="4"></textarea><br /><BR>
    <img src="captcha.php" alt="securisation du formulaire" title="securisation du formulaire" /><br />
    <label for="verif">Recopier le code ci dessus (en respectant les majuscules):</label><br />
    <input type="text" name="verif" size="10" maxlength="5" />
    <br>&nbsp<BR>
    <input type="submit" value="Envoyer" />
    </p>
    </form>

    Le fichier d'envoi :
    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
    <?
    // Demarrage de session
    session_start();
    // Test de la variable
    if(!isset($_SESSION['code']) OR strlen($_SESSION['code']) !=5) exit("Erreur !");
     
    // Comparaison des valeurs
    if($_SESSION['code'] != $_POST['verif']) exit("<script type=\"text/javascript\">alert(\"Le code de s\351curit\351 entr\351 est incorect, pri\350re de r\351essayer. \"); window.location =\"index.php\";</script>");
    // Recuperation du mail de l'envoyeur
    $exp = $_POST['mail'];
    // On formate les chaines
    $objet = stripslashes($_POST['objet']);
    $msg = stripslashes($_POST['msg']);
    // Envoi du mail
    $envoi=mail("altordj@gmail.com", $objet, $msg,"From: $exp\r\n"."Reply-To: $exp\r\n");
    if($envoi) echo "<script type=\"text/javascript\">alert(\"Votre message a bien \351t\351 envoy\351.\"); window.location =\"index.php\";</script>";
    else echo "<script type=\"text/javascript\">alert(\"Echec de l\30envoi, pri\350re de r\351essayer. \"); window.location =\"index.php\";</script>";
    // On efface et détruit les varaibles de sessions
    session_unset();
    session_destroy();
    ?>
    Le générateur de l'image :
    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
    <?
    // Démarage d'une session
    session_start();
    // Définition de la liste des caractères autoriés, on exclus le 0
    $liste = "abcdefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    // On créer la valeur du code
    $code = '';
    // On crée la chaine de 5 caractères
    while(strlen($code) != 5) {
    $code .= $liste[rand(0,63)];
    }
    $_SESSION['code']=$code;
    // On crée une image
    $larg = 75;
    $haut =30;
    $img = imageCreate($larg, $haut);
    $rouge = imageColorAllocate($img,255,255,255);
    $noir = imageColorAllocate($img,0,0,0);
    $code_police=10;
    header('Expires: Mon, 08 Dec 2008 12:00:00 GMT'); 
    header('Cache-Control: no-store, no-cache, must-revalidate'); 
    header('Cache-Control: post-check=0, pre-check=0', false); 
    header("Content-type: image/jpeg");
    // On intégre le code dans l'image
    imageString($img, $code_police,($larg-imageFontWidth($code_police)*strlen("".$code.""))/2,0, $code,$noir);
    // On créé une image de mauvaise qualité, 23% de l'image normal
    imagejpeg($img,'',50);
    imageDestroy($img);
    ?>
    Merci pour ces liens et votre aide précieuse.

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Comment je met le topic en mode résolu? ^^

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    En cliquant sur le bouton en-dessous des messages...
    Fait pour toi.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci.

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

Discussions similaires

  1. [phpBB] Captcha sur formulaire d'inscription à un forum phpbb depuis un autre site
    Par casimirine dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 04/12/2014, 18h46
  2. Réponses: 19
    Dernier message: 26/01/2006, 08h44
  3. Test sur formulaire avec liste des erreurs
    Par Nicos77 dans le forum Langage
    Réponses: 37
    Dernier message: 17/11/2005, 10h22
  4. Problème: condition sur formulaire dans requête
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2005, 23h27
  5. Glisser déposer sur formulaire
    Par norvel dans le forum Access
    Réponses: 5
    Dernier message: 03/10/2005, 11h20

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