Bonsoir a tous,
Je vous écrit en cette heur tardive car j'ai un soucie qui pour moi n'est pas logique.
Je m'explique je me créer mon formulaire d’inscription dans lequel j'ajoute mon captcha en plus du reste :
Voici le fichier captcha.php :
$code = strtoupper(substr(md5(uniqid(rand())),0,6));
$_SESSION'code'] = $code;
$largeur = 65;
$longueur = 25;
$image = imagecreate($largeur, $longueur);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);
$font = 13;
imagestring($image, $font, 5, 5, $code, $blanc);
imagejpeg($image, null ,75);
Et voici mon formulaire :
<form method="post" action="modules/registration/register.php#cat">
<div class="form-group validate">
<label for="username">Pseudo</label>
<?= input_require('username'); ?>
</div>
<div class="form-group validate">
<label for="password">Password</label>
<input type="password" name="password" class="form-control" id="password" required>
</div>
<div class="form-group validate">
<label for="passverif">Vérification password</label>
<input type="password" name="passverif" class="form-control" id="passverif" required>
</div>
<div class="form-group validate">
<label for="email">Email</label>
<?= input_require('email'); ?>
</div>
<div class="form-group validate">
<label for="code">Captcha</label>
<span style="display:inline-block;margin-bottom:5px;">Tapez le bon code : <img src="<?= WEBROOT ?>modules/captcha.php" alt="captcha"/></span>
<?= input_require('code'); ?>
</div>
<?= csrfInput(); ?>
<button type="submit" class="btn btn-warning">Envoyer</button>
</form>
Alors voila mon captcha s'affiche bien mai toutes mes autres vérification font ce que je leurs demande sauf ce champ la qui refuse de faire ce que je lui demande, le if fait bien la vérif mai dans les deux cas elle est fausse et le script s'arrête.
Voici tout mon register.php au cas où :
if(isset($_POST)) {
$username = strip_tags($_POST'username'], ENT_QUOTES);
$email = strip_tags($_POST'email'], ENT_QUOTES);
$password = sha1($_POST'password']);
$passverif = sha1($_POST'passverif']);
$token = sha1(uniqid(rand()));
// On vérifie l'enregistrement
$select = $db->prepare("SELECT * FROM users WHERE username = '" . $username . "' OR email = '" . $email . "' ");
$select->execute();
$lignes = $select->fetchAll();
$check = count($lignes);
if($check > 0) {
setFlash('Ce pseudo et ce mail sont deja','danger');
header('Location:index.php#cat');
die();
}
/* vérification du password */
if(isset($_POST'password']) && $_POST'password'] != $_POST'passverif']) { //verif pass
setFlash('Les mots ne sont pas identique','danger');
header('Location:index.php#cat');
die();
}
/* verification du nombre de caractères */
if(isset($_POST'username']) && strlen($_POST'username'])<4) {
setFlash('Le pseudo contien moins de 5 lettres','danger');
header('Location:index.php#cat');
die();
}
/* verification du mail */
if(isset($_POST'email']) && !filter_var($_POST'email'], FILTER_VALIDATE_EMAIL)) {
setFlash('Mail non valide','danger');
header('Location:index.php#cat');
die();
}
/* verification du captcha */
if(isset($_POST'code']) && $_POST'code'] != $_SESSION'code']) { //verif captcha
setFlash('Le le captcha n\'est pas valide','danger');
header('Location:index.php#cat');
die();
}
else{
$q = array('username'=>$username, 'email'=>$email, 'password'=>$password, 'passverif'=>$passverif, 'token'=>$token);
$sql = 'INSERT INTO users (username, email, password, passverif, token) VALUES (:username, :email, :password, :passverif, :token)';
$req = $db->prepare($sql);
$req->execute($q);
setFlash('Votre inscription c\'est bien passer ! un admin va activer votre compte');
header('Location:index.php#cat');
die();
}
}
Donc voila je trouve pas peut es-ce par ce que j'ai mis mon formulaire dans une modale ?
Mai j'ai tester et cette condition refuse de faire son job.
Voila voila Bonne journée/soirée :)
Bonsoir,
Je parie que la condition du captcha est toujours vrai ?
Vous testez à chaque fois si vous avez bien un code de saisie et si oui alors le captcha n'est pas valide. Ce qui n'est pas logique.
Ceci est plus logique:
/* verification du captcha */
if(!isset($_POST'code']) && $_POST'code'] != $_SESSION'code']) { //verif captcha
setFlash('Le captcha n\'est pas valide','danger');
header('Location:index.php#cat');
die();
}
Merci de votre réponse !
En effet j'y avais bien pensée mai cette vérification fait le même que l'autre sauf que là tout est succès peut import ce qui est saisis ! pourtant je fait la même pour les mdp et ça fonctionne correctement.
Dans ton register.php au tout début
if(isset($_POST)) {
var_dump($_POST);
echo '<br/>';
var_dump($_SESSION);
die();
}
Et vérifie les valeurs
Voila ce que j’obtiens :
array (size=6)
'username' => string 'zero6' (length=5)
'password' => string '0000' (length=4)
'passverif' => string '0000' (length=4)
'email' => string 'zero@zero6.fr' (length=13)
'code' => string '94B1A2' (length=6)
'csrf' => string 'ef40f882c4540bc04dce73fac1056c0d' (length=32)
array (size=1)
'csrf' => string 'ef40f882c4540bc04dce73fac1056c0d' (length=32)
ça ma l'aire bon puisse que j'ai bien mon entré ?
J'ai essayé toutes les variante rien ne ce passe comme prévue ! le truc c'est que si je ne suis pas logger je ne suis pas censés avoir de session.
hors ici il s'agit d'une inscription alors a moins de mettre directement ma variable dans le value je ne vois pas comment faire ?
captcha.php :
<?php
session_start(); //créé une nouvelle session ou restaure la session en cours
$code = strtoupper(substr(md5(uniqid(rand())),0,6));
$_SESSION'code'] = $code;
// reste de ton code
Bonjour,
Oui je serai d'accord avec toi si seulement mes session ne serai pas déjà démarré dans un autre fichier que j’inclue dans le fichier register.php la ou le formulaire me redirige.
Bonsoir j'ai trouver une autre solution pour ce captcha mais avant de fermer ce topic je voudrais avoir votre avis sur la meilleur façon de faire.
Voila j'ai un fichier index.php qui par une fonction va afficher un module a condition qu'il existe :
<?php
$auth = 0; // variable d'ahthentification pour evité une boucle de redirection l'inclure indique que ce fichier et ouver au publics
require "lib/includes.php"; // on inclu les fichier requi pour le bon fonctionnements du site
require "partials/header.php"; // on inclu le header
// nom du dossier qui contien le module example ici news que l'on pourra modifié dans l'admin
$MODULES_URL = isset($_REQUEST'modules']) ? $_REQUEST'modules'] : $_REQUEST'modules'] = 'news';
// nom du fichier sans.php que l'on pourra modifié dans l'admin
$ACTION_URL = isset($_REQUEST'action']) ? $_REQUEST'action'] : $_REQUEST'action'] = 'news';
// chemin des modules
$URL_FILE = 'modules/'.$MODULES_URL.'/'.$ACTION_URL.'.php';
if($MODULES_URL && preg_match('/^[a-z0-9]+$/i', $MODULES_URL)) {
if(file_exists($URL_FILE)) {
require_once($URL_FILE); // c'est ici que le module sera appeler
} else { // si le module n'existe pas on affiche le message
require_once "includes/block/block_no_modules.php";
}
}
require("partials/footer.php"); // on inclu le footer
Cette fonction fonctionne bien merci a xen0rise pour son aide ! mon seul soucis c'est que je suis confronté au problème liée au header location, pour faire simple dans mon formulaire de connexion je fais des conditions avec des header location si erreur logique.
Sauf qu'avec ma condition je ne peut pas mettre mes req avant l'inclusion du header.php ce qui créer l'erreur le truc auquel j'ai pensée est de refaire une condition avant le header qui fera en sort que si je suis sur le module forum par exemple il affiche ce qui a trait au forum.
Je suis encore loin de codé du MVC je commence seulement a comprendre PHP ce projet de CMS me tient a cœur pour progresser ! Sur ceux bonne soirée :)