Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/04/2011, 10h43   #1
Membre à l'essai
 
Femme Pauline
Développeur Web
Inscription : octobre 2010
Messages : 41
Détails du profil
Informations personnelles :
Nom : Femme Pauline
Âge : 20
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2010
Messages : 41
Points : 22
Points : 22
Par défaut Traitement sur une image $_FILES

Bonjour à tous,

Je suis actuellement à la recherche de tutos, de cours ou même d'aide afin de réaliser les opérations suivantes, sur une image reçue grâce a un <input type="file">
  • Déplacer l'image de tmp a mon dossier photos
  • Récupèrer la nouvelle URL de l'image et la stocker dans ma BDD
  • Redimensionner l'image (uniquement en hauteur)
  • Renommer l'image à partir d'un script (ex : 001, 002, ...)

Je n'ai trouvé que peu de tutos sur Internet, et étant pas très douée en PHP, j'aimerais trouver quelque chose qui regroupe tout cela afin de ne pas m'embrouiller avec les noms de variables et autres joyeusetés

Merci d'avance à celles et ceux qui voudront bien m'aider.

Pauline.
Pauloscorps est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 11h15   #2
Membre régulier
 
Homme
Chef de projet NTIC
Inscription : juin 2007
Messages : 69
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Chef de projet NTIC
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2007
Messages : 69
Points : 70
Points : 70
Salut Pauloscorps,

Tout d'abord pour déplacer ton fichier il y a la fonction copy.
Pour stocker le chemin dans ta bdd, ça va fortement dépendre de ton SGBD.
Pour le redimensionnement de ton image, il y a ce tuto .

Donc grosso-modo voici la marche à suivre :
  1. récupérer le chemin tmp de ton image.
  2. affecter ton le nouveau chemin (ndlr vers ton fichier de photos) avec le nouveau noms que tu veux.
  3. utiliser la fonction copy avec ton chemin tmp en source et ton nouveau chemin en destination
  4. Insérer ce nouveau chemin dans ta bdd.
Cobalt59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 11h20   #3
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Pour le déplacement, il y a move_uploaded_file() qui est la pour ça .
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 11h28   #4
Membre à l'essai
 
Femme Pauline
Développeur Web
Inscription : octobre 2010
Messages : 41
Détails du profil
Informations personnelles :
Nom : Femme Pauline
Âge : 20
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2010
Messages : 41
Points : 22
Points : 22
Merci de vos réponses.

C'est la première fois que je fais ce genre ce manip'.

Voici un bout de mon script qui recoit le formulaire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
if(!empty($idCat) && !empty($titreArticle) && !empty($contenuArticle) && !empty($photoArticle) && !empty($descPhoto) )
	{
		$req = 'INSERT INTO articles (idArticle, idCat, titreArticle, contenuArticle, photoArticle, descPhoto) VALUES ("", "'. $idCat .'", "'. $titreArticle .'" , "'. $contenuArticle .'","'. $photoArticle .'", "'. $descPhoto .'");';
		$result = mysql_query($req, $connexion) or die(mysql_error());
 
		if ($result)
		{
			if (isset($_FILES['photoArticle']) AND $_FILES['photoArticle']['error'] == 0)
			{
				if ($_FILES['photoArticle']['size'] <=5000000)
				{
					$infosfichier = pathinfo($_FILES['photoArticle']['name']);
					$extension_upload = $infosfichier['extension'];
					$extension_autorisees = array('jpg', 'jpeg', 'gif', 'png');
					if (in_array($extension_upload, $extension_autorisees))
					{
						// On peut valider le fichier
						move_uploaded_file($_FILES['photoArticle']['tmp_name'], 'C:\wamp\www\SMTK' . basename($_FILES['photoArticle']['name']));
					}
				}
			}
			echo '<div class="valide"><p>L\'ajout a été correctement effectué.</p></div>' ;
		}
		else
		{
			echo '<div class="echec"><p> L\'ajout a échoué.</p></div>';
		}
	}
	else echo '<div class="echec"><p> Vous n\'avez pas rempli tous les champs. </p></div>';
}
J'ai donc utilisé move_uploaded_files, mais je me demande si j'ai mis le code relatif aux images au bon endroit ?
Autre chose, est-ce que ce petit bout est juste ou je me plante déjà ? ^^

