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 :

[PHP-JS] Transmission de valeur


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    kip
    kip est déconnecté
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 8
    Par défaut [PHP-JS] Transmission de valeur
    Bonjour, je souhaite réaliser la chose suivante :

    Afin de sécuriser un formulaire HTML, je souhaite mettre en place une confirmation visuelle (répéter dans un champ texte ce qui est affiché dans une image)

    Le principe :
    -A l'ouverture de la page HTML, grâce à la fonction onLoad, une fonction Javascript est exécutée qui génère un texte aléatoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <script language="JavaScript">
    function valeur_hazard()
    {
    	//Création du tableau de valeurs
    	var tableau = new Array("ABZ1nR3","BcRkJ49e8","Ah9bf4Jj","AzR8eA","AiE5R","ABC3421","b341G125","b345aMLP","AzR89K","H58JGD","AZrTJ456","NDkqi875","B58aZT7f6");
    	//Génération d'un nombre aléatoire entre 0 et 12
    	var nombre= Math.floor( Math.random() * 12 + 1);
     
    	document.form.champ_test.value=tableau[nombre];
     
    	//renvoi de la valeur choisie au hazard dans le tableau
    	return (tableau[nombre]);
    }
    </script>

    Cette fonction place alors une valeur aléatoire dans le champs texte : champ_test 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
     
    <body onLoad=valeur_hazard();>
     
    <form name="form">
     
    <input type="text" value="" name="champ_test">
     
    <br>
     
    <img src="im.php?valeur=this.champ_test.value">
     
    <br>
     
    <img src="im.php?valeur=123456">
     
    </form>
     
    </body>
    Pour l'instant c'est simple est fonctionnel car la valeur aléatoire s'affiche correctement dans le champ.


    Le problème vient après. Lorsque j'appelle le fichier im.php avec ces deux lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <img src="im.php?valeur=this.champ_test.value">
    <img src="im.php?valeur=123456">
    le fichier im.php utilise ensuite la variable $valeur de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Récupère la valeur de la variable
    $Valeur_Hazard=$valeur;
    la variable $Valeur_Hazard est ensuite utilisée pour afficher l'image.

    la variable est correctement transmise car l'image est généré en fonction de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="im.php?valeur=Truc_A_Afficher">
    le problème c'est que je n'arrive pas à transmettre la valeur du champ champ_test avec camp_test.value

    comment faire ? J'espère que mon explication a été claire. Si ce n'est pas le cas, n'hésitez pas à me demander des explications.

  2. #2
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Bonsoir

    Si tu utilises javascript que se passe t'il si la personne a désactivé javascript ? Cela ne pose t'il pas un problème ?

    Je te propose une solution 100% php qui fonctionne :

    le fichier img.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
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <?php
    session_start();
     
    $length = 5; // Longueur de la chaîne générée en image
    $alphabet = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; // Liste des caractères possibles
    $nb_characters = strlen($alphabet); // Nombre de caractères possibles
     
    // La variable code contient la chaîne qui sera générée en image
    $string = '';
    for($i = 0; $i < $length; ++$i)
    {
        $string .= $alphabet[mt_rand(0, $nb_characters-1)];
    }
     
    // Récupération de la longueur de la chaine à afficher
    $str_length = strlen($string);
     
    // Création de la zone image en fonction de la longueur de texte à afficher
    $image = imagecreatetruecolor(30 * $str_length, 50);
     
    // Création du fond de l'image
    for($x = 0; $x < imagesx($image); ++$x)
    {
        for($y = 0; $y < imagesy($image); ++$y) {
    	if (mt_rand(1,5) == 4 ) {
    	    $vred = mt_rand(0, 100);
    	    $vgreen = mt_rand(0, 100);
    	    $vblue = mt_rand(0, 100);
    	} else {
    	    $vred = mt_rand(100, 150);
    	    $vgreen = mt_rand(100, 150);
    	    $vblue = mt_rand(100, 150);
    	}
     
    	// Allocation d'une couleur au fond
    	$color = imagecolorallocate($image, $vred, $vgreen, $vblue);
     
    	// Affichage d'un pixel ayant la couleur du fond
    	imagesetpixel($image, $x, $y, $color);
     
    	// Suppression de la couleur du fond allouée
    	imagecolordeallocate($image, $color);
        }
    }
     
    // Création de la bordure
    $vred = mt_rand(0, 240);
    $vgreen = mt_rand(0, 240);
    $vblue = mt_rand(0, 240);
     
    // Allocation d'une couleur à la bordure
    $color = imagecolorallocate($image, $vred, $vgreen, $vblue);
     
    // Tracé de la bordure
    imagerectangle($image, 0, 0, imagesx($image)-1 , imagesy($image)-1, $color);
     
    // Suppression la couleur de la bordure allouée
    imagecolordeallocate($image, $color);
     
    // Création du texte
    for($i = 0; $i < $str_length; ++$i)
    {
        $vred = mt_rand(150, 240);
        $vgreen = mt_rand(150, 240);
        $vblue = mt_rand(150, 240);
     
        $size = mt_rand(20, 30);
        $angle = mt_rand(-10, 20);
        $x = 15 + (23 * $i);
        $y = mt_rand(30, imagesy($image) - 10);
        $color = imagecolorallocate($image, $vred, $vgreen, $vblue);
        $font = 'Comic.TTF';
     
        // Dessin du texte
        imagettftext($image, $size, $angle, $x, $y, $color, $font, $string[$i]);
     
        // Suppression de la couleur du texte allouée
        imagecolordeallocate($image, $color);
    }
     
    //Enregistrement en session du captcha 
    $_SESSION['captcha-text'] = $string; 
     
    // Création de l'image complète au format PNG
    header("Content-type: image/png");
    imagepng($image);
    ?>
    Et la vérif 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
    <?php
    	if(strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
    		if (empty($_POST['captcha'])) {
    		    $err_vide[] = "Le champ de saisie nommé <em>'Captcha'</em> est vide, ce champ est à remplir obligatoirement.\n";
    		} else {
    			if (isset($_SESSION['captcha-text']) && $_SESSION['captcha-text'] == $_POST['captcha']) {
    			} else {
    			    $err_vide[] = "L'information saisie dans le champ de saisie nommé <em>'Captcha'</em> est fausse, elle ne correspond pas au texte affiché dans l'image.\n";
    			}
    		}
    	}
     
    ?>
    <!-- formulaire : -->
    <input name="captcha" type="text" size="15" maxlength="5" value="">
    <img src="img_captcha.php" alt="Tapez le texte que vous voyez en majuscules">

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

Discussions similaires

  1. [PHP-JS] echange de valeur entre le javasript et le php
    Par cortex007 dans le forum Langage
    Réponses: 7
    Dernier message: 20/01/2006, 19h32
  2. [Sécurité] PHP 5 transmission de variables
    Par messier79 dans le forum Langage
    Réponses: 18
    Dernier message: 09/01/2006, 14h05
  3. Réponses: 1
    Dernier message: 22/09/2005, 15h46
  4. [PHP-JS] recupperer des valeurs html
    Par zimotep dans le forum Langage
    Réponses: 4
    Dernier message: 11/09/2005, 14h19
  5. Réponses: 4
    Dernier message: 28/07/2005, 16h10

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