Concaténation dans une requête SQL [Résolu]

BenamourJr 31 Messages postés jeudi 25 mars 2010Date d'inscription 18 septembre 2010 Dernière intervention - 30 mars 2010 à 01:29 - Dernière réponse : BenamourJr 31 Messages postés jeudi 25 mars 2010Date d'inscription 18 septembre 2010 Dernière intervention
- 30 mars 2010 à 11:26
Bonsoir !

J'essaye depuis quelques temps de faire fonctionner une requête SQL... en vain :s
Dans mon code je récupère deux types de variables provenant d'un formulaire (des $_POST['lien1'], $_POST['lien2'], $_POST['lien3'],... et ainsi de suite ainsi que des $_POST['id1'], $_POST['id2'],...) que j'utilise dans une requête SQL que voici :

<?php
for ($nb_lignes = 1; $nb_lignes <= $_POST['nb_liens']; $nb_lignes++)
{
$table = $_POST['lien' . $nb_lignes . ''];
$id2 = $_POST['id' . $nb_lignes . ''];
$requete = "INSERT INTO ".$table."(id_article, id2) VALUES('".$_GET['id']."', '".$id2."')";
echo $requete . '
'; // que j'ai inséré pour y voir plus clair dans mon erreur
$bdd->exec($requete);
}
?>


l'echo $requete me retourne ceci quand $_POST['nb_liens'] vaut par exemple 3 :

INSERT INTO article_presse_dossier(id_article, id2) VALUES('47', '5')
INSERT INTO article_presse_individu(id_article, id2) VALUES('47', '2')
INSERT INTO article_presse_dossier(id_article, id2) VALUES('47', '2')

Ce qui me semble tout à fait correct, puis que j'ai les champs 'id_article' et 'id2' dans les deux tables concernées. Seulement voila, rien n'est ajouté dans mes tables... ca ne fonctionne pas :s

Si quelqu'un pouvait m'aider à trouver mon erreur je lui en serais vraiment très reconnaissant, merci ! :)
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 30 mars 2010 à 09:19
3
Merci
Bonjour,

As tu essayé dans un premier temps le retour d'erreur SQL pour voir si tout allais bien :
<?php
$bdd->exec($requete) or die(print_r($bdd->errorInfo(), true));
?>


_________________________________
Min iPomme

Merci Tonio_35 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Tonio_35
BenamourJr 31 Messages postés jeudi 25 mars 2010Date d'inscription 18 septembre 2010 Dernière intervention - 30 mars 2010 à 11:26
0
Merci
en effet, j'ai ajouté un petit or die(print_r($bdd->errorInfo(), true)) et j'ai directement vu d'où venait mon erreur (le nom de mon champ c'est id_article_presse et non id_article... xD). Merci en tout cas :)

Par contre maintenant j'ai un autre problème :s j'ai utilisé les requêtes préparés mais apparemment je ne peux pas les utiliser pour la variable contenant le nom de ma table, ca donne donc ceci :

<?php
for ($nb_lignes = 1; $nb_lignes <= $_POST['lien']; $nb_lignes++)
{
$table = $_POST['lien' . $nb_lignes . ''];
$id2 = $_POST['id' . $nb_lignes . ''];
$req_link = $bdd->prepare("INSERT INTO ".$table." (id_article_presse, id2) VALUES(:id_article_presse, :id2)") or die(print_r($bdd->errorInfo(), true));
$req_link->execute(array('id_article_presse' => $_GET['id'], 'id2' => $id2)) or die(print_r($bdd->errorInfo(), true));
$req_link->closeCursor();
}
?>


Le code fonctionne mais ca ne me plait pas de laisser la variable table directement dans la requête. Le problème c'est que si je remplace ".$table." par :table et que j'ajoute 'table' => $table à l'execute, ca ne marche pas...

J'ai aussi essayer de rajouter la ligne $table = mysql_real_escape_string($table); mais dans ce cas mon code ne fonctionne plus non plus...

Comment dois-je faire pour sécuriser cette variable ?
Commenter la réponse de BenamourJr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.