J'utilise une BDD MySQL sur SQL Buddy, classiquement en local avec Wamp.

EDIT : Je suis en train d'essayer de mettre en place le code (impressionant) de jreaux62, mais je me pose une question. Je ne sais pas dans quel ordre agencer chaque élément. La redimension doit elle être faite avant ou après le déplacement ? Parce que je veux vraiment éviter de changer trop de choses.
Pauloscorps est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 09h20   #5
Membre à l'essai
 
Femme Pauline
Développeur Web
Inscription : octobre 2010
Messages : 41
Détails du profil
Informations personnelles :
Nom : Femme Pauline
Âge : 20
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2010
Messages : 41
Points : 22
Points : 22
Je me permet de remonter ce message, avec le code que j'ai mis pour l'instant.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
<?php
	require_once('../includes/connexion.php');
	session_start();
	if (!isset($_SESSION['login']))
	{
		exit();
	}
	include('../includes/header.php');
 
if (isset($_POST['submit']))
{
	$idCat = $_POST["idCat"];
	$titreArticle = htmlspecialchars($_POST["titreArticle"]);
	$contenuArticle = htmlspecialchars($_POST["contenuArticle"]);
	$photoArticle = $_FILES["photoArticle"];
	$descPhoto = htmlspecialchars($_POST["descPhoto"]);
	addslashes($contenuArticle) && addslashes($titreArticle) && addslashes($descPhoto);
 
	if(!empty($idCat) && !empty($titreArticle) && !empty($contenuArticle) && !empty($photoArticle) && !empty($descPhoto) )
	{
		$req = 'INSERT INTO articles (idArticle, idCat, titreArticle, contenuArticle, photoArticle, descPhoto) VALUES ("", "'. $idCat .'", "'. $titreArticle .'" , "'. $contenuArticle .'","'. $photoArticle .'", "'. $descPhoto .'");';
		$result = mysql_query($req, $connexion) or die(mysql_error());
 
		if ($result)
		{
			if (isset($_FILES['photoArticle']) AND $_FILES['photoArticle']['error'] == 0)
			{
				//$chemin = $_FILES['photoArticle']['url'];
			//	echo $chemin;
				//$nomPhoto = 001;
				//$nomPhoto = $nomPhoto+1;
				$redimOK = fctredimimage(270,0,'../../photos/','.$nomPhoto.','../../../../tmp/','.$photoArticle.');
				if ($redimOK == 1)
				{
					echo 'Redimensionnement OK !';
				}
			}
			echo '<div class="valide"><p>L\'ajout a été correctement effectué.</p></div>' ;
		}
		else
		{
			echo '<div class="echec"><p> L\'ajout a échoué.</p></div>';
		}
	}
	else echo '<div class="echec"><p> Vous n\'avez pas rempli tous les champs. </p></div>';
}
include('../includes/form_ajoutarticle.php');
include('../includes/footer.php');
mysql_close($connexion);
?>
Je n'ai pas ajouté la fonction move_uploaded_file(), puisque apparemment le code de Jreaux copie la photo et enregistre la photo redimensionnée dans le répertoire souhaité.

Cependant, je me demande si cette solution fonctionne. En effet, le script donné précèdemment est situé dans le dossier RACINE/edition et la fonction dans RACINE/FONCTIONS. Comment mon script peut-il la reconnaître ?

Merci de vos réponses, quant à moi je continue de galèrer sur ce système :.

< Quelqu'un peut-il me dire comment récupèrer l'URL de mon image ? >


EDIT : Je viens de faire l'inventaire détaillé de ce dont j'ai besoin.


1 / Récupérer le fichier
  • vérifier qu'il s'agit bien d'une image
  • préciser qu'il n'y a pas de limite de taille
  • le placer dans le dossier tmp si toutes les conditions sont remplies

2 / Redimensionnement de l'image
  • copier l'image dans le même dossier pour ne pas altérer l'original en cas d'erreur
  • de manière proportionnelle par rapport à la hauteur, toujours égale à 270px (CONST)

3 / Renommer l'image selon le schéma suivant :"001", "002", 00n"

4 / Déplacer l'image redimensionnée dans le dossier "photos/"
  • vérifier que cela a fonctionné
  • supprimer l'image de base dans le dossier "tmp/"

