Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
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 07/03/2007, 10h51   #1
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 103
Points : 16
Points : 16
Par défaut [Upload] uploader image sur serveur

Bonjour je cherche à uploader des images dans un repertoire d'images présent sur mon serveur local, mais également je cherche en même temps alimenter une tables "images" présente dans ma base de données avec les champs suivants id, image, size, titre. Je sais qu'il ne faut pas stocker l'image dans la base mais seulement le chemin relative mais je ne sais pas comment faire. C'est pour cette raison que je fais appel à vous.

Voici le code de mon formulaire

Code html :
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
 
<form action="ajout_image.php" method="get" enctype="multipart/form-data" onSubmit="return checkForm(this)">
<!-- On limite le fichier à 400ko-->
<input type="hidden" name="MAX_FILE_SIZE" value="400000" />
 <table width="301" border="0" cellspacing="0" cellpadding="0">
    <tr> 
      <td width="60" class="textes">Image :</td>
	  <td width="241"><input type="file" name="fichier" /></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr> 
      <td valign="top" class='textes'>Titre : </td>
	  <td><input type="text" name="titre" /></td>
    </tr>
    <tr> 
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr> 
      <td>&nbsp;</td>
	  <td><input type="submit" name="upload" value="Uploader" /></td>
    </tr>
  </table>
</form>
dedel53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 11h34   #2
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
il t efaut aussi une page de traitement php , tu peux nous montrer le code ?
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 11h35   #3
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Salut,

J'ai fais sa dernièrement je peux te montrer 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 
        function uploadAvatar($src_img, $nom_img)
        {
            $size_img = getimagesize($src_img);
            // on assigne la largeur de l'image a $w_img
            $w_img = $size_img[0];
            // on assigne la hauteur de l'image a $h_img
            $h_img = $size_img[1];
            // on reprend l'extension de l'image
            $ext = strtolower($size_img[2]);
 
            // Array d'erreurs
            $errorArray = array(
            'imgNotJpeg'        => false,
            'imgSelectError'    => false,
            'imgToBig'            => false,
            'imgPartial'        => false,
            'fileNotSpecified'    => false
            );
 
            // on test si c'est une image JPEG
            if($ext == '2')
            {
             // si l'extension est jpg on ne fait rien
            }
            else
            {
                // sinon on arrête de charger l'application et on met une erreur
                return 'error bla bla bla';
            }
            // on assigne une valeur au chemin ou le fichier sera stocké sur le serveur
            $nom_img = testAvatarName($nom_img);
            // on upload le fichier
            move_uploaded_file($src_img,AVATAR_FOLDER.$nom_img);
            // test lors des erreur lors de l'upload
            if($error == UPLOAD_ERR_INI_SIZE)
            {
                return 'error bla bla bla';
            }
            elseif($error == UPLOAD_ERR_FORM_SIZE)
            {
                return 'error bla bla bla';
            }
            elseif($error == UPLOAD_ERR_PARTIAL)
            {
                return 'error bla bla bla';
            }
            elseif($error == UPLOAD_ERR_NO_FILE)
            {
                return 'error bla bla bla';
            }
 
            // resize et upload
                     resize(AVATAR_MAX_SIZE,$src_img,AVATAR_FOLDER,AVATAR_FOLDER.$nom_img,$nom_img,$w_img,$h_img);
 
            // insertion des info sur l'image dans la base de données
            // requête MySQL ...
        }
 
        function testAvatarName($nomImg)
        {
            while(file_exists(AVATAR_FOLDER.$nomImg))
            {
                $nomImg = "img".rand().".jpg";    
            }
            return $nomImg;
        }
 
        function resize($taille_maximum,$source_img,$dest,$src_srv,$name,$w,$h)
        { // début de la fonction resize
            // on test la taille de l'image
            if($w <= $taille_maximum && $h <= $taille_maximum)
            {
                // si le fichier a déjà la bonne dimension ou est plus petit que la taille max on fait une simple copie
                copy($src_srv,$dest.$name);        
            }
            else
            {
                // défini le type de l'image
                //header ("Content-type: image/jpeg");
                // crée une image par rapport à l'image de base
                $source = imagecreatefromjpeg($src_srv);
                // si l'image est plus large que haute
                if($w >$h){
                    // on crée une image vide avec les dimensions de l'image de destination
                    $destination = imagecreatetruecolor($taille_maximum,($taille_maximum/(imagesx($source))*imagesy($source)));
                }else{
                    // on crée une image vide avec les dimensions de l'image de destination mais dans l'autre sens (plus haute que large)
                    $destination = imagecreatetruecolor(($taille_maximum/((imagesy($source)))*imagesx($source)), $taille_maximum);
                }
                    // redimesionne l'image par rapport à la nouvelle image
                imagecopyresized($destination, $source, 0, 0, 0, 0, imagesx($destination), imagesy($destination), imagesx($source), imagesy($source));
                 // copie la nouvelle image dans le dossier normal
                imagejpeg($destination,$dest.$name);
            }
        }
