Stocker toutes les variables dans $_SESSION
Résolu
flo39400
Messages postés
659
Statut
Membre
-
jordane45 Messages postés 40050 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 40050 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Voila je cherche a apprendre a coder mais la encore je me heurte a un problème, j'ai mis en place un page d'inscription qui fonctionne bien, sur cette même page j'ai mis a la suite une partie connection, mais quand je veux faire ma commande avec ->fecht();
J'ai un message d'erreur :
Fatal error: Uncaught Error: Cannot use object of type stdClass as array
Error: Cannot use object of type stdClass as array
Merci de votre aide.
Voila je cherche a apprendre a coder mais la encore je me heurte a un problème, j'ai mis en place un page d'inscription qui fonctionne bien, sur cette même page j'ai mis a la suite une partie connection, mais quand je veux faire ma commande avec ->fecht();
J'ai un message d'erreur :
Fatal error: Uncaught Error: Cannot use object of type stdClass as array
Error: Cannot use object of type stdClass as array
<?php
session_start();
include ('cobdd.php');
if(isset($_POST['formconnexion']))
{
$pseudoconnect = htmlspecialchars($_POST['pseudoconnect']);
$mdpconnect = sha1($_POST['mdpconnect']);
if(!empty($pseudoconnect) AND !empty($mdpconnect))
{
$requser = $bdd->prepare("SELECT * FROM user WHERE pseudo = ? AND mp = ?");
$requser->execute(array($pseudoconnect, $mdpconnect));
$userexist = $requser->rowCount();
if($userexist == 1)
{
$userinfo = $requser->fetch();
$_SESSION['id'] = $userinfo['id'];
$_SESSION['nom'] = $userinfo['nom'];
$_SESSION['prenom'] = $userinfo['prenom'];
$_SESSION['pseudo'] = $userinfo['pseudo'];
$_SESSION['mp'] = $userinfo['mp'];
echo 'ok';
}
else
{
$etat = 'Mauvais identifiant !';
}
}
else
{
$etat = 'Tous les champs ne sont pas remplis !';
}
}
?>
Merci de votre aide.
A voir également:
- Stocker toutes les variables dans $_SESSION
- Où sont stockés les mots de passe sur android - Guide
- Où sont stockés les messages whatsapp supprimés - Guide
- Stocker image en ligne - Guide
- Gabin veut supprimer les cookies stockés par son navigateur web. sur quel élément doit-il cliquer dans le menu de son navigateur ? - Guide
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret? ✓ - Forum Python
1 réponse
Bonjour,
1 - récupère proprement les variables AVANT de les utiliser.
¨Pour cela, utilise l'écriture ternaire... comme par exemple ici : https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index
2 - Vu que tu utilises PDO ... active l'affichage des erreurs : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
NB : penses à mettre TOUTES tes requêtes dans des blocs TRY/CATCH comme dans l'exemple du lien)
3 - N'utilises pas ROWCOUNT.
Regarde la doc :
https://www.php.net/manual/fr/pdostatement.rowcount.php
On peut y lire :
A la place .. fais donc un fetchAll puis un COUNT dessus.
1 - récupère proprement les variables AVANT de les utiliser.
¨Pour cela, utilise l'écriture ternaire... comme par exemple ici : https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index
2 - Vu que tu utilises PDO ... active l'affichage des erreurs : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
NB : penses à mettre TOUTES tes requêtes dans des blocs TRY/CATCH comme dans l'exemple du lien)
3 - N'utilises pas ROWCOUNT.
Regarde la doc :
https://www.php.net/manual/fr/pdostatement.rowcount.php
On peut y lire :
ce comportement n'est pas garanti pour toutes les bases de données
A la place .. fais donc un fetchAll puis un COUNT dessus.
<?php try{ $bdd =new PDO('mysql:host=127.0.0.1; dbname=sitebeta; charset=utf8', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } ?>Bon après il est vrai que je doit mettre mes requêtes SQL et la tache exécutoire dans des variable distique.
Et utiliser try et catch a chaque requêtes SQL afin de voir les erreurs a chaque bout de code comme vous me l'avais dit il y a quelques temps.
Pour le 3 donc si j'ai bien compris:
$sqlrequete = "SELECT * FROM user WHERE pseudo = ? AND mp = ?"; $data = array($pseudoconnect, $mdpconnect); try{ $requser = $bdd->prepare(); $requser->execute($data); $userexist = $requser->fetchAll(); }catch(Exception $e){ echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($data); }Mais donc COUNT(*) doit être placer dans la requête SQL mais cela sert juste a a compter le nombre de résultats qu'il y a par rapport a la requête si j'ai bien compris ?
Ou je peu l'uttiliser comme cela
Merci d'avance pour votre réponse.
Puis, dans ton code :
$sql = "SELECT * FROM user WHERE pseudo = :pseudo AND mp = :mp "; $data = array(':pseudo'=>$pseudoconnect ,':mp'=> $mdpconnect ); try{ $requser = $bdd->prepare($sql); $requser->execute($data); $result = $requser->fetchAll(); }catch(Exception $e){ echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($data); } $nbresult = !empty($result) ? count($result) : 0; if($nbresult == 1) { $userinfo = $result[0]; $_SESSION['id'] = $userinfo['id']; $_SESSION['nom'] = $userinfo['nom']; $_SESSION['prenom'] = $userinfo['prenom']; $_SESSION['pseudo'] = $userinfo['pseudo']; $_SESSION['mp'] = $userinfo['mp']; echo 'ok'; } else { $etat = 'Mauvais identifiant !'; }Pourquoi changer l'attribue PDO par défaut en PDO::FETCH_ASSOC ?
Pouvez vous m'expliquer cette ligne :
Merci beaucoup.