Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/06/2006, 19h57   #1
Membre du Club
 
Inscription : mai 2006
Messages : 137
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 137
Points : 52
Points : 52
Par défaut [SQL] problème de concaténation

bonjour,
j"essais de récupérer une variable par la méthode GET car cette variable est passée par URL d'une autre page.
ensuite je veux executer une requête SQL avec cette variable dans l'expression de la requête.

$sql = 'DELETE FROM gestion_santep WHERE consultation = $_GET[id]';

où $id est passé par URL : /destination.php?id=4

malheureusement la variable $sql n'est pas equivalente a :

$sql = 'DELETE FROM gestion_santep WHERE consultation = 4'; (je le sais en faisant echo $sql).

quelle est la bonne syntaxe svp? Merci

yvon
yvonh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 20h10   #2
Invité régulier
 
Inscription : janvier 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 15
Points : 7
Points : 7
Citation:
Envoyé par yvonh
bonjour,

$sql = 'DELETE FROM gestion_santep WHERE consultation = $_GET[id]';

où $id est passé par URL : /destination.php?id=4

quelle est la bonne syntaxe svp? Merci

yvon
Essaye ceci :

Code :
1
2
3
 
$id = $_GET['id']; // N'oublie pas les simple quote ;) 
$sql = "DELETE FROM gestion_santep WHERE consultation = ".$id;
omarfla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 20h45   #3
Membre expérimenté
 
Développeur Web
Inscription : avril 2006
Messages : 430
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 430
Points : 538
Points : 538
Je vois de plus en plus de posts, où chacun reprend ses variables $_GET (ou $_POST ou autre) et les réassigne dans des nouvelles variables... Je n'arrive pas trop à comprendre quelle est la stratégie là dedans, mais il doit certainement y en avoir une

Sinon, c'est tout à fait possible (et ca évite de redéfinir des variables supplémentaires, inutiles) comme suit:

Code :
1
2
 
$sql = 'DELETE FROM gestion_santep WHERE consultation = '.$_GET['id'];
__________________
Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 20h48   #4
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
salut ! le mieu est de faire comme cela :

Code :
1
2
extract($_GET[]);
$sql = "DELETE FROM gestion_santep WHERE consultation ='".$id."'";
la commande extract() va créer une variable pour chaque $_get[] que tu as passé dans ton url, en l'ocurence pour toi id. ensuite dans ta requete il ne reste plus qu'a définir ton get comme cela : $id

bonne chance
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 20h50   #5
Membre expérimenté
 
Développeur Web
Inscription : avril 2006
Messages : 430
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 430
Points : 538
Points : 538
wow, ca c'est un tout petit peu dangereux, le extract, si t'as par le plus grand des malheurs une variable locale qui porte le même nom qu'un de tes index de ton $_GET, adios!