Voilà je te laisse adapter à tes besoin... évidemment la fonction resize ne te sert peut-être à rien...

Si t'as d'autres questions n'hésite pas
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 11h40   #4
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 103
Points : 16
Points : 16
voici mon code de traitement

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
 
<?php
$dossier = '../../images/images_upload/';
$fichier = basename($_FILES['fichier']['name']);
$taille_maxi = 400000;
$taille = filesize($_FILES['fichier']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['fichier']['name'], '.'); 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Upload effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
?>
dedel53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 11h45   #5
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Et qu'est ce qui ne fonctionne pas ?

Stocke seulement le nom des image dans la base, pas le chemin.
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 11h53   #6
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 103
Points : 16
Points : 16
bah il me met une erreur et donc ne copie pas l'image dans mon dossier

Notice: Undefined index: fichier in d:\easyphp1-8\www\clown\admin\modules\gest_images\ajout_image.php on line 6

Notice: Undefined index: fichier in d:\easyphp1-8\www\clown\admin\modules\gest_images\ajout_image.php on line 8

Notice: Undefined index: fichier in d:\easyphp1-8\www\clown\admin\modules\gest_images\ajout_image.php on line 10
Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...
dedel53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 11h57   #7
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Et la ligne 6 est ?
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 12h00   #8
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 103
Points : 16
Points : 16
$fichier = basename($_FILES['fichier']['name']);
dedel53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 12h11   #9
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Pourquoi personne n'utilise copy() ?
Citation:
<?php
if (!isset($_POST['send_ajout']))      $send_ajout '';
else                                                
$send_ajout $_POST['send_ajout'];
if (!isset(
$_POST['fichiers']) )      $fichiers[] = '';
else                                                
$fichiers[] = $_POST['fichiers'];

if( 
$send_ajout!='' )
{
      
$dest='image';      // Chemin
      
$nom_du_fichiers $_FILES['fichiers']['name'][0];                              // Nom du fichier cible à uploader
      
$nom_du_fichiers_temporaire $_FILES['fichiers']['tmp_name'][0];      // Nom du fichier dans le cache d'apache

      
if (@copy($nom_du_fichiers_temporaire$dest.'/'.$nom_du_fichiers))      echo 'Upload réussi : <a href="'.$dest.'/'.$nom_du_fichiers.'">'.$dest.'/'.$nom_du_fichiers.'</a>';
      else                                                      echo 
'Echec';
}
?>
<form method="post" enctype="multipart/form-data"  action="">
URL : <input type="file" name="fichiers[]" size="30" />
      <input type="submit" name="Submit" value="Envoyer">
      <input type="hidden" name="send_ajout" value="send_ajout" />
</form>
Copier/coller ca dans une page php et créer un dossier image dans le même dossier que la page, certain que ca fontionne en local avec EAsyphp 1.8 et Free.
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 12h26   #10
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 103
Points : 16
Points : 16
j'essaye et je te dis
dedel53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 12h31   #11
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 103
Points : 16
Points : 16
il me mets échec
dedel53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 12h48   #12
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
J'admet avoir du mal à y croire. Tu a bien créer le dossier ? Tu utilise quel serveur ?

Quelqu'un d'autre peut tester ?
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 13h07   #13
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 103
Points : 16
Points : 16
je suis en local
dedel53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 14h15   #14
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
reprends tout ton code sauf que dans le formulaire tu mets ton form en POST et pas en GET

Code html :
<form action="ajout_image.php" method="POST" enctype="multipart/form-data" onSubmit="return checkForm(this)">
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 15h23   #15
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Citation:
Envoyé par RideKick
reprends tout ton code sauf que dans le formulaire tu mets ton form en POST et pas en GET

Code html :
<form action="ajout_image.php" method="POST" enctype="multipart/form-data" onSubmit="return checkForm(this)">
Même pas vu ....
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h46.


 
 
 
 
Partenaires

Hébergement Web