Session & random, php

Fermé
ReQTE - Modifié par ReQTE le 16/07/2012 à 21:25
 Utilisateur anonyme - 18 juil. 2012 à 00:17
Bonjour,

le code suivant cree un chiffre aleatoire entre 1000 et 9999;
Cependant je ne parviens pas a obtenir le meme chiffre avec un $_SESSION que celui qui est indique...

Pouvez vous m aider?



merci


volunteer.php

<?php 
 session_start(); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<head> 
 <title>WCC Volunteer application form</title> 
 <link rel="stylesheet" type="text/css" href="volunteer.css" /> 
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> 
 <meta http-equiv="content-language" content="FR"/> 
</head> 
<body> 
<h3>What is this number ?</h3> 
 <img src="captcha.php" /><br /> 
 <input type="text" name="captcha" id="captcha" style="width:70px"/><br /> 
 <input type='button' value="Captcha validation" onclick="testCaptcha(document.volunteer.captcha.value,<?php echo $_SESSION ['captcha'];?>)" /> 
</body> 




volunteer.js

function testCaptcha(value1,value2){ 
 alert(value1); 
 alert(value2); 
} 



captcha.php

<?php 
 session_start(); 
  $captcha=$_SESSION['captcha'] = rand(1000,9999); 
   
  $img = imagecreatetruecolor(140, 50); 
  
  $fill_color=imagecolorallocate($img,255,255,255); 
  imagefilledrectangle($img, 0, 0, 140, 50, $fill_color); 
  $text_color=imagecolorallocate($img,10,10,10); 
  $font = './neurochrome.ttf'; 
  imagettftext($img, 23, 0, 5,30, $text_color, $font, $_SESSION['captcha']); 
  
  header("Content-type: image/jpeg"); 
  imagejpeg($img); 
  imagedestroy($img); 
?> 




3 réponses

Utilisateur anonyme
17 juil. 2012 à 01:07
Bonjour

Le problème, c'est que tu crées ton code :
onclick="testCaptcha(document.volunteer.captcha.value,<?php echo $_SESSION ['captcha'];?>)" />
dans le serveur en créant la page qui contient le captcha.
À ce moment là, l'image du captcha n'est pas encore créée : elle ne le sera que quand le navigateur du client inteptètera la balise <img src="captcha.php" />.
Donc le $_SESSION ['captcha'] que tu as mis ne correspond pas à celui de l'image, puisque l'image le modifiera quand elle sera créée.

De plus, le code que tu essayais de mettre en place était une aberration au niveau de la protection: le code du captcha y apparaissait en clair chez le visiteur, autant dire que tu laissais la clef sur le cadenas.

Le mieux est de soumettre un formulaire et de tester en PHP, comme ça la valeur de $_SESSION ['captcha'] sera bien la bonne et ne sortira pas du serveur.
0
Merci le pere mais comment je fais ca? ;p

@bientot
0
Utilisateur anonyme
18 juil. 2012 à 00:17
- Tu enlèves le volunteer.js qui ne sert plus à rien
- Tu mets le champ de saisie dans un formulaire normal, c'est à dire entre balises <form> et </form>, avec method POST de préférence (mais ça marcherait aussi avec GET) et un <input type ="submit"> pour valider le formulaire (pas de javascript)
- Dans le script qui reçoit le formulaire, tu vérifies que $_POST['captcha'] == $_SESSION['captcha']
0