Probléme requete sql = unknow column - PHP - Programmation
Marsh Posté le 18-01-2007 à 22:36:29
Je me souviens avoir vu des messages concernant des problèmes similaires. A chaque fois, le programmeur avait eu l'étrange et mauvaise idée de nommer une colonne "id" au lieu de "toto_id", or il semble que "id" soit plus ou moins un mot réservé pour MySQL. Je crois me souvenir que la requête passait en préfixant le champ "id" par le nom de la table ou un alias de la table. En l'occurrence, il faudrait essayer :
$requete22 = "SELECT * FROM ".$bien." t1 WHERE t1.id = '".$idl."'"; |
Marsh Posté le 18-01-2007 à 23:01:40
Ou simplement que si le type de la colonne id est un numérique, il ne faut pas de guillemets
Marsh Posté le 18-01-2007 à 23:39:47
marche non plus
c est incroyable
SELECT * FROM location t1 WHERE t1.id = 'RECP1003'
Unknown column 'RECP1003' in 'where clause'
Marsh Posté le 18-01-2007 à 23:40:50
id est de type varchar(255) et clé primaire
Marsh Posté le 19-01-2007 à 00:19:33
j'ai trouvé
ca ne venait pas de select mais de delete ou il faut mettre le guillemet.
c'est tout béte. je suis ridiculiser
excusez moi les gars et merci pour vos réponses
Marsh Posté le 19-01-2007 à 01:19:37
olivthill a écrit : Je me souviens avoir vu des messages concernant des problèmes similaires. A chaque fois, le programmeur avait eu l'étrange et mauvaise idée de nommer une colonne "id" au lieu de "toto_id" |
"id" n'est pas un mot réservé de MySQL d'après http://dev.mysql.com/doc/refman/5.0/en/reserved.
(Je l'utilise tout le temps comme identifiant numérique, jamais eu de soucis.)
Marsh Posté le 19-01-2007 à 11:15:03
geforst a écrit :
|
Dzzzzzzzzzt § ALERTE CODE ROUGE §§§ ALERTE CODE ROUGE §§§§
FAILLE DE SECURITE, VIOLATION DU PROTOCOLE HTTP, ET NON-RESPECT DE L'ACCESSIBILITE DETECTES §§§§
ALERTE §§§
Alors moult erreurs ici.
Tu utilise les $_GET pour récupérer l'annonce à supprimer. Ca veut dire qu'il existe une URL qui cause un effet de bord. Ce qui est extrêmement dangereux. Le protocole HTTP/1.1 veut qu'une requête modifiant l'état d'une application (ajout, modification, suppression, etc.) doit être transmise via la méthode POST, et non GET comme tu l'as fait. Une URL, appellée en GET, doit pouvoir être appelée autant de fois qu'on veut, rien ne doit changer.
Ce genre de truc a déjà causé pas mal de dégats : genre avec le premier Google Accelerator. Il préchargeait tous les liens d'une page, histoire d'accélerer le surf. Si un lien cause la suppression d'un élément, alors le fait de tout-précharger va causer la tout-suppression, ce qui est évidemment catastrophique.
Il faut donc convertir tous les liens de suppression en formulaires, du genre :
Code :
|
Si confirmation de suppression il y a, alors normalement le mieux est de mettre une vraie page de suppression, qui ajouterait en plus un token de confirmation, qui serait vérifié côté serveur lors du réenvoi (via session par exemple c'est pas mal). Parce que là comme ça ma solution est toujours sensible aux CSRF (mais déjà moins évidente car basée sur POST...)
Tu mets dans ta requête DELETE directement ce qu'il y a dans la requête... Alors combine le problème n°1 avec celui-là : Je t'envoi par mail un truc genre "Bonjour, y'a un bug là : http://pouet.com/tagada.php?action [...] =pouet.... Là du coup la requête SQL va ressembler à :
Code :
|
*boom*, tout sera supprimé
Et comme tu met en plus la table directement à partir de la requête, je peux en mettre une autre et supprimer totalement autre chose...
La solution est d'utiliser mysql_real_escape_string et d'autres trucs encore pour protéger. Déjà pour la table prise de la requête, faut une liste des tables authorisées quelque part, sinon *boom*.
Code :
|
Il ne faut resposer sur du JS pour les messages, mieux vaut mettre une page de confirmation ou rien du tout. Il y a un autre problème avec la confirmation :
Après une requête POST (vu que tu aura changé ), il faut rediriger vers le résultat via un header 303 :
Code :
|
Et le tour est joué
Marsh Posté le 18-01-2007 à 21:40:13
Bonjour à tous
j'ai un probléme bizarre pour lancer la requete sql , un message erreur apparait 'unknwon column 'TD1001' in where clause'.
la requete était $requete22 = "SELECT * FROM ".$bien." WHERE id = '".$idl."'"; (ou idl = TD1001).
j'etais essayer ce code avec d 'autre fichier php et cela marche sauf le code ci-dessous .
j'ai déja essayer sans guillement comme ceci $requete22 = " SELECT * FROM $bien WHERE id = $idl "; mais même résultat .
ce que je comprend pas pourquoi le messaeg disait que 'TD1001' est comme colonne alors que c'est 'id'.
Merci