requête UPDATE après redimensionnement image

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : requête UPDATE après redimensionnement image

Re: requête UPDATE après redimensionnement image

par lucho » 15 janv. 2010, 17:21

macgawel, bravo =D>

Le problème venait du point 3.de ton commentaire
j'ai supprimé la fonction pour faire un code plus linéaire et ça marche parfaitement !!!

Chapi chapeau

Re: requête UPDATE après redimensionnement image

par lucho » 15 janv. 2010, 17:13

Bonjour.

1. Merci de placer le code entre les balises php, c'est plus lisible...

2. Question bête : ce ne serait pas plus simple de d'abord redimensionner l'image, et ensuite faire l'insertion ?

3. Il est d'usage de mettre les fonctions au début du script (voire dans un fichier à part). Et de toute manière, il vaut mieux éviter de les mettre à l'intérieur d'un IF...
Ou alors, n'utilise pas de fonction, si elle ne te sert qu'une fois.

4. Tu peux confirmer que quand tu fais l'echo de ta requête, et que tu la passes par phpMyAdmin (ou autre) elle fonctionne ?
Question bête (encore :oops: ) : pour tes autre requêtes tu commences par faire un mysql_select_db($database_connexionBDD, $connexionBDD);.
Pourquoi tu ne le fais pas ici ?


[HS]Pour passer le nom des fichiers en minuscule tu devrais plutôt utiliser (mb_)strtolower :P
Bonjour macgawel,

merci pour toutes ces pistes de réflexion
1. désolé, j'aurai dû faire gaffe :oops:
2. j'utilise cette méthodo depuis un petit bout de temps et comme elle fonctionne, je ne suis jamais repenché dessus. A y réfléchir, y' aurait plus logique effectivement ! Par contre, je ne pense pas qu'elle soit à l'origine du problème. Elle pourrait l'être ?
3. je vais supprimer la fonction, tu as raison et voir ce que ça donne
4. je refais un test et le posterai (j'ai fait tellement de test que je ne sais pas si j'ai vérifié dans php/myAdmin la dernière version du code).
Pour le "mysql_select_db", je pourrais le tester aussi mais ce que je n'arrive pas à comprendre, c'est que j'ai procédé par étape et avant d'intégrer la partie redimensionnement, ces mêmes lignes de code marchait (???)

Re: requête UPDATE après redimensionnement image

par macgawel » 15 janv. 2010, 16:59

Bonjour.

1. Merci de placer le code entre les balises php, c'est plus lisible...

2. Question bête : ce ne serait pas plus simple de d'abord redimensionner l'image, et ensuite faire l'insertion ?

3. Il est d'usage de mettre les fonctions au début du script (voire dans un fichier à part). Et de toute manière, il vaut mieux éviter de les mettre à l'intérieur d'un IF...
Ou alors, n'utilise pas de fonction, si elle ne te sert qu'une fois.

4. Tu peux confirmer que quand tu fais l'echo de ta requête, et que tu la passes par phpMyAdmin (ou autre) elle fonctionne ?
Question bête (encore :oops: ) : pour tes autre requêtes tu commences par faire un mysql_select_db($database_connexionBDD, $connexionBDD);.
Pourquoi tu ne le fais pas ici ?


[HS]Pour passer le nom des fichiers en minuscule tu devrais plutôt utiliser (mb_)strtolower :P

Re: requête UPDATE après redimensionnement image

par lucho » 15 janv. 2010, 16:13

Bonjour @rthur,

Merci pour ta réponse.
Sauf erreur de ma part, il me semble avoir mis les die(mysql_error()); et je n'ai comme message d'erreur que le "warning mysql_query():" que j'ai mis en gras.

