voila, j'ai un problème avec ma page de connexion (index.php) a mon espace membre.
problème que je rencontre : dés que je rentre le BON login et mot de passe j'ai un message d'erreur : Notice: Trying to get property of non-object in C:\wamp\www\login.php on line 24
et voici ma page index
.php
A voir également:
Trying to get property of non-object
Notice: trying to get property 'groups' of non-object - Meilleures réponses
Trying to get property of non-object in - Meilleures réponses
<?php
//je fais appel à la connection à la base de données
require_once 'php_action/db_connect.php';
session_start();
$errors = array();
if ($_POST) {
$username = $_POST['username'];
$password = $_POST ['password'];
if (empty($username) || empty($password)) {
if ($username == "") {
$errors[] = "Le nom de l'utilisateur est obligatoire";
}
if ($password == "") {
$errors[] = "Le mot de passe est obligatoire";
}
} else {
$sql = " SELECT * From utilisateur WHERE nomuti = '$username'";
$result = $connect->query($sql);
if ($result->num_rows == 1) {
$password = md5($password);
// si ça existe
$mainSql = "SELECT * From utilisateur Where nomuti = '$username' AND password = '$password'";
$mainResult = $connect->query($mainSql);
if ($mainResult->num_rows == 1) {
$value = $mainResult->fetch_assoc();
$user_id = $value['id'];
//set session
$_SESSION['userId'] = $user_id;
header('location: http://127.0.0.1/ges/dashboard.php');
}else{
$errors[]= "Non de l'utilisateur et mot de passe incorrect";
}
} else{
$errors[]= "Ce nom d'utilisateur n'existe pas";
}
}
}
?>
2 - Ne pas utiliser num_rows sur des requêtes SELECT (comme expliqué dans la doc officielle de PHP....) . A la place tu peux faire un COUNT sur ta requête
Par exemple :
$sql = " SELECT * From utilisateur WHERE nomuti = '$username'";
$result = $connect->query($sql);
if ($result->num_rows == 1) {
Devient :
$sql = " SELECT * From utilisateur WHERE nomuti = :nomuti";
$datas = array(':nomuti'=>$username);
try{
$prep = $connect->prepare($sql);
$prep->execute($datas);
//on stocke le résultat de la requete dans un array
$result = $prep->fetchAll();
}catch(Exception $e){
// si la requête retourne une erreur
echo "Erreur : ".$e->getMessage();
exit();
}
if (count($result) == 1) {
ça me genere une autre erreur"Fatal error: Call to a member function execute() on a non-object in C" . Apparement le $datas n'est pas reconnu comme un objet
try{
$prep = $connect->prepare($sql);
$prep->execute($datas);
//on stocke le résultat de la requete dans un array
$result = $prep->fetchAll();
}catch(Exception $e){
// si la requête retourne une erreur
echo "Erreur : ".$e->getMessage();
exit();
}
Tu peux nous faire voire ta connexion ?
As tu appliqué ce qui est marqué (TOUT ce qui est marqué ) dans les liens que je t'ai donné ???
Montre nous ton code complet....
merci apres quelques jours de recherhes et de lecture j'ai appliqué tout ce qui etait dit dans les liens et j'ai pu voir à quel niveau se situait le probleme . je vous montrerai dans les jours à venir le code complet et les modifications apportées
1 - Activer la gestion des erreurs PDO dans la connexion ET placer chaque requête dans un bloc TRY/CATCH (comme expliqué dans ce lien : https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs )
2 - Ne pas utiliser num_rows sur des requêtes SELECT (comme expliqué dans la doc officielle de PHP....) . A la place tu peux faire un COUNT sur ta requête
Par exemple :
Devient :
As tu appliqué ce qui est marqué (TOUT ce qui est marqué ) dans les liens que je t'ai donné ???
Montre nous ton code complet....