UPDATE de mysql sous PHP

jean-claude Vil
Invité n'ayant pas de compte PHPfrance

22 nov. 2011, 14:48

Bonjour,
là je vais exploser en vol....
La table "imagesTemporairesPF" est créée et chargée par des "insert " avec mysql sous PHP.
Tout baigne...
je veux modifier le champ "etat" de la ligne dont "image" vaut "$NomImage".
J'ai vérifié 100 fois tous les contenus des variables ils sont bons.
J'écris:
<?php
mysql_select_db("$DB", $mysql_link);
$update = "UPDATE imagesTemporairesPF SET etat = '$Etat' WHERE image = '$NomImage'";
$mysql_result=mysql_query($update, $mysql_link) or die(mysql_error());
?>
Tout se passe bien c'est à dire qu'il n'y a aucun message de généré, rien ne se bloque et.... la modification de "etat" ne se fait pas !!!!!

Est-ce que quelqu'un a une idée à me soumettre ?
Merci d'avance de votre aide

Mammouth du PHP | 672 Messages

22 nov. 2011, 15:22

Bonjour.

1. Merci d'utiliser les balises qui vont bien pour mettre ton code en forme, c'est plus lisible...

2.
Première chose à faire : afficher les variables.
Deuxième chose à faire : afficher les éventuelles erreurs SQL.
<?php
mysql_select_db("$DB", $mysql_link) or die ('Erreur à la sélection de la BDD');
$update = "UPDATE imagesTemporairesPF SET etat = '$Etat' WHERE image = '$NomImage'";
echo "requête = $update";
$mysql_result=mysql_query($update, $mysql_link) or die(mysql_error());
echo "Modifications sur ".mysql_affected_rows()." lignes";
?>
Si tu ne vois rien qui te choque, tu peux aussi essayer de passer la requête via une interface classique (phpMySQL, par exemple), et voir le résultat.

jean-claude Vil
Invité n'ayant pas de compte PHPfrance

22 nov. 2011, 18:26

Salut macgavel,
je vais viens de faire d'autres tests.
J'ai pensé que c'était peut-être la comparaison du contenu des variables "image" de la table et "$NomImage" qui ne se fait pas bien.
J'ai donc essayé le même update sur la variable "identifiant" qui est saisi en amont et ça marche.
Dans le cas des images les valeurs proviennent d'un "move_uploaded_file" et je pense qu'il y a un problème d'encodage.
J'ai alors refait l'update en allant piquer le nom de l'image dans la table et en le mettant directement dans la commande, soit:
<?php
$update = "UPDATE imagesTemporairesPF SET etat = '$Etat' WHERE image = 'Toto.gif'";
?>
et là çà marche !

Conclusion: l'update est bon , ce qui me paraît normal par contre je ne vois pas comment corriger l'encodage des variables transmises par l'upload.
Peut-être en modifiant enctype="multipart/form-data" dans le formulaire ?
je vais chercher mais si vous avez une idée....

Mammouth du PHP | 672 Messages

22 nov. 2011, 18:41

Tu as affiché tes variables (un echo $mavariable devrait suffire :wink: ) ?

Sinon, ce qu'il faudrait surtout, c'est savoir comment tu récupères ta variable $NomImage...
En gros, la partie où tu récupères tes variables, avec le move_uploaded_file().
Modifié en dernier par macgawel le 22 nov. 2011, 19:00, modifié 1 fois.

jean-claude Vil
Invité n'ayant pas de compte PHPfrance

22 nov. 2011, 18:53

Oui bien sûr l'affichage des variables reçues est "visuellement" bonne et égale au contenu de la valeur contenue dans la table.
C'est pourquoi je pense au code.
la saisie de la variable est celle-ci:
<?php
....
$NomImage = $_FILES['avatar']['name'];
......
if(!isset($erreur)) //S'il n'y a pas d'erreur, on uploade
{
     //On formate le nom du fichier ici...
     $NomImage = strtr($NomImage,
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $NomImage = preg_replace('/([^.a-z0-9]+)/i', '-', $NomImage);
etc...
?>
pris dans un exemple.
Mais je pense qu'il y a un autre pb du même type : de temps en temps un fichier ne peux pas être uploadé alors qu'il a l'air "normal"...

jean-claude Vil
Invité n'ayant pas de compte PHPfrance

22 nov. 2011, 19:22

Excuse moi j'ai oublié 2 morceaux...!
il y a aussi dans la séquence un peu compliquée de récupération des noms des images à l'intérieur du fichier uploadé 2 autres commandes :
$string = file_get_contents($NomImage);  
puis ....
	$masque = '#<img .*src=(?:"|\')(.+)(?:"|\').*>#Uis';
	preg_match_all($masque, $string, $matches, PREG_PATTERN_ORDER);
	foreach ($matches[1] as $image)
	{
mysql_select_db("$DB", $mysql_link);
$insert = "INSERT INTO imagesTemporairesPF (titre, fichier, image, identifiant) VALUES ('$Titre', '$fichier', '$image', '$MotDePasse')";
$mysql_result=mysql_query($insert, $mysql_link); 
c'est là que le nom de l'image est mise dans la table... c'est pas simple avec les noms qui changent !
Désolé.

jean-claude Vil
Invité n'ayant pas de compte PHPfrance

22 nov. 2011, 20:54

Euréka !
c'est le
 $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
qui met la panique !
En prenant le nom de l'image avant lui pour la placer dans le tableau c'est tout bon !
Merci de votre aide.
A+