5 / Récupèrer le chemin de l'image et le stocker dans la base de données
TABLE : articles
CHAMP : photoArticle


Bien sûr je met cela pour vous permettre de m'aider sur des points précis. Merci d'avance, je suis désespérée
Pauloscorps est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 16h08   #6
Membre à l'essai
 
Femme Pauline
Développeur Web
Inscription : octobre 2010
Messages : 41
Détails du profil
Informations personnelles :
Nom : Femme Pauline
Âge : 20
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2010
Messages : 41
Points : 22
Points : 22
Bonjour à tous,

J'amène des nouvelles 2 bonnes semaines après.
Je viens de me repencher sur ce sujet, et j'ai fais une grande avancée.

J'ai donc finalement utilisé le code de J.Reaux (redimensionnement proportionnel cas B : par rapport à une hauteur fixe), et j'ai encore un peu de mal à l'adapter (mais j'y suis presque!).

Plusieurs cas de figure. Je suis arrivée à plusieurs finalités différentes:
  • la photo était bien redimensionnée mais dans le meme dossier que le fichier .php
  • le fichier était bien déplacé mais pas redimensionné

Je pense que je ne suis vraiment pas loin là, mais j'aurais juste besoin d'un petit coup de pouce de votre part pour m'aider a terminer

Merci d'avance, voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
$nomOrigine = $_FILES['photoArticle']['name'];
$repertoireOrigine = "c:/wamp/tmp/";
$elementsChemin = pathinfo($nomOrigine);
$extensionFichier = $elementsChemin['extension'];
$extensionsAutorisees = array("jpeg", "jpg", "JPG", "JPEG", "GIF", "PNG", "gif", "png");
 
if (!(in_array($extensionFichier, $extensionsAutorisees)))
{
       echo "Le fichier n'a pas l'extension attendue";
}
else
{
	$repertoireDestination = "c:/wamp/www/smtk/photos/";
	$nomDestination = "photo".date("YmdHis").".".$extensionFichier;
 
        $redimOK = fctredimimage(0, 270, $repertoireDestination, $nomDestination, $elementsChemin, $nomOrigine);
			if ($redimOK == true)
			{
				echo 'Redimensionnement OK !';
			}
			else
			{
				echo 'Le redimensionnement a réussi.';
			}
			$URLPhoto = ("http://localhost/smtk/photos/".$nomDestination);
		//	echo ' <br/> rep_dst=' .$repertoiredestination. ' <br/>nom_dst= ' .$nomDestination. '<br/> rep_src=' .$elementsChemin. '- <br/>nom_src =' .$nomOrigine.'';
 
		}/*
		if (move_uploaded_file($_FILES['photoArticle']["tmp_name"],	$repertoireDestination.$nomDestination))
		{
		// ca marche !
		}
		else
		{
			echo "Le fichier n'a pas été uploadé ";
		}*/
L'appel de la fonction est en ligne 17.
Pauloscorps est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2011, 06h49   #7
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 843
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 843
Points : 1 318
Points : 1 318
salut,

à savoir que presque toutes les implémentations de php possèdent la lib GD, tu peux vérifier sa présence grace à phpinfo().

La documentation de GD est . D'autres libs existent mais celle-là permet de faire tout (modifications images, être sur que c'est bien une image, ajouter du texte, la transparence, le redimensionnement, les courbes et surfaces).


ne te fie jamais à l'extension du fichier pour vérifier si c'est bien une image...
fais un switch qui teste ta chaine et utilise la fonction approprié de gd pour ouvrir l'image pour un png par exemple: $im=imagcreatefrompng($fichier);
si ça n'est pas une image png $im contiendra false et tu devras supprimer le fichier uploadé car il sera certainement une tentative d'attaque.


Il suffit de créer une image secondaire grâce à imagecreatetruecolor avec les dimensions voulues pour ta miniature par exemple et d'utiliser pour le redimensionnement d'image:
Pour enregistrer les fichiers où tu veux, il suffit d'utiliser la fonction qui correspond au format dans lequel tu veux voir tes fichiers sur le serveur: $op=imagepng pour un format png par exemple.

Il te reste plus qu'à libérer les ressources avec imagedestroy...

Voilà un exemple de ce que tu peux faire aussi
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h14.


 
 
 
 
Partenaires

Hébergement Web