8795 sujets

Développement web côté serveur, CMS

Bonjour,

Alors que j'ai souvent utilisé ce type de variable j'arrive quand même à me planter. En gros j'ai créer une page php (form_soumission_1.php) que j'intègre à Joomla 1.5 grâce au composant JUMI. Dans cette page il y un formulaire dans lequel j'y ai rajouté un captcha repris sur "phpcs" Le captcha en lui même est crée à l'aide d'une autre page php (generateurcode.php). Dans cette page il y a une variable de SESSION.
Ainsi, si je fais un echo sur cette variable elle est vide, en faisant un "isset" elle n'existe pas. Pourtant j'ai bien vérifier dans le répertoire c:/wamp/tmp la variable de SESSION existe bel et bien avec le bon code de sécurité.

Voici, ci-dessous, une petite partie du code de "form_soumission_1.php" qui fait appel à "generateurcode.php"

<form name="myform" class=cssforms method="post" onsubmit="return validate_form(this)" action="<?php echo $return_url; ?>">
...
...
<img src="<?php $_SERVER['DOCUMENT_ROOT'] ?>/starn/go/images/JUMIScript/generateurcode.php" alt="" />
<p><label for="securityCode">*Code de s&eacute;curit&eacute; : </label><input type="text" name="securityCode" id="securityCode"></p><br />
<input type="submit" value="Envoyer" class="button"/>
<input type="reset" class="button"/>
</form>


Ensuite voici un bout de code que j'ai créer pour faire un test de récupération de la variable SESSION:

if ( isset ($_SESSION['code']))
    {
    echo $_SESSION['code']."tata<br />";
    }
    else 
    {
    echo "pas de variable SESSION code<br />";
    }


Et maintenant voici le code complet de generateurcode.php:

<?php
session_start();

srand(); //initialisation du générateur mais plus obligatoire > PHP 4.2

// Définition du content-type
header("Content-type: image/png");

$lettres = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');

$code = $lettres[rand(0,25)].rand(100,1000000); //si on met que des chiffres, il faut mettre (string)
$longueurcode = strlen($code);

$_SESSION['code'] = $code;

$largeur = $longueurcode * 25;
$hauteur =  40;

$image = imagecreatetruecolor($largeur, $hauteur);

$couleurfond = imagecolorallocate($image, rand(150,255),rand(150,255),rand(150,255));

imagefilledrectangle($image, 0, 0, $largeur, $hauteur, $couleurfond);

$fontchiffre = array("1.ttf","2.ttf");
$fontlettre = array("3.ttf");

imagettftext($image, rand(15,30), rand(-45,15), 10, 35, imagecolorallocate($image, rand(10,100) ,rand(10,100),rand(10,100)), $fontlettre[0], $code[0]);

for ($i = 1; $i < $longueurcode; $i++) {
  	$largeurx = 20 * $i + 30;
    $hauteury = rand(25,40);
	imagettftext($image, rand(27,32), rand(0,45), $largeurx,$hauteury, imagecolorallocate($image, rand(10,100) ,rand(10,100),rand(10,100)), $fontchiffre[rand(0,1)], $code[$i]);
//	imagestring($image, rand(1,15), $largeurx,$hauteury, $codegenere[$i], imagecolorallocate($image, rand(100,255) ,rand(100,255),rand(100,255)) );
}

imagepng($image);
imagedestroy($image);

?>


Information supplémentaire: dans l'optique de tests, j'ai voulu rajouté un include... le résultat est désastreux mais par contre je récupère, cette fois-çi, la variable SESSION.

voici une image du résultat:

upload/18076-phototest.jpg

Quelqu'un aurai - t - il une idée, car là je bloque?
En vous remerciant d'avance de votre aide.

Florent
Modérateur
suburbass a écrit :

...

$lettres = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');

$code = $lettres[rand(0,25)].rand(100,1000000); //si on met que des chiffres, il faut mettre (string)
$longueurcode = strlen($code);

$_SESSION['code'] = $code;

...


Salut,

Que vaut $code ?
Je crois que ton soucis vient de là.

Essai de faire ceci peut être :

$lettres = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
$nb_caractere=8;
$nb_element=count($lettres);
$nb_element--; //array commence par 0
for($i=1;$i<=$nb_caractere;$i++){
		$aleatoire=mt_rand(0,$nb_element);
		$code.=$lettres[$aleatoire]; 
}


si tu veux absolument générer un nombre de caractère aléatoire, tu peux faire ceci :

$lettres = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
$nb_caractere=mt_rand(1,8);
$nb_element=count($lettres);
$nb_element--; //array commence par 0
for($i=1;$i<=$nb_caractere;$i++){
		$aleatoire=mt_rand(0,$nb_element);
		$code.=$lettres[$aleatoire]; 
}


++

PS : code fait de tête, il se peut qu'il y ait des petits bogues.
Modifié par Nolem (13 Oct 2008 - 20:07)
Bonjour,

merci pour la réponse mais je doute fort que cela de là, car la variable $_SESSION est vraiment créer grâce à $code et c'est suffisament aléatoire. Le fichier de la variable session est bien créer et il contient bien la bonne information. Le vrai problème est pour récupérer cette variable.
Mais après discussion avec l'admin du plugin Joomla qui me permet de réer m'est propre page php (JUMI), il se pourrait que cela provienne d'un bogue au niveau du plugin voir même de Joomla.

Sympa de t'être quand même penché sur la question.

CLERC Florent