8791 sujets

Développement web côté serveur, CMS

Bonjour, Smiley smile

J'ai fait un formulaire d'inscription sur mon site avec un captcha en lettres.
Impossible de visualiser ce formulaire. Il s'arrête au premier if : "impossible d'obtenir une cle".
Si vous avez besoin de ma "function" clé, pas de problème.
En attendant je vous livre le formulaire.
J'ai bien entendu une BDD avec deux tables.

Merci de m'aider Smiley biggrin




<?php

require "include/connecte.mysql.php";
require "include/imageControle.class.php";
$ic = new imageControle;

$ic -> chargerConfiguration();
$retour = $ic->ObtenirCle(); 

if ($retour === false) die ("impossible d'obtenir une clé.<br/>"); 
else { $cle = $ic->cle; 

}

if (!(isset($_POST['mode'])))
{
		$chaine_html = htmlFormInscription($cle);
}
else
{
	
	if((md5(strtolower($_POST['verifCode'])) == $_POST['verifCode2'])) 
	{ 
		$chaine_html = "Bravo vous avez correctement repris le code indiqué sur l'image.<br/>Votre demande a bien été prise en compte par nos services.<br/>";
		
		if (isset($_POST['login']) && $_POST['login'] != ""&& isset($_POST['password']) && $_POST['password'] != "")
		{
			$ret = systemeEcrireFichier("files/inscriptions/liste.txt",$_POST['login'].";".$_POST['password']."\n");
			
			if ($ret === false) $chaine_html .= "Désolé mais l'inscription n'a pu être enregistrée dans la liste.<br/>";
			else $chaine_html .=  "L'inscription a bien été enregistré dans la liste.<br/>";
		}
	}
	else $chaine_html = "Désolé mais vous n'avez pas repris le bon code depuis l'image de validation antiRobot.<br/>Votre demande n'a pas été prise en compte.<br/>";
	
}

function htmlFormInscription ($cle)
{
	$str = "<div id=\"cadreFormInscription\">\n<fieldset>\n
	<legend>formulaire d'Inscription</legend>
	<form name=\"f-test-cleform\" method=\"post\" action=\"#\">
	<table>
	<tr><td>Login : </td><td><input type=\"text\" name=\"login\" />
	</td></tr>
	<tr><td>Mot de passe : </td><td><input type=\"text\" 
	name=\"password\"></td></tr>
	
	<tr><td colspan=\"2\"><img src=\"include/protectionAntiRobot.php?code=".base64_encode($cle)."\" 
	alt=\"image code\" /></td></tr>
	
	<tr><td colspan=\"2\">Veuillez saisir les lettres que vous 
	voyez ci-dessus, dans le champ ci-dessous
	<input type=\"text\" name=\"verifCode\" /><br/>
	<input type=\"hidden\" name=\"verifCode2\" 
	value=\"".md5(strtolower($cle))."\" /></td></tr>
	<input type=\"hidden\" name=\"mode\" value=\"test_cle\" />
	<tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" 
	value=\"Enregistrer\"></td></tr></table>\n
	</form>\n
	</fieldset>\n</div>\n	";
	
	if ($str == "") return false;
	else return $str;
}