Aussi, la syntaxe correcte est (si je ne m'abuse):

__________________
Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 20h50   #6
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
Citation:
Envoyé par bkill
Je vois de plus en plus de posts, où chacun reprend ses variables $_GET (ou $_POST ou autre) et les réassigne dans des nouvelles variables... Je n'arrive pas trop à comprendre quelle est la stratégie là dedans, mais il doit certainement y en avoir une

Sinon, c'est tout à fait possible (et ca évite de redéfinir des variables supplémentaires, inutiles) comme suit:

Code :
1
2
 
$sql = 'DELETE FROM gestion_santep WHERE consultation = '.$_GET['id'];
il est vrai que cette maniere est utile si l'on utilise une seul fois la variable passé dans l'url car la création de varibale supplémentaire contraint a une baisse de performance au niveau de ton code... mais pour un simple site on ne verra pas de différence mais c'est quand même important de le savoir pour le jour où tu devras faire un site important !
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 20h52   #7
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
Citation:
Envoyé par bkill
wow, ca c'est un tout petit peu dangereux, le extract, si t'as par le plus grand des malheurs une variable locale qui porte le même nom qu'un de tes index de ton $_GET, adios!
hum interressant... je n'avais jamais pensé à cette option... peux-tu me donner un exemple concret s'il te plait ?

merci
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 20h53   #8
Membre expérimenté
 
Développeur Web
Inscription : avril 2006
Messages : 430
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 430
Points : 538
Points : 538
Citation:
Envoyé par cyrill
il est vrai que cette maniere est utile si l'on utilise une seul fois la variable passé dans l'url car la création de varibale supplémentaire contraint a une baisse de performance au niveau de ton code... mais pour un simple site on ne verra pas de différence mais c'est quand même important de le savoir pour le jour où tu devras faire un site important !
Je pense aussi que ca permet de savoir, à n'importe quel endroit du code, d'où provient la variable que tu utilises. En te forçant à toujours utiliser $_GET['id'], tu sais que cette variable à été passée en paramètre à ta page. En utilisant $id, tu peux en avoir fait n'importe quoi auparavant.
Enfin bref, conventions de code, je dirais.
__________________
Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 20h54   #9
Membre expérimenté
 
Développeur Web
Inscription : avril 2006
Messages : 430
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 430
Points : 538
Points : 538
Citation:
Envoyé par cyrill
hum interressant... je n'avais jamais pensé à cette option... peux-tu me donner un exemple concret s'il te plait ?

merci
On peut gérer ces collisions, tout de même, avec des paramètres:

"extract() vérifie l'existence de la variable avant de la créer. Le traitement des collisions est déterminé par extract_type"

extract

Mais l'option par défaut est EXTR_OVERWRITE, donc écrase une variable auparavant prédéfinie.

Ex:
Code :
1
2
3
4
5
 
$_GET['id'] = "123";
$id = "456";
extract($_GET);
echo $id; // 123
__________________
Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 20h54   #10
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
ok merci beaucoup de tes informations
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 21h08   #11
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Salut,

presque rien à voir, mais je me dois de te prévenir :
attention aux injections SQL !!

ta variable $id sorti de l'URL directement insérée dans la requête, c'est la porte ouverte à ce genre d'attaque..

si tu vises un accés public à ce développement, prends soin de protéger les données avec la fonction mysql_real_escape_string()

bon développement
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 21h41   #12
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
merci pour l'info !
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 21h55   #13
Membre expérimenté
 
Développeur Web
Inscription : avril 2006
Messages : 430
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 430
Points : 538
Points : 538
Citation:
Envoyé par ska_root
presque rien à voir, mais je me dois de te prévenir :
attention aux injections SQL !!
Ca, c'est certain qu'il faut également s'occuper de ca.

Personnellement, j'aurais fait quelque chose du genre, idée comme une autre:

Code :
1
2
3
4
 
if (is_numeric($_GET['id'])) {
  // traitement SQL
}
__________________
Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 22h18   #14
Membre du Club
 
Inscription : mai 2006
Messages : 137
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 137
Points : 52
Points : 52
Par défaut il me semble que le probleme ne soit pas la car rien de ce aue j'essais ne marche.

merci pour le debat aue cela a sucite mais mon probleme se situe a un niveau infeieur en terme de technicite je pense.
quoique je fasse (extract(), entourage des simple quotes par des doubles quotes. ) j'obtiens le message suivant:

Notice: Undefined variable: id in c:\program files\easyphp1-8\www\gestion\gestiondelete.php on line 16

pour information je vous livre la config de mon serveur php en piece jointe:
y a il un pb de config? ca fait deux jours que je me casse les dents sur ce pb.grrrr

pour info ce lscript marche sur le serveur de free mais pas chez moi.
Fichiers attachés
Type de fichier : htm phpVersion.php.htm (36,9 Ko, 0 affichages)
yvonh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 22h39   #15
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Citation:
Notice: Undefined variable: id
ca veut juste dire que id n'a pas été défini proprement.

remontre le code que tu utilises ?

P.S et sur free ca montre pas les notice, donc c'est normal, Notice, ce n'est pas une erreur !!
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 22h43   #16
Membre du Club
 
Inscription : mai 2006
Messages : 137
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 137
Points : 52
Points : 52
Par défaut bon je vais poster en integralite le code

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>Index</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
</HEAD>
<?
include("connect.php");
?>

<H1>Confirm deletion</H1>

<? if (isset($_POST['confirm'])) {
$id = $_GET['id'];
$sql = "DELETE FROM gestion_santep WHERE consultation='".$id."'";


if($result=mysql_query($sql))
{echo "l'écriture a réussi";
require("gestionLinkBar.php");

} else {
echo "erreur d'écriture.";

}
}
else if (isset($_POST['cancel'])){

echo "Goodbye";
require("gestionLinkBar.php");

}
?>
<form method="POST" action="gestionDelete.php">
<input type="submit" name="confirm" value="Confirm">
<input type="submit" name="cancel" value="Cancel">

merci
yvonh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 22h56   #17
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Code :
1
2
<? if (isset($_POST['confirm'])) {
$sql = "DELETE FROM gestion_santep WHERE consultation='".$_GET['id']."' ";
te complique pas la vie !!

et pense au balise code stp.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 23h02   #18
Membre du Club
 
Inscription : mai 2006
Messages : 137
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 137
Points : 52
Points : 52
Par défaut ok mais n empeche que ca non plus ca ne marche pas...

j ai toujours le meme message...
il me dit toujours que la variable est indefinie..
yvonh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 23h02   #19
Membre expérimenté
 
Développeur Web
Inscription : avril 2006
Messages : 430
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 430
Points : 538
Points : 538
ouais, mais, d'une part:

Code :
1
2
 
<? if (isset($_POST['confirm'])) {
et d'autre part:

Code :
1
2
 
$sql = "DELETE FROM gestion_santep WHERE consultation='".$_GET['id']."' ";
T'es en GET ou en POST, pour finir ?
Faudrait peut-être utiliser tout le temps les variables GET, ou tout le temps les POST, pour récupérer les valeurs de ton formulaire posté.
__________________
Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 23h04   #20
Membre expérimenté
 
Développeur Web
Inscription : avril 2006
Messages : 430
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 430
Points : 538
Points : 538
Et as-tu un champs hidden dans ton formulaire qui s'appelle id ?

Code :
1
2
 
<input type="hidden" name="id" value="123" />
Si non, tu peux encore poster pendant longtemps
__________________
Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h03.


 
 
 
 
Partenaires

Hébergement Web