Je précise que j'ai testé cette UPDATE juste après le if(is_uploaded_file($_FILES["chemin_image"]["tmp_name"])){ en mettant des valeurs en SQL directement et l'Update fonctionnait. Pourrait-il y avoir un lien entre l'endroit où elle est placée et l'erreur (le fait qu'elle soit dans une fonction par exemple) ?

Merci en tout cas

Re: requête UPDATE après redimensionnement image

par @rthur » 15 janv. 2010, 15:56

Bonjour,
Sauf que, là où ma requête de modification fonctionnait sans la partie resize de l'image, elle ne fonctionne plus maintenant.
Message d'erreur : Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in...
=> Problème de connexion à ta base de données lors du mysql_connect() ou mysql_select_db()

Ajoute des or die(mysql_error()); après ces 2 fonctions cela te permettra de voir l'erreur...

requête UPDATE après redimensionnement image

par lucho » 15 janv. 2010, 15:37

Bonjour à tous,

Je vous explique en quelques mots mon problème. Pour créer ma page d'ajout d'image, j'ai procédé par étape.
La première consistait à valider le bon envoi dans la base de données du chemin de l'image et des informations liées (taille...) + l'upload dans le dossier du serveur.
Jusque là, pas de souci si ce n'est que je voulais limiter la taille des images et donc les redimensionner pour alléger le poids (plutôt que de refuser l'envoi d'une image qui serait trop lourde).
Je me suis donc documenté sur les fonctions "imagecreatetruecolor", "imagecopyresampled", "imagejpeg"... trouvées sur les forums...

Mon code me permet donc maintenant de réduire considérablement la taille de mes images mais le problème se trouve dans ma requête de modification de mon entrée dans la base de données. Je procède peut-être à l'ancienne école mais voici la méthodo :
je créé une nouvelle entrée dans la base de données, je récupère la clé primaire, je vérifie que mon fichier est bien uploadé, je le redimensionne, le copie dans le dossier de destination puis modifie l'entrée en base de données avec les nouveaux id, chemin, largeur, hauteur...

Sauf que, là où ma requête de modification fonctionnait sans la partie resize de l'image, elle ne fonctionne plus maintenant.
Message d'erreur : Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in...
Voici donc le code en espérant qu'un téméraire osera s'y aventurer (si vous avez des conseils pour améliorer la logique de la page, n'hésitez pas !)
Merci
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  
	if(isset($_FILES["chemin_image"])){

		
		// Définition de la requête permettant l'insertion d'une nouvelle ligne dans ma db
		$insertSQL = sprintf("INSERT INTO tgd_image (chemin_image) VALUES (%s)",
                     GetSQLValueString("default.jpg", "text"));

		mysql_select_db($database_connexionBDD, $connexionBDD);
		$Result1 = mysql_query($insertSQL, $connexionBDD) or die(mysql_error());
		
		// Récupération de l'id de la ligne qui vient d'être créé
		$idPhoto = mysql_insert_id();
		
		$esp = " ";
		$majuscule = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
		$minuscule = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
		$accent = array('à'=>'a','á'=>'a','â'=>'a','ã'=>'a','ä'=>'a','å'=>'a','ò'=>'o','ó'=>'o','ô'=>'o','õ'=>'o','ö'=>'o','è'=>'e','é'=>'e','ê'=>'e','ë'=>'e','ì'=>'i','í'=>'i','î'=>'i','ï'=>'i','ù'=>'u','ú'=>'u','û'=>'u','ü'=>'u','ÿ'=>'y','ñ'=>'n','ç'=>'c','ø'=>'0','&'=>'','-'=>'');
		
		mysql_select_db($database_connexionBDD, $connexionBDD);
		$query_liste_id = "SELECT * FROM tgd_menu WHERE id_menu=".$_GET['idMenu']." ORDER BY id_menu ASC";
		$liste_id = mysql_query($query_liste_id, $connexionBDD) or die(mysql_error());
		$row_liste_id = mysql_fetch_assoc($liste_id);
		$totalRows_liste_id = mysql_num_rows($liste_id);
		
		$nomPhoto = $row_liste_id['nom_menu'];
		$nomPhoto = str_replace($esp,"",$nomPhoto);
		$nomPhoto = str_replace($majuscule,$minuscule,$nomPhoto);
		$nomPhoto = strtr($nomPhoto,$accent);
		
		$nomPhoto = $nomPhoto.'-'.$idPhoto;
		$cheminImage = '../portfolio/';
		
		
		
		if(is_uploaded_file($_FILES["chemin_image"]["tmp_name"])){ 
			
						
			function resize_image($my_img,$folder,$numId){
				
				$info = getimagesize($my_img);
				$largeurImage = $info[0];
				$hauteurImage = $info[1];
				$typeImage = $info[2];
				$largeurNew = 629; 
				$hauteurNew = round(($largeurNew / $largeurImage) * $hauteurImage);
				
				switch($typeImage){
					case 1:
					$extension = ".gif";
					$src_im = imagecreatefromgif($my_img);
					break;
					case 2:
					$extension = ".jpg";
					$src_im = imagecreatefromjpeg($my_img);
					break;
					case 3:
					$extension = ".png";
					$src_im = imagecreatefrompng($my_img);
					break;
				}
				
				$dst_im = imagecreatetruecolor($largeurNew,$hauteurNew);
				imagecopyresampled($dst_im,$src_im,0,0,0,0,$largeurNew,$hauteurNew,$largeurImage,$hauteurImage);    
					
				$cheminImage = $folder.$extension;
				
				$toto = '../portfolio/zzzz'.$numId.'.jpg';
				imagejpeg($dst_im,$toto,100);
				
				if (imagejpeg($dst_im,$toto)){
					$aVirer = '../';
					$toto = str_replace($aVirer,'',$toto);
					
					
					[b]// le problème est ici je pense[/b]
					$ReqSQL = "UPDATE tgd_image SET chemin_image='".$toto."', txt_image='".$_POST['txt_image']."', largeur_image=".$largeurNew.", hauteur_image=".$hauteurNew.", cle_menu=".$_GET['idMenu']." WHERE id_image=".$numId;
					//echo $ReqSQL."<br/>";
					//j'exécute ma requête de modification
					mysql_query($ReqSQL, $connexionBDD) or die(mysql_error());
				}
			}
					
			$file_tmp = $_FILES["chemin_image"]["tmp_name"];
			$dest_file = $cheminImage.$file_tmp;
			resize_image($file_tmp,$dest_file,$idPhoto);
		}
	}
}
Merci d'avance !