Une page index.php vide qui inclut membres.php ? Ou tu nous caches du code ?
(t'as vu, on a des balises php sympas)
die(include('login.php'));
J'ai la gerbe.
Lis la documentation sur include. Lis aussi celle sur die, ça peut que faire du bien aussi (même si c'est pas ce qui me donne ce sentiment).
<HTML>
Je crois qu'on est sur un site IT dédié à l'accessibilité et aux bonnes pratiques web. Donc là, tu risques le lynchage en postant un truc qui serait à peu près passé y'a, quoi, 10 ans ?
a écrit :
J'ai pas mis session_start() à cause que $_SESSION['users']=.... semble initier la session.
Fail. C'est juste que tu as inclus. Doc, doc, doc, toujours
Question : t'as essayé de mater le source, en explorant ? Parce qu'à mon avis, ça vaudra son pesant de cacahOuètes. Testes avec un navigateur qui crashe quand la structure HTML est foireuse, genre IE; ça passera mieux.
if(isset($_POST['submit'])){
Le traitement de la validation en plein milieu du html après le form. Tu oublies la différence primordiale entre les langages dits "statiques" (HTML...) et dynamiques (PHP...).
$users=trim(htmlentities(preg_replace('/([^a-z0-9])/i','',$users)));
Très belle démo de "comment ne pas vérifier ses données".
Pourtant, alsacreations propose des documents sympas sur ce point, de mémoire.
Donc:
- vérification regexp par JS avant validation, ça évite de se retaper tout le form
- vérification regexp en PHP à la validation. Sauf que tu vérifies, et tu tronque pas violemment. Là, si je tape "a_Toto_", ça donnera "aToto". D'ici à ce que j'arrive à me connecter...
- htmlentities, lui préférer htmlspecialchars. Mais de toutes manières, c'est à l'affichage et non à l'enregistrement qu'il faut faire ça.
$apass=md5($_POST['apass']);
$apass=mysql_real_escape_string(md5($_POST['apass']));
Là, soit t'as copié / collé, soit t'as pas fait attention, soit tu vises le best-of plus.
- md5 deux fois. Chapeau bas. Il sert à quoi le premier vu que tu l'ignores complètement ?
- md5 retourne une chaîne... au format md5. J'ai pas souvenir que ça crachait autre chose que du caractère tout à fait compatible SQL. Confirmation / Infirmation ?
$sql="SELECT * FROM `".PRETABLE."auth` WHERE `users`='$users' AND `apass`='$apass'";
T'as mis les quotes correctement, les backquotes par réflexe. Dommage que tu n'utilises pas de préparées : ça t'aurait viré la moitié du code.
while($verif = mysql_fetch_assoc($result)){
define("EMAIL",$verif['email']);
define("NIV",$verif['niv']);
}
A tout hasard, tu travailles avec quel niveau d'erreurs activé ?
- en fait, le select s'avère inutile. Une clef primaire au mieux, une clef UNIQUE au pire sur le champ, tu insères. Si ça marche, rien à faire, sinon c'est que c'est déjà pris.
- define, pour le fun ? Les variables, que ce soit scalaires ou tableaux, ça t'avait soulé ?
- bah justement, définir 50 fois une constante, bizarrement, PHP aime pas trop.
header('location:./');
exit() après un header de type location.
session_regenerate_id();
$_SESSION = array();
session_unset();
session_destroy();
Consultes la doc sur les sessions et sur ces fonctions. Là, tu fais beaucoup d'opérations inutiles.
sleep(2);
C'est pour faire joli ?
Et encore, je ne traite pas du HTML, là...