Page 1 sur 1

UPDATE de mysql sous PHP

Posté : 22 nov. 2011, 14:48
par jean-claude Vil
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

Re: UPDATE de mysql sous PHP

Posté : 22 nov. 2011, 15:22
par macgawel
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.

Re: UPDATE de mysql sous PHP

Posté : 22 nov. 2011, 18:26
par jean-claude Vil
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....

Re: UPDATE de mysql sous PHP

Posté : 22 nov. 2011, 18:41
par macgawel
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().

Re: UPDATE de mysql sous PHP

Posté : 22 nov. 2011, 18:53
par jean-claude Vil
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"...

Re: UPDATE de mysql sous PHP

Posté : 22 nov. 2011, 19:22
par jean-claude Vil
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é.

Re: UPDATE de mysql sous PHP

Posté : 22 nov. 2011, 20:54
par jean-claude Vil
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+