j'ai un problème au niveau d'une variable où je ne saisis pas où est l'erreur. J'ai deux tables dans mysql, et sur une page php je voudrais récupérer la valeur de l'ID de l'utilisateur qui est créé dans l'espace membre, pour pouvoir récupérer cette valeur et pouvoir l'utiliser dans une action Sql mais j'ai un souci, lorsque je crée une nouvelle fonction avec $_SESSION['auth']->id pour récupérer juste l'id il me met que $_session est une variable indéfinie. Comme ceci :
( ! ) Notice: Undefined variable: _SESSION in C:\wamp64\www\espace\Calendrier\public\index.php on line 7
Call Stack
#
Time
Memory
Function
Location
1
0.0029
409104
{main}( )
...\index.php:0
( ! ) Notice: Trying to get property 'id' of non-object in C:\wamp64\www\espace\Calendrier\public\index.php on line 7
Call Stack
#
Time
Memory
Function
Location
1
0.0029
409104
{main}( )
...\index.php:0
Donc j'ai essayé en dessous de mettre ID : <?=$_SESSION['auth']->id; ?> pour voir si l'utilisateur est bien connecté et si il me ressort une valeur et oui il m'en ressort une. Alors pourquoi ici il me ressort une valeur alors qu'au dessus la variable $_SESSION n'existe pas.
Bonjour en effet je n'ai en aucun cas fais de session_start. Et dans les fichiers que j'inclues de la ligne 2 à 5 il y avait un fichier avec :
function logged_only(){
if (session_status() == PHP_SESSION_NONE){
session_start();
}
if(!isset($_SESSION['auth'])){
$_SESSION['flash']['danger'] = "Vous n'avez pas le droit d'acceder à cette page";
header('Location: login.php');
exit();
}
}
Je pensais que faire un session_start ici aurait fonctionné mais non il faut faire un session start dans le fichier directement.
Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.
Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).
De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.
Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.
Pour modifier votre titre, éditez le premier message de votre sujet.
(titre originel : Variable indéfinie)
Pas d'aide concernant le code par MP, le forum est là pour ça :)
j'ai à nouveau un problème, j'ai donc démarré ma session dans la page index mais maintenant je voudrais utiliser la variable $user_id pour pourvoir comparé l'id de l'utilisateur avec un autre id et d'afficher que ceux qui sont égaux, voici le code:
<?php
namespace Calendar;
class Events {
private $pdo;
public function __construct(\PDO $pdo){
$this->pdo = $pdo;
}
public function getEventsBetween (\DateTime $start, \DateTime $end) : array{
$sql = "SELECT * FROM events WHERE id_user = '$user_id' AND start BETWEEN '{$start->format('Y-m-d')}' AND '{$end->format('Y-m-d')}' ORDER BY start ASC";
$statement = $this->pdo->query($sql);
$results = $statement->fetchAll();
return $results;
}
Voici ce qu'il m'affiche :
( ! ) Notice: Undefined variable: user_id in C:\wamp64\www\espace\Calendrier\src\Calendar\Events.php on line 14
public function getEventsBetween (int $user_id, \DateTime $start, \DateTime $end) : array{
$sql = "SELECT * FROM events WHERE id_user = '$user_id' AND start BETWEEN '{$start->format('Y-m-d')}' AND '{$end->format('Y-m-d')}' ORDER BY start ASC";
$statement = $this->pdo->query($sql);
$results = $statement->fetchAll();
return $results;
}
J'avais fait cela auparavant et j'avais vu cette erreur et c'est la première fois que j'ai vu ce genre d'erreur :
( ! ) Fatal error: Uncaught TypeError: Argument 1 passed to Calendar\Events::getEventsBetween() must be of the type int, object given, called in C:\wamp64\www\espace\Calendrier\src\Calendar\Events.php on line 21 and defined in C:\wamp64\www\espace\Calendrier\src\Calendar\Events.php on line 13
Parce que tu as appelé ta méthode avec $_SESSION['auth'] au lieu de $_SESSION['auth']->id, me trompe-je ?
Sinon il faut changer le typehinting pour object ou, mieux, le nom de ta classe, du premier paramètre pour passer ton objet et changer $user_id en $user_id->id dans la requête (du coup, il vaudrait mieux dans ce cas changer le nom de la variable $user_id en $user ou quelque chose dans ce genre).
Et j'approuve le message ci-dessus de christouphe, même si tes variables/données ne présentent a priori aucun risque, ne serait-ce que pour la lisibilité et par principe, il serait vivement conseillé de binder tes valeurs.
Pour mettre en paramètre $user_id je dois le mettre au même niveau que \DateTime $start?
Vous me conseiller alors d'utiliser cela: $sth->bindValue(':calories', $calories, PDO::PARAM_INT); pour pouvoir avoir une valeur correcte et pour qu'il y ai aucun probleme lors de ma requete ?
Montre voir le code de ton appel. Ce sera plus simple pour te répondre.
> Vous me conseiller alors d'utiliser cela: $sth->bindValue(':calories', $calories, PDO::PARAM_INT); pour pouvoir avoir une valeur correcte et pour qu'il y ai aucun probleme lors de ma requete ?
Oui, en adaptant bien sûr mais c'est l'idée, oui (et ça implique de préparer la requête, pas juste de faire des binds - je précise, sait-on jamais).
Je te demandais l'appel de ta méthode mais tu me donnes son code ... Avec $_SESSION['auth'](->id) directement utilisée dans celle-ci, tu limites grandement sa réutilisation aussi.
> et ça implique de préparer la requête, pas juste de faire des binds - je précise, sait-on jamais
lol, PDO::query = requête non préparée, pour préparer la requête tu dois utiliser la méthode PDO::prepare à la place
Merci pour la 404, tout ça pour ajouter les tags [Erreur] [MySQL] qui n'apportent strictement rien dans le titre. Je ne donne pas cher de ta peau si un modérateur passe par là :
Oupsi pardon au début je mettait en paramètre comme ceci :
public function getEventsBetween (int $user_id,\DateTime $start, \DateTime $end) : array{
Mais merci pour ces conseilles !
(j'utilise les </> comme tu peux voir ci-dessus)
je débute sur le forum donc j'ai encore du mal avec tous les tags etc...
- Edité par TimotheiChartier1 6 avril 2020 à 22:17:54
Variable indéfinie
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Pas d'aide concernant le code par MP, le forum est là pour ça :)
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli