PHP : pb insertion SQL sur données calculées [Résolu/Fermé]

Signaler
-
 Kobran -
Bonjour à tous,

J'ai un soucis avec une requête devant insérer un enregistrement en BDD.
Je vous présente le code ci-dessous.
Il fonctionne car l'enregistrement ce déroule correctement... MAIS...
les valeurs $attach_left et $attach_top sont toujours égales respectivement à 300 et 100.

Dans la requête d'insert, je suis obligé de laisser les quotes en italiques car sinon ça ne fonctionne pas... et là non plus, je ne sais pas pourquoi !!

L'idée du code : je crée une nouvelle entité que je peux associer à une autre entité. Si je l'associe alors je dois recalculer le positionnement left et top.

Please, un coup de main s'il-vous-plaît ???!!!

Merci d'avance.

Yann.

[code]

// Récupération de l'entité de rattachement et son positionnement et calcul du positionnement du fils

$sql_attach = "SELECT * FROM adm_orga_ent WHERE id_ent=".mysql_escape_string($_POST['parent'])."";
mysql_query($sql_attach) or die('Erreur SQL !<br>'.$sql_attach.'<br />'.mysql_error());

$attach = mysql_fetch_array($sql_attach);
$attach_left = intval($attach['left'])+300;
$attach_top = intval($attach['top'])+100;


// Insertion en base de données

$sql = 'INSERT INTO adm_orga_ent (id_org,text,border,background,texte,parent,dat_maj,width,height,'left' , 'top') VALUES ('.mysql_escape_string($_POST['id_org']).',"'.addslashes(mysql_escape_string($_POST['text'])).'","'.mysql_escape_string($_POST['border']).'","'.mysql_escape_string($_POST['background']).'","'.mysql_escape_string($_POST['texte']).'","'.mysql_escape_string($_POST['parent']).'","'.date("d/m/Y H:i:s").'","300","50",'.$attach_left.','.$attach_top.')';

mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

/code

1 réponse

Messages postés
572
Date d'inscription
mardi 16 mars 2010
Statut
Membre
Dernière intervention
18 avril 2018
56
Salut, mais tes deux variables sont des chaines de caractères dans ta base??? Le seul truc possible que je vois, serait que dans ton select il ne trouve pas $_POST['parent'] donc déjà je ferais un echo de la requête select et je l'executerais direct dans la base pour voir ce quelle retourne. Puis je ferais un echo de: $attach_left et $attach_top juste apres ces ligne pour voir si elle existent bien.

$attach_top = intval($attach['top'])+100;  
$attach_left = intval($attach['left'])+300;
Re',

Merci !
Si si, le programme va jusqu'au bout et l'insert se fait.
J'ai ajouté le intval parce que j'ai eu un doute sur le retour - à savoir retour de chaîne de caractères de sql - mais l'effet au final est justement sans effet - avec ou sans, ça change rien ! :-(

Le 300 (width) et 50 (height), ce sont des données que je définie en dur - mais qui par la suite seront traités comme left et top.

Je pense que mon problème vient de la BDD - je suis très surpris de devoir passer les paramètres left et top de l'insert avec des quotes en italiques. (je ne sais pas comment ça s'appelle). :-)

Merci d'avance.

Yann.
dariumis
Messages postés
572
Date d'inscription
mardi 16 mars 2010
Statut
Membre
Dernière intervention
18 avril 2018
56
Il me semble très fortement probable que le transfert de ces lignes ne ce passe pas bien:

$attach_left = intval($attach['left'])+300;     
$attach_top = intval($attach['top'])+100;      


Je suis convaincu que si tu met ça:

$attach_left = intval($attach['left'])+150;     
$attach_top = intval($attach['top'])+50;  


Le résultat que tu obtiendra seras 150 et 50 au lieu du 300, 100 que tu obtiens généralement, et tous ça car en fait $attach['left'] et $attach['top'], ne contiennent rien, donc ça peut venir soit que tu récupère mal tes variable avec cette ligne (moi j'utilise PDO) :

$attach = mysql_fetch_array($sql_attach); 


soit que ton select ne retourne rien, pour le vérifier faut faire un echo du select et l'éxecuter dans phpmyadmin si tu utilise MySQL.

Edit ou alors ton insert ne s'execute pas et tu t'en rend pas compte car si dans ta requête "300","50" étaient des chaines de caractère inséré en dure elles se présenterais de cette manière.

.... \'"300"\',\'"50"\' .....

Pareil, fais un echo de ton insert et execute le dans phpmyadmin.
PDO ??
Je sais pas ce que c'est ?
dariumis
Messages postés
572
Date d'inscription
mardi 16 mars 2010
Statut
Membre
Dernière intervention
18 avril 2018
56
C'est juste un système plus récent perméttant de ce connecter à sa base remplaçant les fonction: mysql_* .
Merci pour toute l'aide.
J'ai recréé la table en BDD et remplaçant "left" par "gauche" et "top" par "haut".
Je pense que left était mal interprété dans la requête - il en faisait une fonction et non une colonne. Et depuis, ça marche !! :-)

Merci en tout cas !

@+

Yann.