Ce site utilise des cookies pour améliorer uniquement votre expérience utilisateur.
Vous pouvez lire à tout moment comment nous utilisons les cookies sur le site.
Bonjour à tous,
Je suis débutant en PHP et j'essaye de créer un site avec les tutos présent sur ce site.
Malheureusement, des erreurs s'affiche à l'éxecution...
Les erreurs sont :
"
Notice: Undefined variable: rounds in C:\xampp\htdocs\Site Dessin\connexion.php on line 41
Notice: Undefined variable: yteuyifqsjonoouyhyFihfozfugg in C:\xampp\htdocs\Site Dessin\connexion.php on line 41
Notice: Trying to access array offset on value of type bool in C:\xampp\htdocs\Site Dessin\connexion.php on line 44
Notice: Trying to access array offset on value of type bool in C:\xampp\htdocs\Site Dessin\connexion.php on line 49
"
J'insère ici le code posant problème :
merci d'avance pour votre aide 🙂
<?php
session_start();
include('connexionDB.php');
if(isset($_SESSION['id'])){
header('Location: index.php');
exit;
}
if(!empty($_POST)){
extract($_POST);
$valid = true;
if(isset($_POST['connexion'])){
$mail = htmlentities(strtolower(trim($mail)));
$mdp = trim($mdp);
if(empty($mail)){
$valid = false;
$er_mail = "Il faut mettre un mail";
}
if(empty($mdp)){
$valid = false;
$er_mdp = "Il faut mettre un mot de passe";
}
$req = $DB->query("SELECT *
FROM utilisateur
WHERE mail = ? AND mdp = ?",
array($mail, crypt($mdp, "$6$rounds=5000$yteuyifqsjonoouyhyFihfozfugg$")));
$req = $req->fetch();
if ($req['id'] == ""){
$valid = false;
$er_mail = "Le mail ou le mot de passe est incorrecte";
}
if($req['token'] <> NULL){
$valid = false;
$er_mail = "Le compte n'a pas été validé";
}
if ($valid){
$_SESSION['id'] = $req['id'];
$_SESSION['nom'] = $req['nom'];
$_SESSION['prenom'] = $req['prenom'];
$_SESSION['mail'] = $req['mail'];
header('Location: index.php');
exit;
}
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Connexion</title>
</head>
<body>
<div>Se connecter</div>
<form method="post">
<?php
if(isset($er_mail)){
?>
<div><?= $er_mail ?></div>
<?php
}
?>
<input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required>
<?php
if(isset($er_mdp)){
?>
<div><?= $er_mdp ?></div>
<?php
}
?>
<input type="password" placeholder="Mot de passe" name="mdp" value="<?php if(isset($mdp)){ echo $mdp; }?>" required>
<button type="submit" name="connexion">Se connecter</button>
</form>
</body>
</html>
J'ai réussi à trouver l'erreur dans le code !
Il ne fallait pas mettre if($req['id']==""){
Mais plutôt if(!$req){
Cela enlève bien mon erreur.
Pour ce qui est de la variable non-définie, il suffit de changer :
$req = $DB->query("SELECT *
FROM utilisateur
WHERE mail = ? AND mdp = ?",
array($mail, crypt($mdp, "$6$rounds=5000$yteuyifqsjonoouyhyFihfozfugg$")));
$req = $req->fetch();
par :
$rounds=0;
$req = $DB->query("SELECT *
FROM utilisateur
WHERE mail = ? AND mdp = ?",
array($mail, crypt($mdp, "$6$rounds=5000$"."yteuyifqsjonoouyhyFihfozfugg$")));
$req = $req->fetch();
Et voila 🙂
J'ai réussi à trouver l'erreur dans le code !
Il ne fallait pas mettre if($req['id']==""){
Mais plutôt if(!$req){
Cela enlève bien mon erreur.
Pour ce qui est de la variable non-définie, il suffit de changer :
$req = $DB->query("SELECT *
FROM utilisateur
WHERE mail = ? AND mdp = ?",
array($mail, crypt($mdp, "$6$rounds=5000$yteuyifqsjonoouyhyFihfozfugg$")));
$req = $req->fetch();
par :
$rounds=0;
$req = $DB->query("SELECT *
FROM utilisateur
WHERE mail = ? AND mdp = ?",
array($mail, crypt($mdp, "$6$rounds=5000$"."yteuyifqsjonoouyhyFihfozfugg$")));
$req = $req->fetch();
Et voila 🙂
*** MA LIGNE 44 EST CELLE CI ***
je ne sais pas pourquoi mon code à été décalé...
if ($req['id'] == ""){
Re @Jerem971,
J'ai réussi a réduire les erreurs à une seule qui est celle ci :
Notice: Trying to access array offset on value of type bool in C:\xampp\htdocs\Site Dessin\connexion.php on line 44
J'ai essayer d'utiliser "var_dump
" comme tu me l'as conseillé mais j'avoue ne pas être capable de resoudre mon erreur gâce à celà...
J'ai tout de même modifié mon code alors le voici :
<?php
session_start();
include('connexionDB.php'); // Fichier PHP contenant la connexion � votre BDD
// S'il y a une session alors on ne retourne plus sur cette page
if (isset($_SESSION['id'])){
header('Location: index.php');
exit;
}
// Si la variable "$_Post" contient des informations alors on les traitres
if(!empty($_POST)){
extract($_POST);
$valid = true;
if (isset($_POST['connexion'])){
$mail = htmlentities(strtolower(trim($mail)));
$mdp = trim($mdp);
if(empty($mail)){ // V�rification qu'il y est bien un mail de renseign�
$valid = false;
$er_mail = "Il faut mettre un mail";
}
if(empty($mdp)){ // V�rification qu'il y est bien un mot de passe de renseign�
$valid = false;
$er_mdp = "Il faut mettre un mot de passe";
}
// On fait une requ�te pour savoir si le couple mail / mot de passe existe bien car le mail est unique !
$rounds=0;
$req = $DB->query("SELECT *
FROM utilisateur
WHERE mail = ? AND mdp = ?",
array($mail, crypt($mdp, "$6$rounds=5000$"."yteuyifqsjonoouyhyFihfozfugg$")));
$req = $req->fetch();
// Si on a pas de résultat alors c'est qu'il n'y a pas d'utilisateur correspondant au couple mail / mot de passe
if ($req['id'] == ""){
$valid = false;
$er_mail = "Le mail ou le mot de passe est incorrecte";
}
// S'il y a un r�sultat alors on va charger la SESSION de l'utilisateur en utilisateur les variables $_SESSION
if ($valid){
$_SESSION['id'] = $req['id']; // id de l'utilisateur unique pour les requ�tes futures
$_SESSION['nom'] = $req['nom'];
$_SESSION['prenom'] = $req['prenom'];
$_SESSION['mail'] = $req['mail'];
header('Location: index.php');
exit;
}
}
}
?>
Re:
Parfait pour XAMPP ! 😉
Tu as 4 messages d'erreurs mais en vrai si on ne compte pas le doublons, cela te fait 2.
Pour le 1er message d'erreur, tes variables sont indéfinies... Tu dois donc déclarer tes variables...
Pour le 2ème message d'erreur, ceci arrive généralement lorsque tu essaie d'atteindre un champ inexistant d'un tableau... Je te conseille de faire un "var_dump
" pour voir exactement le contenu de tes variables...
Bonjour et encore merci pour vos réponses rapides !
Pour ce qui est des codes du site, je les ai téléchargé mais les erreurs persistent 😕
@Jerem971 la version que j'ai installée est XAMPP
@fredoloulou j'ai essayé ton code mais les mêmes erreurs sont affichées 😕
ensuite pour les titre de page tu peux mettre ceci dans ton header.php
du coup dans tes pages tu as juste as déclaré $title="ton titre";
<title>
<?php if (isset($title)) : ?>
<?php echo $title; ?>
<?php else : ?>
<?php endif ?>
</title>
Voici la connxionDB
<?php
// Déclaration d'une nouvelle classe
class connexionDB {
private $host = ''; // nom de l'host
private $name = ''; // nom de la base de donnée
private $user = ''; // utilisateur
private $pass = ''; // mot de passe
//private $pass = ''; // Ne rien mettre si on est sous windows
private $connexion;
function __construct($host = null, $name = null, $user = null, $pass = null){
if($host != null){
$this->host = $host;
$this->name = $name;
$this->user = $user;
$this->pass = $pass;
}
try{
$this->connexion = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->name,
$this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
}catch (PDOException $e){
echo 'Erreur : Impossible de se connecter à la BDD !';
die();
}
}
public function query($sql, $data = array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
return $req;
}
public function insert($sql, $data = array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
}
}
$DB = new connexionDB();
?>
Bonjour,
Donc je vais tenter de te donner la réponse a ton problème que tu trouvera si dessous
<?php
session_start(); //on demarre la session
$title = "Connexion"; //titre de page je t'esplique dans un autre commentaire
include('elements/bd/connexionDB.php'); //on se connecte a la base de donnée je te fourni dans un autre commentaire
if (isset($_SESSION['id'])){ //on verifie si une session existe ou pas en gros si ton utilisateur et deja connecté ou poas
header('Location: index'); //si ton utilisateur et deja connecté alor on stop le script et on le renvoie a index.php par exemple
exit; //on stop le script
}
if(!empty($_POST)){ //on verifie le post partie html quand tu remplie des case on appelle sa un POST
extract($_POST); //si les infos du POST son ok on extrait
$valid = true; //cette partie retourne un boolean en gros vrai ou faux sert a valider les info de ton utilisateur
if (isset($_POST['connexion'])){ //le POST et nommé connexion
$mail = (String) strtolower(trim($mail)); //pour se connecter ton utilisateur va entré un mail le meme que celui de l'inscription
$password = (String) trim($password); //pour se connecter ton utilisateur va entré son mot de passe crypté
if(empty($mail)){ //on vérifie dans la case mail si elle et remplie
$valid = false; //si elle et vide on valide pas
$err_mail = "Il faut mettre un mail"; //on renvoie un message a l'utilisateur
}
if(empty($password)){ //pareil que au dessus
$valid = false; //pareil
$err_password = "Il faut mettre un mot de passe"; //pareil
}
$req = $DB->query("SELECT * FROM utilisateur WHERE mail = ? AND password = ?", //on selectionne tous se qu'il y a dans la colonne utilisateur de ta db mais plus précisément on regarde si le mail rentré dans inscription et le mdp rentré dans inscription corresponde
array($mail, crypt($password, '$6$rounds=5000$$celui que tu a mis a inscription.php$'))); //reponse au dessus
$verif_utilisateur = $req->fetch(); //si ces ok on fait un fetch qui recupere une donné fetchAll recupere tous
if (!isset($verif_utilisateur['id'])){ //plus haut dans la db il y a (SELECT * FROM) * veut dire tous les utilisateur ici on verifie par raport a son id qui et unique si le mail et le mdp corresponde
$valid = false; // vu plus haut
$err_mail = "Le mail ou le mot de passe est incorrecte"; //vu plus haut
}elseif($verif_utilisateur['confirmation'] == 0){ //ceci sert a confirmé le compte je t'espliqueré plus tard j'ai vu que tu a essayé dans se que tu a posté
$valid = false; //vu plus haut
$err_mail = "Veuillez confirmer votre compte"; //vu plus haut
}
if($verif_utilisateur['rs_rank'] == -2){ //ceci est un role qui sert a bloquer un compte
$valid = false; //vu plus haut
$err_mail = "Votre compte est suspendu ou banni"; // vu plus haut
}
$ip = $_SERVER['REMOTE_ADDR']; //sert a connaitre l'ip publique de l'utilisateur ne peut servir a bannir car en france ton ip publique change tous les 20 ou 30 jour moi je men sert pour savoir combien de personne son sur le site
if ($valid){
$req = $DB->query("UPDATE utilisateur SET ip = ? WHERE id = ?",
array($ip, $verif_utilisateur['id'])); //expliqué plus haut je recupere l'ip par rapport a l'id de l'utilisateur et je fais un update pour mettre a jour
$req = $DB->query("UPDATE utilisateur SET date_connexion = ? WHERE id = ?",
array(date("Y-m-d H:i:s"), $verif_utilisateur['id'])); //la je recupere la date de la derniere connexion par rapport a l'id de l'utilisateur ceci me permet de savoir si l'utilisateur vien regulierement ou pas
$req = $DB->query("SELECT * FROM utilisateur WHERE id = ?",
array($verif_utilisateur['id'])); //la je recupere tous les infos se trouvant dans utilisateur par rapport a son id
$verif_utilisateur = $req->fetch(); //vu plus haut
$_SESSION['id'] = $verif_utilisateur['id'];
$_SESSION['pseudo'] = $verif_utilisateur['pseudo'];
$_SESSION['mail'] = $verif_utilisateur['mail'];
$_SESSION['avatar'] = $verif_utilisateur['avatar']; //pour les fetch
header('Location: index');
exit;
}
}
}
?>
Hello @RobinL,
Si tu as besoin d'aide concernant l'utilisation des balises, c'est ce topic (j'ai fait le nécessaire en rééditant ton topic).
Premièrement, il faut toujours télécharger les codes sources plutôt que de copier/coller. En copiant/collant, des caractères invisibles s'incrustent, ce qui fait que certains messages d'erreurs sont présents par la suite...
Utilises-tu Wamp, Mamp, XAMPP ou un autre ? Si tu utilises un autre, XAMPP est recommandé par la communauté Sitedudev, voir la raison.