function systemeEcrireFichier ($dest,$val)
{
	$f = fopen($dest,"a+");
	if ($f === false) return false;
	else
	{
		$w = fwrite($f,$val);
		if ($w === false) return false;
		else
		{
			fclose($f);
			return true;
		}
	}
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >


<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>enigme :: Options générales du module</title>
<script language="javascript" type="text/javascript"></script>
<link rel="stylesheet" href="css/default.css" type="text/css" />
</head>
<body>

<?php echo $chaine_html; ?>

</body>
</html>
 

--------------------------------------------------------------------------------








Modifié par americanbichon (05 Dec 2009 - 15:59)
Salut,

americanbichon a écrit :
Si vous avez besoin de ma "function" clé, pas de problème.
Ben ça pourrait servir vu que c'est là que ça bloque. Smiley rolleyes

Sinon ton code ne passe pas la validation (cf. http://validator.w3.org/ ) et n'est pas accesssible (cf. http://openweb.eu.org/articles/formulaire_accessible ).

Et sans rentrer plus avant dans le code (par exemple l'utilisation de liste.txt me semble étrange puisque tu parles d'avoir une BDD à disposition...) tu pourrais déjà remplacer
if (isset($_POST['login']) && $_POST['login'] != ""&& isset($_POST['password']) && $_POST['password'] != "") 
par
if (!empty($_POST['login']) && !empty($_POST['password']))
Merci de m'avoir répondue.
J'ai effectivement une BDD je ne me sers pas de liste.text
Voici ma fonction clé perdue au milieu de mon require imagecontrole.php



class imageControle
{
	var $repPolice = "files/fonts/";
	var $repPolicePrec = "../files/fonts/";
	var $listePolice = array();
	var $Config = array();
	
	/* variables simples */
	var $cle = "";
	
	/* tableaux */
	var $t_alphabet = 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");

	/* variables dites pile/buffers */
	var $imageBuffer = "";

	var $debug ="";
	
	/*
		* boolean
		* listePolice ( ) 
		* méthode qui permet de lister l'ensemble des polices
		* de caractères proposées pour le module
	*/
	function listePolice()
	{
		$ret = $this->_lireRepertoire();
		
		if ($ret === false) return false;
		else return true;
	}
	
	/*
		* boolean
		* chargerConfiguration ()
		* méthode qui permet de charger depuis la base sql les
		* paramètres du module en vue de la création d'images
		* de contrôle
	*/
	function chargerConfiguration ()
	{
		/* requête SQL de sélection des paramètres du module */
		$sql = "select * from tblimagecontroleconfiguration limit 0,1";
		
		if (!($r_sql = mysql_query($sql)))
		{
			$this->debug .= "CODE ERREUR IMAGE CONTROLE 000002 :: 
			Impossible de charger la configuration du module.<br/>";
			return false;
		}
		else
		{
			while($row=mysql_fetch_array($r_sql,MYSQL_ASSOC)){
				$this->Config = $row; 
			}
			
			return true;
		}
	}
	
	/*
		* boolean
		* chargerConfiguration ()
		* méthode qui permet de charger depuis la base sql les
		* paramètres du module en vue de la création d'images
		* de contrôle
	*/
	function initialiserConfiguration ()
	{
		/* requête SQL de sélection des paramètres du module */
		$sql = "select * from tblimagecontroleconfiguration limit 0,1";
		
		if (!($r_sql = mysql_query($sql)))
		{
			$this->debug .= "CODE ERREUR IMAGE CONTROLE 000002 :: 
			Impossible de charger la configuration du module.<br/>";
			return false;
		}
		else
		{
			while($row=mysql_fetch_array($r_sql,MYSQL_ASSOC)){
				$this->Config = $row; 
			}
			
			
			return true;
		}
	}
	
	/*
		* boolean ou array t_couleur_rgb
		* couleurHexaVersRGB ( string(6) couleur_html , boolean formatRetour)
		* méthode permettant de retourner un tableau contenant les
		* valeurs héxadécimales d'une couleur HTML
	*/
	function couleurHexaVersRGB ($hex, $asString = false)
	{
		/* on retire tous les # qui pourraient être présents */
	  if (0 === strpos($hex, '#')) {
	      $hex = substr($hex, 1);
	  } else if (0 === strpos($hex, '&H')) {
	      $hex = substr($hex, 2);
	  }     
	
	  /* explosion de la chaine en 3 morceaux */
	  $cutpoint = ceil(strlen($hex) / 2)-1;
	  $rgb = explode(':', wordwrap($hex, $cutpoint, ':', $cutpoint), 3);
	
	  /* conversion de chaque morceau en rgb */
	  $rgb[0] = (isset($rgb[0]) ? hexdec($rgb[0]) : 0);
	  $rgb[1] = (isset($rgb[1]) ? hexdec($rgb[1]) : 0);
	  $rgb[2] = (isset($rgb[2]) ? hexdec($rgb[2]) : 0);
	
	  return ($asString ? "{$rgb[0]} {$rgb[1]} {$rgb[2]}" : $rgb);
	}
	
	
	/*
		* boolean false ou array t_entree_repertoire
		* _lireRepertoire ( string repertoire , [ string mode ] )
		* méthode qui permet de renvoyer dans un tableau les 
		* entrées d'un répertoire selon un mode précisé de 
		* tolérance aux fichiers "extras"
	*/
	function _lireRepertoire ($mode="strict")
	{
		$h = opendir($this->repPolice);
		if ($h === false)
		{
			$this->debug .= "CODE ERREUR IMAGE CONTROLE 000001 :: 
			Impossible d'ouvrir le répertoire '".$rep."'<br/>";
			return false;
		}
		else
		{
			unset($this->listePolice);
			$cpt=0;
			/* lecture du répertoire. */
		  while (false !== ($file = readdir($h))) {
		  	if ($mode == "strict")
		  	{
		  		if ($file == "." || $file == ".." || $file == "Thumbs.db"){
		  			continue;
		  		}
		  		else {
		  			$this->listePolice[$cpt] = $file;
		  			$cpt++;
		  		}
		  	}
		  	else{
		  		$this->listePolice[$cpt] = $file;
		  		$cpt++;
		  	}
		  }
		  
		}
	}
	
	
	/* METHODES EN RELATION AVEC LES GENERATIONS CLE/IMAGES */


	/*
		* boolean
		* obtenirCle ()
		* méthode qui permet de générer une clé aléatoirement en fonction du tableau de caractères de l'alphabet propriété de l'objet
	*/
	function ObtenirCle ()
	{
			if (isset($this->Config) && sizeof($this->Config) >0)
			{
				unset($this->cle);
				
				srand((double)microtime()*1000000);
			  for($i = 0; $i < $this->Config['nb_caractere']; $i++) 
			  	$this->cle .= $this->t_alphabet[rand(0, sizeof($this->t_alphabet))];
			  
			  if ($this->cle == "") return false;
			  else return true;
			}
			else return false;
	}

	/*
		* boolean
		* creerBufferImage ( string cle_a_transfomer_en_image , [ string police_a_utiliser ] )
		* méthode permettant de remplir le buffer pour une image correspodante à une clé précisée
		* !!! : la clé doit être passé en encodage base_64 pour le moment en attente des premiers scripts fonctionnels
	*/
	function creerBufferImage ($cle,$police="AFTES___.TTF")
	{
		if (sizeof($this->Config) > 0 || isset($this->Config))
		{
			if (!($this->imageBuffer = imagecreate ($this->Config['largeur'],$this->Config['hauteur'])))
			{
				$this->debug .= "CODE ANTIROBOT 000001 :: Impossible de 
				créer l'image destinée à contenir la clé.<br/>";
				return false;
			}
			else
			{
				$tbg = $this->couleurHexaVersRGB ($this->Config['couleur_bg']);
				$tfont = $this->couleurHexaVersRGB ($this->Config['couleur_police']);
				
				$bgcolor = ImageColorAllocate ($this->imageBuffer, $tbg[0], $tbg[1], $tbg[2]);
				$font = ImageColorAllocate ($this->imageBuffer, $tfont[0], $tfont[1], $tfont[2]);
				ImageTTFText ($this->imageBuffer, 20, 0, $this->Config['nb_caracteres'], 30, 
				$font, $this->repPolicePrec.$police, base64_decode($cle));
			}
		}
		else return false;
	}
}	
?>


Modifié par americanbichon (05 Dec 2009 - 22:36)
puisque tu as une variable debug le plus simple serait d'afficher son contenu. Tu pourrais rajouter juste après $retour = $ic->ObtenirCle(); :
echo $ic->debug;
Désolée je ne comprends pas tout ; de toute façon, j'ai aussi une erreur de clé dans mon dossier anti-robot


<?php
/*
	* 17/08/2006 14:16pm
	* include/protectionAntiRobot.php
	* fichier qui permet de renvoyer une image pour une clé donnée avec une police de caractères à utiliser
*/
include "connecte.mysql.php";
include "imageControle.class.php";
if(!(isset($_GET['mode'])))
{
	die("CODE ERREUR SYSTEME :: Impossible de renvoyer une image pour une clé non précisée.<br/>");
}
else 
{ 
	$ic = new imageControle(); 
	$ic->chargerConfiguration();
	$retour = $ic->creerBufferImage ($_GET['mode']);
	if ($retour === false)
	{
		die ("CODE ERREUR SYSTEME :: Impossible de créer le buffer pour l'image à générer.<br/>");
	}
	else
	{
		header("Content-type: image/png");
		ImagePng ($ic->imageBuffer); 
	}
}


?>



"Impossible de renvoyer une image pour une clé qui n'existe pas"
Pour les autres dossiers php tout est nickel

Modifié par americanbichon (06 Dec 2009 - 13:30)
Re',

americanbichon a écrit :
Désolée je ne comprends pas tout
Ce qui veux certainement dire que tu as récupéré ce code sans (bien) comprendre son fonctionnement. Smiley murf

Et étant donné que tu n'as pas compris ma réponse concernant le debug je suppose également que tu débutes...

Pour résumer et comme cela est indiqué dans l'annonce de ce salon, le forum Langages serveurs d'Alsacréations n'est pas destiné aux débutants. Je t'invite donc à trouver un forum approprié à l'apprentissage de ce merveilleux langage. Smiley cligne
Je n'ai pas récupéré ce code, je l'ai installé pas à pas avec mon professeur, mais je n'ai pas la patience d'attendre mon prochain cours (cela fait 6 mois que je suis dessus).
J'ai bien mis l'écho debug sous la phrase que tu m'as indiquée, mais je ne récupère rien.......


$retour = $ic->ObtenirCle(); {
echo $ic->debug;
}

Je récolte une parse erreur
impossible d'obtenir une clé

sur le formulaire et
CODE ERREUR SYSTEME :: Impossible de renvoyer une image pour une clé non précisée

dans mon fichier anti-robot.

Les autres fichiers sont bons
Ne tiens pas compte des accolades, merci
Modifié par americanbichon (06 Dec 2009 - 20:52)
Bon on va pas s'en sortir...

Il n'y a aucun mal à débuter mais, je me répète, tu n'es pas sur le bon forum.

Si on continue on va se retrouver avec 4 pages de sujet... pour t'expliquer ce que tu as toi-même développé ! Smiley rolleyes

Donc je ferme et je t'invite à reprendre "pas à pas" ton code jusqu'à bien comprendre ce qu'il fait.

Bonne continuation. Smiley smile