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

PHP & Base de données Discussion :

Captcha maison et probleme d'array


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de zipzap75
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2017
    Messages : 59
    Par défaut Captcha maison et probleme d'array
    Coucou tout le monde , je suis nouveau sur le forum et en général en tant que webmaster , je n'ai pas beaucoup d'expérience , je viens avec un petit problème que je n'arrive pas a résoudre tout seul , j'essaye de faire un petit captcha maison tout simple avec 2 array , l'un avec des questions (combien font 2 + 5 par exemple) et l'autre array avec les réponses (genre 7 pour la question) je vous passe le code , il me dit que j'ai des problèmes avec les index quand j'essaye de le lancer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    				<?php  
    					if(!isset($_POST['captcha'])){
    					$nbr = rand(0,11);
    					$_POST["nbr"] = $nbr;}
    					$chiffre = array ("deux plus un","trois + deux","cinq plus trois","six moins un","six plus un","cinq fois deux","trois moins deux","six fois deux","trois plus quatre","quatre fois deux","deux moins un","trois plus deux");		
    					echo ($chiffre[$_POST["nbr"]]);
    					$resultat = array(3,5,8,5,7,10,1,12,7,8,1,5);
    					if(!empty($_POST['captcha']) && $_POST['captcha']==$resultat[$_POST["nbr"]]){echo "YOUPI";}
     
    				?>
     
    				<input type="text" name="captcha">
    je n'ai pas copié collé le bouton submit ceci dit

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour et bienvenu sur DVP,

    nous montrer le message d'erreur complet nous aiderait.

  3. #3
    Membre confirmé Avatar de zipzap75
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2017
    Messages : 59
    Par défaut
    Oui exact , désolé je suis un peu nouveau , ca me dit "NOTICE : undefined index : nbr on line 163"
    cette ligne c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ($chiffre[$_POST["nbr"]]);
    Je pense que le code que j'ai fait me fait un amalgame entre les variables POST et les array , mais je comprends pas comment rectifier ca

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Plusieurs problèmes de logique dans ce code...
    Tu raisonnes à l'envers.
    Et comme tu ne récupères pas la question (avec un input type="hidden", ou dans une SESSION), comment veux-tu comparer la réponse ?

    Un exemple "maison", utilisant une fonction :

    fichier captcha.php :
    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
    <?php
    function check_captcha()
    {
    	// si posté, on récupère, sinon, valeur aléatoire
    	$captcha_q = (!empty($_POST['captcha_q']))? $_POST['captcha_q'] : rand(0,11);
    	$captcha_r = (!empty($_POST['captcha_r']))? $_POST['captcha_r'] : '';
     
    	$captchas_q = array(
    		"deux plus un",
    		"trois + deux",
    		"cinq plus trois",
    		"six moins un",
    		"six plus un",
    		"cinq fois deux",
    		"trois moins deux",
    		"six fois deux",
    		"trois plus quatre",
    		"quatre fois deux",
    		"deux moins un",
    		"trois plus deux"
    		);
    	$captchas_r = array(
    		3,
    		5,
    		8,
    		5,
    		7,
    		10,
    		1,
    		12,
    		7,
    		8,
    		1,
    		5
    		);
     
    	$captcha_return = array();
    	$captcha_return['succes'] = false;
     
    	if( !empty($_POST['captcha_r']) && is_numeric($_POST['captcha_r']) ) // on attend une valeur numerique (entier)
    	{
    		if( $_POST['captcha_r'] == $captchas_r[$captcha_q] )
    		{
    			$captcha_return['succes'] = true;
    		}
    	}
    	$captcha_return['captcha_q'] = $captcha_q;
    	$captcha_return['captcha_q_libelle'] = $captchas_q[$captcha_q];
    	// -------------
    	return $captcha_return; // retourne un array (contenant plusieurs valeurs, qui seront utiles dans le 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
    <?php
    require('captcha.php'); // on inclus la fonction
    // ------------------
    $captcha_return = check_captcha(); // active la fonction
    // ------------------
    if( $captcha_return['succes'] )
    {
    		echo "YOUPI";
    		// OK : le captcha reçu est bon
    }
    // ------------------
    else {
    	// on affiche UN AUTRE captcha
    	// affichage du formulaire
    ?>
    <form method="post">
    	<input type="hidden" name="captcha_q" value="<?php echo $captcha_return['captcha_q']; ?>">
    	<?php echo $captcha_return['captcha_q_libelle']; ?> : <input type="number" name="captcha_r">
    	<input type="submit" value="ok">
    </form>
    <?php
    }
    ?>
    Je te laisse l'étudier...

    Remarque : on a supposé ici que le fichier de traitement est le m^me que le fichier du formulaire.
    Mais on peut séparer :

    1/ page du 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
    <?php
    // ------------------
    unset($_POST); // on vide le POST
    require('captcha.php'); // on inclus la fonction
    $captcha_return = check_captcha(); // active la fonction
    // ------------------
    // $captcha_return['succes'] est forcément false (car $_POST a été vidé avant)
    // ------------------
    // affichage du formulaire
    ?>
    <form method="post" action="page_traitement.php">
    	<input type="hidden" name="captcha_q" value="<?php echo $captcha_return['captcha_q']; ?>">
    	<?php echo $captcha_return['captcha_q_libelle']; ?> : <input type="number" name="captcha_r">
    	<input type="submit" value="ok">
    </form>
    <?php
    }
    ?>
    2/ page_traitement.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    // ------------------
    require('captcha.php'); // on inclus la fonction
    $captcha_return = check_captcha(); // active la fonction
    // ------------------
    if( $captcha_return['succes'] )
    {
    		echo "YOUPI";
    		// OK : le captcha reçu est bon
    }
    // ------------------
    else {
    		echo "ERREUR de captcha !!";
    ?>

  5. #5
    Membre confirmé Avatar de zipzap75
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2017
    Messages : 59
    Par défaut
    eh ben tu t'es pas moqué de moi , merci pour le code t'as du y passer la journée ... je sais pas comment te remercier , effectivement je vais etudier ton code il est assez massif , encore merci bon courage ca fait plaisir

    J'ai parlé un peu vite IE me fait un petit plantage pas méchant , est ce que ca peut venir du fait que le captcha est dans un formulaire ? Genre et le formulaire de formulaire fait des erreurs ?

  6. #6
    Membre confirmé Avatar de zipzap75
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2017
    Messages : 59
    Par défaut IE me plante
    Re , je reviens vers vous car après l'ajout de votre code dans ma petite page php une fois sur 5 la page plante dans IE et seulement IE . je ne comprends pas pourquoi et je ne peux pas débuguer car l'erreur arrete le navigateur , comment je peux faire pour vous faire m'aider bien ? S'il vous plait .... voici le lien online de la page (si vous voulez je peux copier coller la source en PHP) http://www.aumone.fr/Se-contacter.php

    chez moi ca plante en rafraichissant , toute les 5 tentatives IE fait un crash

Discussions similaires

  1. AS3 : Probleme d'Array
    Par casturpin dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 10/11/2011, 18h56
  2. PHP/SOAP : Probleme d'array of array
    Par tdldp dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 09/02/2011, 14h48
  3. [MySQL] probleme tableau array
    Par tiesto95 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/01/2009, 14h50
  4. Probleme remplissage Array 2d avec un For
    Par Nico820 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/07/2008, 08h37
  5. Petit probleme avec Arrays.Sort(...)
    Par Seth77 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 15/01/2006, 12h48

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