Bonjour,
J'ai un problème dans ma requête, puisque dès que je mets la requête :

$sql="SELECT * FROM users WHERE id={$GET["id"]}";

rien ne s'affiche!

Et dès que j'enlève ```
WHERE id={$GET["id"]}


Je ne comprends pas pourquoi je ne peux pas cibler mon identifiant!!

Voilà une partie de mon code :

<?php if($Auth->user('id')): ?>
<div class="login">
<div class="account" id="account">
<span class="name"><i class="ion-person"></i><?php echo $Auth->user('login'); ?></span>
<i class="ion-chevron-down" id='ico-account'></i>
</div>
<div class="topmenu hide" id="topbar-menu">
<?php if($Auth->user('role') == 'admin'): ?>
<?php
require "./class/config.php";
mysql_connect(DB_HOST,DB_LOGIN,DB_PASS)
mysql_select_db(DB_BDD);
$sql="SELECT * FROM users WHERE id={$GET['id']}";
$req = mysql_query($sql) or die ('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
while($data=mysql_fetch_assoc($req)){
echo "<a href=\"./profile.php?id={$data['id']}\"><i class=\"ion-person\"></i> Mon compte</a>";
} ?>
<a href="./admin/index.php"><i class="ion-briefcase"></i> Administration</a>
<a href="./class/logout.php"><i class="ion-power"></i> Se deconnecter</a>
<?php else: ?>
<a href="./profile.php?id=<?php echo $Auth->user('id'); ?>"><i class="ion-person"></i> Mon compte</a>
<a href="./class/logout.php"><i class="ion-power"></i> Se deconnecter</a>
<?php endif; ?>
</div>
</div>
<?php else: ?>
<div class="login">
<a href="connexion.php" class="btn_connect"><i class="ion-power"></i>  CONNEXION</a>
</div>
<?php endif; ?>



Merci de m'aider :)

10 réponses


mirael86
Auteur
Réponse acceptée

En fait l'erreur venait en effet de ma class Auth qui ne faisait pas la différence entre l'ID de ma table" role" et celui de "user".
Pour ne pas me prendre la tête, j'ai renomé l'id de mon role en "rid" et voilà problème réglé!
Merci pour vos réponses tout de même! :)

Tout simplement parce que les accollades ne sont pas autorisées dans les requêtes MySQL. De préférence utilise PDO et pas des mysql_connect et utilise le pattern MVC pour développer ton truc : D

mirael86
Auteur

Ben c'est bizarre, j'ai toujours mis des accollades dans mes requêtes et ça s'est toujours bien passé... (plusieurs fois dans le site que je suis en train de faire).
En fait j'ai l'impression que ma requête n'est pas bonne pour la simple raison que mon URL ne va pas chercher d'id là où je me trouve.
De plus, à un autre endroit je fais :

<a href="./profile.php?id=<?php echo $Auth->user('id'); ?>"

Et il va me récupérer id du role!! Quand je mets nom, prenom, mail... ça me récupère bien les bonnes infos... comment je peux faire pour que ça me récupère le bon ID ??
PS: je ne connais pas bien du tout PDO

Ok ok reprenons un peu ...

  • Les accolades ne sont pas autorisées dans les requêtes SQL :

  • Si cette ligne te renvoie l'ID du rôle bah j'ai envie de dire que c'est ta classe Auth qui est mal codée :D
    <?php echo $Auth->user('id'); ?>
  • Je te recommande vivement de te mettre à PDO c'est plein de failles de sécurité évidentes
  • Tout ça semble brouillon quand même ^^

Hum je me trompe surement mais , $GET n'est pas bon c'est $_GET

xD ça me paraissait tellement évident que je ne l'ai pas vu. Mais c'est effectivement ça

mirael86
Auteur

Oui en copiant mon code je me suis planté! Mais hélas ça n'a rien résolu! :)

voilà l'erreur affiché :

Erreur SQL !
SELECT * FROM users WHERE id=
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Les accolades sont autorisées dans le sens ou tu l'utilises dans une variable php qui va être interprété avant l'exécution de la requête.

Le problème est que ta variable $_GET['id'] est vide.

mirael86
Auteur

quand j'arrive au boulot je vous envoi mon fichier Auth!
je ne vois pas comment redefinir id en tant que id et mon role_id en tant que role_id

Ou c'est le debut de mon code qui déconne... quand on est pas développeur c'est compliqué le PHP!! lol

Je ne vois pas trop ce qui te bloques, les autres t'ont dit le soucis, tu peux régler ça facilement, en passant par une variable temporaire :

<?php
     $user_id = $_GET['id'];
     $sql="SELECT * FROM users WHERE id=$user_id";
?>

En sachant que généralement, on fait des vérifications sur ce qu'on obtient en sortie d'un $_GET,.