update capricieux

Invité
Invité n'ayant pas de compte PHPfrance

09 janv. 2008, 12:08

Bonjour,

voici ma table

Code : Tout sélectionner

CREATE TABLE `f_fields` ( `id` int(10) NOT NULL auto_increment, `sectionid` int(10) NOT NULL default '0', `type` varchar(255) collate latin1_general_ci NOT NULL default '', `descr` varchar(255) collate latin1_general_ci NOT NULL default '', `nomvar` varchar(255) collate latin1_general_ci NOT NULL default '', `valdefaut` varchar(255) collate latin1_general_ci NOT NULL default '', `oblig` tinyint(1) NOT NULL default '0', `ctrl` varchar(255) collate latin1_general_ci NOT NULL default '', `jsevent` varchar(255) collate latin1_general_ci NOT NULL default '', `ordre` int(10) NOT NULL default '0', `published` char(1) collate latin1_general_ci NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=80 ;
J'ai un update qui fonctionne bien si j'execute dans phpmyadmin:
UPDATE f_fields SET descr = 'Adressex de facturation si différente de l\'adresse principale' WHERE id = 8
Cette meme requete ne fonctionne pas (pas d'erreur retournée) quand je l'execute depuis php
$sql = "UPDATE f_fields SET descr = '" . mysql_real_escape_string(${$key}) . "' WHERE id = " . $row[2];
$result = mysql_query($sql) or die (mysql_error());
Voyez vous pourquoi le test 2 ne fonctionne pas?
Je précise que la requete du test 1 est le copier/coller dans phpmyadmin d'un echo ($sql) du test 2.

Merci pour vos réponses.

ViPHP
ViPHP | 3300 Messages

09 janv. 2008, 12:14

sans vouloir paraitre ennuyant je crois qu'il faudrait être devin pour répondre quelquechose de sensé :)

il va nous falloir un peu plus d'information pour t'aider essayes de poster une version pas trop grosse de la page complète par exemple.

Sinon n'oublie pas que si tu n'as pas d'erreur retournée c'est peut-être tout simplement parceque le moteur sql ne rencontre pas d'erreur de parsing en raison du comportement de tes variables auquel cas il s'agirait d'une erreur de conception plus qu'une erreur de coding.

dans les deux cas poste nous une version plus complète de ton script pour mieux visualiser :)
Fait du php depuis que ca existe ou presque :)

Invité
Invité n'ayant pas de compte PHPfrance

09 janv. 2008, 12:18

ben il n'y a que ça dans le code, des update en boucle avec un test sur la valeur des variables:
case "champ" :
if ($row[1] == "descr")
{
$sql = "UPDATE f_fields SET descr = '" . mysql_real_escape_string(${$key}) . "' WHERE id = " . $row[2];
$result = mysql_query($sql) or die (mysql_error());
echo $sql . "<br/><br/>";
}	
			
le echo $sql m'indique que toutes les variables sont bien définies.
Ce que je peux ajouter, c'est que la requete fonctionne bien quand la valeur à insérer dans le champ 'descr' ne contient pas d'apostrophe.