IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Traitement sur une image $_FILES [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    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 : 63
    Points : 51
    Points
    51
    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.

  2. #2
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2007
    Messages
    70
    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 : 70
    Points : 82
    Points
    82
    Par défaut
    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.

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour le déplacement, il y a move_uploaded_file() qui est la pour ça .

  4. #4
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    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 : 63
    Points : 51
    Points
    51
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    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 : 63
    Points : 51
    Points
    51
    Par défaut
    Je me permet de remonter ce message, avec le code que j'ai mis pour l'instant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    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 : 63
    Points : 51
    Points
    51
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  7. #7
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] Traitement sur une image
    Par thierrybatlle dans le forum WinDev
    Réponses: 3
    Dernier message: 10/07/2012, 17h19
  2. Traitement sur une image
    Par Dude1205 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/08/2008, 13h30
  3. des traitement sur une image couleur
    Par Sarah! dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 28/05/2008, 15h14
  4. Question sur le traitement d'une image
    Par Muesko dans le forum Imagerie
    Réponses: 3
    Dernier message: 28/05/2007, 18h09
  5. traitement sur une image
    Par amazircool dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/05/2007, 22h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo