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 :

petite erreur upload PDO [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut petite erreur upload PDO
    bonjour, j'ai repris une base de script trouver sur internet, j'ai rajouter une fonction épuration et code aléatoire.

    mais j'ai une Erreur dont je trouve pas la solution

    Warning: getimagesize(blavier-maison-cle-sur-porte-classique-f.jpg) [function.getimagesize]: failed to open stream: No such file or directory in C:\Program Files\EasyPHP-5.3.8.1\annonce5\tel_im.php on line 76
    quand c'est une photo écrite: blavier-maison-cle-sur-porte-classique-f.jpg j'ai mon erreur

    quand elle est écrite: moi.jpg cela fonctionne

    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
    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
    97
    98
    <?php
    if(!isset($_SESSION)){
    session_start();
    } 
    include_once("require/config1.php");
     
    $tail = 8;
    $lett = "0123456789AZERTYUIOPMLKJHGFDSQWXCVBN";
    srand(time());
    for ($i=0;$i<$tail;$i++){
    $_SESSION['id_im'].=substr($lett,(rand()%(strlen($lett))),1);
    }
     
    function epure($var)
    {
      $var=strtr($var,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
      $var=strtolower($var);
      $var=str_replace("'","_",$var);
      $var=str_replace("\"","_",$var);
      $var=str_replace(" ","_",$var);
      $var=str_replace("__","_",$var);
      $var=str_replace("__","_",$var);
     /* $var= @eregi_replace("[^a-z0-9\_\-\.]","",$var);*/
      $var = preg_replace('/[^a-z0-9\_\-\.]+$/','',$var);
      $var = rtrim($var,'_');
      $var = ltrim($var,'_');
      return $var;
    }
    // Génère un code aléatoire de 5 caractères pour charques images
    function code_aleatoire() 
    { 
    	$alphabet    = 'abcdefghijklmnopqrstuvwxyz'; 
    	$alphabet   .= '1234567890'; 
    	$chaine      = ''; 
    	for($i=0;$i < 8;$i++) 
    	{ 
         $chaine .= substr($alphabet,rand()%(strlen($alphabet)),1); 
    	} 
    	return $chaine; 
    }
    // Constantes
    define('TARGET', './image_annonce/'); // Repertoire cible
    define('MAX_SIZE', 100000); // Taille max en octets du fichier
    define('WIDTH_MAX', 800); // Largeur max de l'image en pixels
    define('HEIGHT_MAX', 800); // Hauteur max de l'image en pixels
    // Tableaux de donnees
    $tabExt = array('jpg','gif','png','jpeg'); // Extensions autorisees
    $infosImg = array();
    // Variables
    $extension = '';
    $message = '';
    $nomImage = '';
     
    /************************************************************
    * Creation du repertoire cible si inexistant
    *************************************************************/
    if( !is_dir(TARGET) ) {
    if( !mkdir(TARGET, 0755) ) {
    exit('Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !');
    }
    }
    /************************************************************
    * Script d'upload
    *************************************************************/
    if(!empty($_POST))
    {
    // On verifie si le champ est rempli
    if( !empty($_FILES['fichier']['name']) )
    {
    // Recuperation de l'extension du fichier
    $extension = pathinfo(epure($_FILES['fichier']['name']), PATHINFO_EXTENSION);
    // On verifie l'extension du fichier
    if(in_array(strtolower($extension),$tabExt))
    {
    // On recupere les dimensions du fichier
    $infosImg = GetImageSize($_FILES['fichier']['tmp_name']);
    // On verifie le type de l'image
    if($infosImg[2] >= 1 && $infosImg[2] <= 14)
    {
    // On verifie les dimensions et taille de l'image
    if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && (filesize($_FILES['fichier']['tmp_name']) <= MAX_SIZE))
    {
    // Parcours du tableau d'erreurs
    if(isset($_FILES['fichier']['error'])
    && UPLOAD_ERR_OK === $_FILES['fichier']['error'])
    {
    // On renomme le fichier
    $nomImage = code_aleatoire(uniqid()) .'.'. $extension;
    // Si c'est OK, on teste l'upload
    if(move_uploaded_file($_FILES['fichier']['tmp_name'], TARGET.$nomImage))
    {
                     $im_annonce=array(':id_gal'=> $_POST['id_gal'], 
    				                   ':gal'=> $nomImage,
    								   ':date'=> date("Y-m-d"));
     
                     $values_info= join(', ',array_keys($im_annonce));
                     $req_im_annonce =$connection->prepare( 'INSERT INTO im_annonce ('.str_replace(':','',$values_info).') VALUES('.$values_info.')' );
                     $req_im_annonce->execute($im_annonce);

  2. #2
    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
    Il faudrait controler les erreurs d'upload AVANT d'essayer d'utiliser le fichier uploadé.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Et puis attention strtr n'est pas compatible utf-8

    Sinon, c'est pas trop recommandé de nommer un champ 'date'. Cela passe normalement avec mysql mais pas avec tous les sgbdd.

    Si tu veux une classe d'upload qui puisse faire aussi du redimensionnement à la volée (tu pourrais redimensionner en max 800*800 plutôt que de limiter la taille de l'image originale), qui gère aussi le nommage ou le renommage des fichiers en mode incrémentiel ou avec un suffixe unique et qui gère à peu près toutes les erreurs tu peux regarder ici

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    pour apprendre de mais erreur quel chose j'aurais du changer exactement et compatible utf-8

    bonjour j'ai repris certaine chose du code mais j'aimerai renommé l'image et je n'arrive pas .

    Quand le fichier photo est en jpg cela fonctionne et quand il est en JPG erreur

    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
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
    .delelte {
    	background-image:url(design/corbeille.gif);
    	position:relative;
    	border:none;
    	width: 18px; /* largeur à spécifier */
    	height: 18px; /* longueur à spécifier */
    	cursor: pointer;
    	right:20px;
    	top:-5px;
    }
    </style>
    </head>
    <body>
    <fieldset>
    <legend>Téléchargement de vos images</legend>
    <form enctype='multipart/form-data' name='frmupload' action='' method='POST'>
    <input type="hidden" name="MAX_FILE_SIZE" value="524288" />
    <input name='filename' type='file'>
    <input type='submit' value='Submit' name='submit'>
    </form>
    </fieldset>
    <?PHP
    if(!isset($_SESSION)){
    session_start();
    } 
    include_once("require/config1.php");
    include_once("function.php");
     
     
    define('TARGET', './image_annonce/');
     
    if(isset($_POST['submit'])){
     
     
    if(is_uploaded_file($_FILES['filename']['tmp_name'])){
     
     
    if( !is_dir(TARGET) ) {
    if( !mkdir(TARGET, 0755) ) {
    exit('Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !');
    }
    } 
    	$maxsize=$_POST['MAX_FILE_SIZE'];		
    	$size=$_FILES['filename']['size'];
     
    	$imgdetails = getimagesize($_FILES['filename']['tmp_name']);
    	$mime_type = $imgdetails['mime']; 
     
     
    	if(($mime_type=='image/jpeg')||($mime_type=='image/JPG')||($mime_type=='image/png')){
     
    	  if($size<$maxsize){
    	    $filename=$_FILES['filename']['name'];	
    	    // Si c'est OK, on teste l'upload
                  if(move_uploaded_file($_FILES['filename']['tmp_name'], TARGET.$filename)){
    				  //Controle des doublons dans la base de donnée 
                      $controle_im = $connection->prepare('SELECT gal FROM im_annonce WHERE gal=:gal');   
                      $controle_im->execute(array('gal'=> $filename));
                      $nb_resultats_recherche_im=$controle_im->fetch();
    				   /*si il n'y a pas de resultat*/ 
                      if(!$nb_resultats_recherche_im){
    		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    		         $im_annonce=array(':id_gal'=> $_SESSION['ref'], 
    				                   ':gal'=> $filename);
     
                     $values_info= join(', ',array_keys($im_annonce));
                     $req_im_annonce =$connection->prepare( 'INSERT INTO im_annonce ('.str_replace(':','',$values_info).') VALUES('.$values_info.')' );
                     $req_im_annonce->execute($im_annonce);
    				 }else{
    				 $message ="L'image est en doublons veulliez renomé l'image!!";
                     }
    			  }
    		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    	  }else{
    	    $message ="L'image à télécharger est trop grand .. Erreur Télécharger l'image!!";
    	  }
    	}else{
    	  $message ="Un fichier image valide! S'il vous plaît télécharger jpeg ou png.";
    	}
     
    }else{			
      switch($_FILES['filename']['error']){
    	case 0: 
    	  $message ="Il y avait un problème avec votre téléchargement.";
    	  break;
    	case 1: 
    	  $message = "Le fichier que vous essayez de télécharger est trop grand.";
    	  break;
    	case 2: 
    	  $message = "Le fichier que vous essayez de télécharger est trop grand.";
    	  break;
    	case 3: 
    	  $message ="Le fichier que vous essayez téléchargement a été que partiellement téléchargé.";
    	  break;
    	case 4: 
    	  $message ="Vous devez sélectionner une image pour le téléchargement.";
    	  break;
    	default: 
    	  $message ="Il y a un problème avec votre téléchargement.";
    	  break;
      }		
    }	
     
    }
    if( !empty($message) )
    {
    echo '<p>',"\n";
    echo "\t\t<strong><font style='color:#F00'>", htmlspecialchars($message) ,"</font></strong>\n";
    echo "\t</p>\n\n";
    }
    echo'<p>';
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    if(!empty($_POST['DELETE_IM'])){ 
    $photos  = $connection->prepare('SELECT * FROM im_annonce WHERE idg=:idg');
    $photos->execute(array('idg'=> $_POST['DELETE_IM']));	
    while($results = $photos->fetch(PDO::FETCH_OBJ))
    $DEL = $results->gal;
    if(@!unlink("image_annonce/".$DEL) || @!unlink("MINIimage_annonce/".$DEL));else{
    $photo_im  = $connection->prepare('DELETE FROM im_annonce WHERE gal=:gal');
    $photo_im->execute(array('gal'=> $DEL));
    $photo_im->execute();
    }
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    $photo  = $connection->prepare('SELECT * FROM im_annonce WHERE id_gal=:id_gal');
    $photo->execute(array('id_gal'=> $_SESSION['ref'] ));
    while($result = $photo->fetch(PDO::FETCH_OBJ))
    // On test si la variable $result, au cas
    // ou elle serait vide.
    if($result){
    	  vignette('image_annonce/'.$result->gal.'',100, 75);
    	  echo'<FORM  method="POST" action="'.$_SERVER['PHP_SELF'].'"><img src="MINIimage_annonce/'.$result->gal.'" alt="" border="0" />	       
    		   <input type="hidden" name="DELETE_IM" value="'.$result->idg.'" />
    		   <input type="submit" class="delelte" value=""/>
    		   </FROM>';
    	      }
    // La requète n'a pas retournée de résultat
    else {
    header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/erreur.php.php");
    die();
    }
    echo'</p>';
     
    $connection=null;
    ?>
     
    </body>
    </html>

  5. #5
    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
    Utiliser le type mime est une mauvaise façon de contrôler le fichier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Bonjour sabotage quel serais la meilleur des façons svp?

    Merci d'avance

    Mes vœux pour l'année 2014

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Avec pathinfo, sinon le faire soi-même, ou le plus sûr pour déterminer le type d'un fichier est avec finfo (mais il faut une configuration récente).

    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
    <?php 
    $fichier = "images/chapeau.png";
    $type = null;
     
    // Pour un fonctionnement en local (ex wamp) il faut que la lib soit activée. Dans le fichier de configuration "php.ini", décommenter (en supprimant le ';') la ligne  : ";extension=php_fileinfo.dll"
     
    if(class_exists('finfo'))
    {
            /* Récupère le mime-type d'un fichier */
    	$finfo = new finfo(FILEINFO_MIME_TYPE);
     
    	$type = $finfo->file($fichier);
    }
    else
    {
        echo "Échec de l'ouverture de la classe finfo";
    }
     
    echo $type;
     
    // affiche image/png 
    ?>

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

Discussions similaires

  1. Petite erreur php
    Par 27 dans le forum Langage
    Réponses: 2
    Dernier message: 18/08/2006, 10h49
  2. Petite erreur sur formulaire
    Par shub dans le forum Access
    Réponses: 2
    Dernier message: 26/04/2006, 11h55
  3. petite erreur ENGINE=InnoDB
    Par speedylol dans le forum Installation
    Réponses: 1
    Dernier message: 24/03/2006, 17h22
  4. [Upload] Erreur Upload
    Par gregal dans le forum Langage
    Réponses: 1
    Dernier message: 13/02/2006, 19h01
  5. [Upload] Gestion d'erreur upload
    Par vincedjs dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2006, 13h18

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