probléme d'enregistrement vide dans ma base de données

Eléphant du PHP | 62 Messages

20 juin 2011, 15:33

bonjour:
j'ai réaliser un script qui permet d'uploader des images à la fois dans un répértoire, et au méme temps ç permets de récuperer le lien de l'image dans une base de donnée.
le probléme que j'ai c'est que lors de l'upload, ou la supression j'ai des enregistrement vide dans ma base de donnée
comment y remerdier
voici mon script

Code : Tout sélectionner

<?php include('params.inc.php'); if(!empty($_FILES)){ //print_r($_FILES); require("imgClass.php"); $img = $_FILES['img']; $ext = strtolower(substr($img['name'],-3)); $allow_ext = array("jpg",'png','gif'); if(in_array($ext,$allow_ext)){ move_uploaded_file($img['tmp_name'],"images/".$img['name']); Img::creerMin("images/".$img['name'],"images/min",$img['name'],653,370); } else { $erreur = "Votre fichier n'est pas une image"; } } $connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion'); mysql_select_db(MYDB) or die ('erreur de connexion à la base'); $requeteinsert = 'INSERT INTO images(lienimage,url) VALUES(\''.$img['name'].'\',\''.$_POST['url'].'\')'; $result = mysql_query($requeteinsert,$connect); mysql_close($connect); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="css/admin.css" _mce_href="css/admin.css" type="text/css" media="screen, projection" /> </head> <body> <?php if(isset($erreur)){ echo $erreur; } ?> <form method="post" action="admin.php" enctype="multipart/form-data"> <fieldset> <legend>Ajout d'une image</legend> <label for="image1">Image</label> <input type="file" name="img"/> <input type="text" id="url" name="url" value="http://"/> <label for="image1">url du site web</label> <button type="submit">Uploader</button> </fieldset> </form> <table summary="Liste des images de la galerie"> <caption>Liste des images</caption> <tr> <th>Nom</th> <th>site web</th> <th>Supprimer</th> </tr> <?php $connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion'); mysql_select_db(MYDB) or die ('erreur de connexion à la base'); if(!empty($_GET['sup']) && is_numeric($_GET['sup'])){ $requeteselect = 'SELECT lienimage FROM images WHERE id=\''.mysql_escape_string($_GET['sup']).'\''; $result = mysql_query($requeteselect, $connect); $image_courante = mysql_fetch_array($result,MYSQL_ASSOC); unlink('images/min/'.$image_courante['lienimage']); $requetesup = 'DELETE FROM images WHERE id=\''.mysql_escape_string($_GET['sup']).'\''; $result = mysql_query($requetesup, $connect); } $requeteselect = 'SELECT id,lienimage,url FROM images'; $result = mysql_query($requeteselect, $connect); while($image_courante = mysql_fetch_array($result,MYSQL_ASSOC)){ echo '<tr> <td>'.$image_courante['lienimage'].'</td> <td>'.stripslashes($image_courante['url']).'</td> <td><a href="admin.php?sup='.$image_courante['id'].'">Supprimer</a></td> </tr>'; } mysql_close($connect); ?> </table> </body> </html>
de plus a chaque fois que je j'actualise ma page avec f5, ça me r'ajoute des enregistrement vide dans ma base
je vous remercie d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 juin 2011, 16:59

salut,

lors de la suppression tu ne supprime pas la miniature, donc tu va continuer a polluer ton dossier miniature sans pouvoir le vider (enfin si mais avec un script de purge spécifique).

tu ne vérifie pas la présence d'une images avec le même nom et dans le répertoire et dans la base, le problème va donc être qu'il est possible d'avoir une image dans le répertoire mais plusieurs tuple référençant ce nom dans la base avec une seule image (et potentiellement des images qui devrait être différentes).

Deprecated: mysql_escape_string() [function.mysql-real-escape-string]: This function is deprecated; use mysql_real_escape_string() instead.

tu devrais utiliser mysql_real_escape_string :)

j'ai testé ton code et je n'ai pas eu de soucis (hors mis ceux indiqué ci dessus).

j'ai un peu corrigé ton code, ajouter une gestion minimal des erreurs possible lors de l'upload etc
<?php
//include('params.inc.php');
define('MYHOST','localhost');
define('MYUSER','root');
define('MYPASS','yyRu2TKEvyYpzFLK');
define('MYDB','test');
function up_error($code,$nom) {
    $valid = false;
    switch ($code) {
        case '0' : $erreur = 'Pas d\'erreur';$valid = true;break;
        case '1' : $erreur = 'Votre fichier `'.$nom.'` dépasse la taille maximale d\'upload autorisée par PHP( '.get_cfg_var('upload_max_filesize').' )'; break;
        case '2' : $erreur = 'Votre fichier dépasse la taille maximale demandée par le Webmestre';break;
        case '3' : $erreur = 'Le fichier n\'a pas été totalement uploadé !!!';break;
        case '4' : $erreur = 'Aucun fichier téléchargé !!!';break;
        default : $erreur = 'L\'upload a rencontré une erreur inconnue !!!'; break;
    }
    $return[] = $valid;
    $return[] = $erreur;
    return $return;
}

$connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion');
mysql_select_db(MYDB) or die ('erreur de connexion à la base');
if(!empty($_FILES)){
  //print_r($_FILES);
  require("imgClass.php");
  if ($_FILES['img']['error'] != 0) {
      $img = $_FILES['img'];
      $ext = strtolower(substr($img['name'],-3));
      $allow_ext = array("jpg",'png','gif');
      if(in_array($ext,$allow_ext)){
          if (move_uploaded_file($img['tmp_name'],"images/".$img['name'])) {
              //copy('images/'.$img['name'], 'images/min/'.$img['name']); // test remplace l'utilisation de la classe d'image !
              // Est ce que cette classe va retourner quelque chose ?
              Img::creerMin("images/".$img['name'],"images/min",$img['name'],653,370);
              $requeteinsert = 'INSERT INTO images(lienimage,url) VALUES(\''.$img['name'].'\',\''.mysql_real_escape_string($_POST['url']).'\')';
              $result = mysql_query($requeteinsert,$connect);
          }
      }
      else
      {
        $erreur = "Votre fichier n'est pas une image valide";
      }
  }
  else {
      $x = up_error($_FILE['error']['error'], $_FILES['img']['name']);
      if ($x[0] === false){
          $erreur = '<p style="border:1px solid red; color:red;">Erreur lors de l\'upload : '.$x[1].'</p>';
      }
  }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="css/admin.css"  type="text/css" media="screen, projection" />
    </head>
    <body>
   <?php
if(isset($erreur)){
   echo $erreur;
}
?>
<form method="post" action="" enctype="multipart/form-data">
<fieldset>
<legend>Ajout d'une image</legend>
                <label for="image1">Image</label>
<input type="file"  name="img"/>
<input type="text" id="url" name="url" value="http://"/>
                <label for="image1">url du site web</label>
                <button type="submit">Uploader</button>
            </fieldset>
</form>
<table summary="Liste des images de la galerie">
<caption>Liste des images</caption>
<tr>
<th>Nom</th>
<th>site web</th>
<th>Supprimer</th>
</tr>
<?php
         if(!empty($_GET['sup']) && is_numeric($_GET['sup'])){
            $requeteselect = 'SELECT lienimage FROM images WHERE id=\''.mysql_real_escape_string($_GET['sup']).'\'';
            $result = mysql_query($requeteselect, $connect);
            $image_courante = mysql_fetch_array($result,MYSQL_ASSOC);
            unlink('images/min/'.$image_courante['lienimage']);
            unlink('images/'.$image_courante['lienimage']);

            $requetesup = 'DELETE FROM images WHERE id=\''.mysql_real_escape_string($_GET['sup']).'\'';
            $result = mysql_query($requetesup, $connect);
         }

         $requeteselect = 'SELECT id,lienimage,url FROM images';
         $result = mysql_query($requeteselect, $connect);
         while($image_courante = mysql_fetch_array($result,MYSQL_ASSOC)){
            echo '<tr>
                  <td>'.$image_courante['lienimage'].'</td>
                  <td>'.stripslashes($image_courante['url']).'</td>
                  <td><a href="?sup='.$image_courante['id'].'">Supprimer</a></td>
            </tr>';
         }
         mysql_free_result($result);
         mysql_close($connect);
         ?>
</table>
</body>
</html>
peux tu nous expliquer avec plus de détails ton problème ?

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

21 juin 2011, 09:40

bonjour,
premierement je tien à vous remercier pour l'aide

j'ai bien tésté votre code, par contre ça bloque au niveau d'upload
ça me retourne le code d'erreur pas defaut

Code : Tout sélectionner

L'upload a rencontré une erreur inconnue
mais sinon au niveau de ma base de donnée j'ai plus des enregistrement vide.
pour la classe creemin je vous fourni son code(elle permet de cree une miniature de l'image que j'upload tout en supprimant l'image d'rigine
class Img{

	static function creerMin($img,$chemin,$nom,$mlargeur=100,$mhauteur=100){
		// On supprime l'extension du nom
		$nom = substr($nom,0,-4);
		// On récupère les dimensions de l'image
		$dimension=getimagesize($img);
		// On cré une image à partir du fichier récup
		if(substr(strtolower($img),-4)==".jpg"){$image = imagecreatefromjpeg($img); }
		else if(substr(strtolower($img),-4)==".png"){$image = imagecreatefrompng($img); }
		else if(substr(strtolower($img),-4)==".gif"){$image = imagecreatefromgif($img); }
		// L'image ne peut etre redimensionne
		else{return false; }
		
		// Création des miniatures
		// On cré une image vide de la largeur et hauteur voulue
		$miniature =imagecreatetruecolor ($mlargeur,$mhauteur); 
		// On va gérer la position et le redimensionnement de la grande image
		if($dimension[0]>($mlargeur/$mhauteur)*$dimension[1] ){ $dimY=$mhauteur; $dimX=$mhauteur*$dimension[0]/$dimension[1]; $decalX=-($dimX-$mlargeur)/2; $decalY=0;}
		if($dimension[0]<($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mlargeur*$dimension[1]/$dimension[0]; $decalY=-($dimY-$mhauteur)/2; $decalX=0;}
		if($dimension[0]==($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mhauteur; $decalX=0; $decalY=0;}
		// on modifie l'image crée en y plaçant la grande image redimensionné et décalée
		imagecopyresampled($miniature,$image,$decalX,$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
		unlink($img);
		// On sauvegarde le tout
		imagejpeg($miniature,$chemin."/".$nom.".jpg",90);
		return true;
	}
donc voila j'ai juste un probléme au niveau d'upload

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 juin 2011, 14:50

Avec la classe on y vois mieux, donc elle supprime le fichier que tu upload au départ. Pourquoi ? (tu n'a pas besoin de l'image taille réelle ?).

ce ne devrait pas être son rôle, elle sert a redimensionner, la gestion de la "bibliothèque" c'est en dehors.
c'est pour cela que j'ai ajouter le second unlink dans le dossier images (dans la partie qui gère la suppression).

pour ce qui est du fonctionnement c'est parce que j'ai mis un != au lieu d'un ==

Pour ce qui est de la suppression, en fait c'est normal car la classe de redimensionnement enregistre l'image en jpeg et comme toi tu utilise les nom de l'image a la base tu n'enregistre pas le bon nom (par exemple tu upload image.gif tu aura image.jpg dans le répertoire mini, mais tu veux supprimer image.gif, donc soit tu respecte le type de l'image a la base, soit tu prend cette chose en compte (pourquoi ne pas faire retourner le nom de l'image à la classe et ainsi tu n'aura plus de soucis, et en plus tu aura un nom d'image correct dans la table ;) ).

@+
fichier corriger
<?php
//include('params.inc.php');
define('MYHOST','localhost');
define('MYUSER','root');
define('MYPASS','yyRu2TKEvyYpzFLK');
define('MYDB','test');
function up_error($code,$nom) {
    $valid = false;
    switch ($code) {
        case '0' : $erreur = 'Pas d\'erreur';$valid = true;break;
        case '1' : $erreur = 'Votre fichier `'.$nom.'` dépasse la taille maximale d\'upload autorisée par PHP( '.get_cfg_var('upload_max_filesize').' )'; break;
        case '2' : $erreur = 'Votre fichier dépasse la taille maximale demandée par le Webmestre';break;
        case '3' : $erreur = 'Le fichier n\'a pas été totalement uploadé !!!';break;
        case '4' : $erreur = 'Aucun fichier téléchargé !!!';break;
        default : $erreur = 'L\'upload a rencontré une erreur inconnue !!!'; break;
    }
    $return[] = $valid;
    $return[] = $erreur;
    return $return;
}

$connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion');
mysql_select_db(MYDB) or die ('erreur de connexion à la base');
if(!empty($_FILES['img'])){
  //print_r($_FILES);
  require("imgClass.php");
  if ($_FILES['img']['error'] === 0) {
      $img = $_FILES['img'];
      $ext = strtolower(substr($img['name'],-3));
      $allow_ext = array("jpg",'png','gif');
      if(in_array($ext,$allow_ext)){
          if (move_uploaded_file($img['tmp_name'],"images/".$img['name'])) {
              $nom_image = Img::creerMin("images/".$img['name'],"images/min",$img['name'],653,370);
              if ($nom_image !== false){
                  $requeteinsert = 'INSERT INTO images(lienimage,url) VALUES(\''.$nom_image.'\',\''.mysql_real_escape_string($_POST['url']).'\')';
                  $result = mysql_query($requeteinsert,$connect);
              }
          }
          else {
              $x = up_error($_FILES['img']['error'], $_FILES['img']['name']);
              $erreur = 'Le fichier a pas était uploadée '.$x[1];
          }
      }
      else
      {
          echo 'type fichier pas bon<hr />';
      }
  }
  else {
      $x = up_error($_FILES['img']['error'], $_FILES['img']['name']);
      if ($x[0] === false){
          $erreur = '<p style="border:1px solid red; color:red;">Erreur lors de l\'upload : '.$x[1].'</p>';
      }
  }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="css/admin.css"  type="text/css" media="screen, projection" />
    </head>
    <body>
   <?php
if(isset($erreur)){
   echo $erreur;
}
?>
<form method="post" action="" enctype="multipart/form-data">
<fieldset>
<legend>Ajout d'une image</legend>
                <label for="image1">Image</label>
<input type="file"  name="img"/>
<input type="text" id="url" name="url" value="http://"/>
                <label for="image1">url du site web</label>
                <button type="submit">Uploader</button>
            </fieldset>
</form>
<table summary="Liste des images de la galerie">
<caption>Liste des images</caption>
<tr>
<th>Nom</th>
<th>site web</th>
<th>Supprimer</th>
</tr>
<?php
$dir = pathinfo(__FILE__,PATHINFO_DIRNAME);
         if(!empty($_GET['sup']) && is_numeric($_GET['sup'])){
            $requeteselect = 'SELECT lienimage FROM images WHERE id=\''.mysql_real_escape_string($_GET['sup']).'\'';
            $result = mysql_query($requeteselect, $connect);
            $image_courante = mysql_fetch_array($result,MYSQL_ASSOC);
            if (unlink($dir.DIRECTORY_SEPARATOR.$image_courante['lienimage'])) {
                //unlink('images/'.$image_courante['lienimage']);
                $requetesup = 'DELETE FROM images WHERE id=\''.mysql_real_escape_string($_GET['sup']).'\'';
                $result = mysql_query($requetesup, $connect);
            }

         }

         $requeteselect = 'SELECT id,lienimage,url FROM images';
         $result = mysql_query($requeteselect, $connect);
         while($image_courante = mysql_fetch_array($result,MYSQL_ASSOC)){
            echo '<tr>
                  <td>'.$image_courante['lienimage'].'</td>
                  <td>'.stripslashes($image_courante['url']).'</td>
                  <td><a href="?sup='.$image_courante['id'].'">Supprimer</a></td>
            </tr>';
         }
         mysql_free_result($result);
         mysql_close($connect);
         ?>
</table>
</body>
</html>
la classe image modifier
<?php
class Img{
    static function creerMin($img,$chemin,$nom,$mlargeur=100,$mhauteur=100){
        // On supprime l'extension du nom
        $nom = substr($nom,0,-4);
        // On récupère les dimensions de l'image
        $dimension=getimagesize($img);
        // On cré une image à partir du fichier récup
        if(substr(strtolower($img),-4)==".jpg"){$image = imagecreatefromjpeg($img); }
        else if(substr(strtolower($img),-4)==".png"){$image = imagecreatefrompng($img); }
        else if(substr(strtolower($img),-4)==".gif"){$image = imagecreatefromgif($img); }
        // L'image ne peut etre redimensionne
        else{return false; }

        // Création des miniatures
        // On cré une image vide de la largeur et hauteur voulue
        $miniature =imagecreatetruecolor ($mlargeur,$mhauteur);
        // On va gérer la position et le redimensionnement de la grande image
        if($dimension[0]>($mlargeur/$mhauteur)*$dimension[1] ){ $dimY=$mhauteur; $dimX=$mhauteur*$dimension[0]/$dimension[1]; $decalX=-($dimX-$mlargeur)/2; $decalY=0;}
        if($dimension[0]<($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mlargeur*$dimension[1]/$dimension[0]; $decalY=-($dimY-$mhauteur)/2; $decalX=0;}
        if($dimension[0]==($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mhauteur; $decalX=0; $decalY=0;}
        // on modifie l'image crée en y plaçant la grande image redimensionné et décalée
        imagecopyresampled($miniature,$image,$decalX,$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
        unlink($img);
        // On sauvegarde le tout
        if (imagejpeg($miniature,$chemin."/".$nom.".jpg",90)) {
            return $chemin."/".$nom.".jpg";
        }
        else return false;
    }
}
?>
@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

21 juin 2011, 14:52

non je n'est pas besoin de l'image en taille reel car je veux la supprimer une fois le fichier uploader

Eléphant du PHP | 62 Messages

21 juin 2011, 15:31

avec l'upload actuelle, il le fait bien par contre j'ai cette erreur

Warning: unlink(C:\xampp\htdocs\diaporama\) [function.unlink]: Permission denied in C:\xampp\htdocs\diaporama\admin3.php on line 88
je ne sais pas d'ou ça viens, car l'upload se passe bien, nikel, avec la creation de la miniature, et la suppresion de l'image en taille rééel, ainsi que le bdd, c'est bizzare

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 juin 2011, 23:41

heu c'est laquelle la ligne 88 pour toi ?

si c'est bon tu peux cliquer sur le bouton résolu d'un message (celui qui t'a le plus aider ;) )

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

22 juin 2011, 10:35

bonjour
il m'affiche l'erreur en niveau de cette ligne la
if (unlink($dir.DIRECTORY_SEPARATOR.$image_courante['lienimage'])) {
et il me dit:

Code : Tout sélectionner

Warning: unlink(C:\xampp\htdocs\test\) [function.unlink]: Permission denied in C:\xampp\htdocs\test\admin.php on line 88
le probléme c'est que il m'affiche pas ça lors de la suppression mais lors de l'upload d'image, sachant que la supression et l'upload se deroule trés trés bien

NB: j'ai utiliser le corriger du code que vous m'aviez envoyer avec la "imgClass" modifier.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 juin 2011, 20:03

ça veux dire que $image_courante['lienimage'] est vide, ce qui ne peux (doit pas) être le cas !

vérifie dans ta table que toute les lignes sont complètes.

il est possible d'ajouter un if (mysql_num_rows($result) === 1 ) juste a près la requête
<?php
if(!empty($_GET['sup']) && is_numeric($_GET['sup'])){
            $requeteselect = 'SELECT lienimage FROM images WHERE id=\''.mysql_real_escape_string($_GET['sup']).'\'';
            $result = mysql_query($requeteselect, $connect);
             if (mysql_num_rows($result) === 1 ){
                $image_courante = mysql_fetch_array($result,MYSQL_ASSOC);
                if (unlink($dir.DIRECTORY_SEPARATOR.$image_courante['lienimage'])) {
                    //unlink('images/'.$image_courante['lienimage']);
                    $requetesup = 'DELETE FROM images WHERE id=\''.mysql_real_escape_string($_GET['sup']).'\'';
                    $result = mysql_query($requetesup, $connect);
                }
            }
            else {
                // erreur soit zéro soit plus d'un tuples. 
            }
            mysql_free_result($result);
         }
?>
Peut tu donner plus d'info sur le moment ou cela ce produit ?

tu n'aurais pas fait une insertion après une suppression ? (et que donc l'url lors de l'insertion finis par ?sup=xxx ? :) si c'est le cas c'est normal l'ajout du test sur le nombre de tuple retourné devrais corriger la chose ;) ).

sinon force la destination du formulaire avec <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data"> ce qui supprimera le problème :)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

23 juin 2011, 10:46

enfait l'erreur se prodiot qund je suuprime une image, et quand j'upload une autre image juste aprés

Eléphant du PHP | 62 Messages

23 juin 2011, 11:03

la je viens de le tester bien comme il, alors je trouve que ça bloque le moment ou on supprime une photo, et qu'on essaye de la re-uploader juste aprés :D :D :D alors je ne sais pas du tout c'est du à quoi

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 juin 2011, 13:20

la je viens de le tester bien comme il, alors je trouve que ça bloque le moment ou on supprime une photo, et qu'on essaye de la re-uploader juste aprés :D :D :D alors je ne sais pas du tout c'est du à quoi
expliqué dans mon dernier message, c'est parce que le action du formulaire est vide, donc la navigateur envoie le formulaire a la même url, paramètre compris, donc le ?sup=xx ce qui fait que le script va essayé de supprimer la photo dans la table (et sur le disque) alors qu'elle n'existe déjà plus ;)

code corrigé
<?php
//include('params.inc.php');
define('MYHOST','localhost');
define('MYUSER','root');
define('MYPASS','yyRu2TKEvyYpzFLK');
define('MYDB','test');
function up_error($code,$nom) {
    $valid = false;
    switch ($code) {
        case '0' : $erreur = 'Pas d\'erreur';$valid = true;break;
        case '1' : $erreur = 'Votre fichier `'.$nom.'` dépasse la taille maximale d\'upload autorisée par PHP( '.get_cfg_var('upload_max_filesize').' )'; break;
        case '2' : $erreur = 'Votre fichier dépasse la taille maximale demandée par le Webmestre';break;
        case '3' : $erreur = 'Le fichier n\'a pas été totalement uploadé !!!';break;
        case '4' : $erreur = 'Aucun fichier téléchargé !!!';break;
        default : $erreur = 'L\'upload a rencontré une erreur inconnue !!!'; break;
    }
    $return[] = $valid;
    $return[] = $erreur;
    return $return;
}

$connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion');
mysql_select_db(MYDB) or die ('erreur de connexion à la base');
if(!empty($_FILES['img'])){
  //print_r($_FILES);
  require("imgClass.php");
  if ($_FILES['img']['error'] === 0) {
      $img = $_FILES['img'];
      $ext = strtolower(substr($img['name'],-3));
      $allow_ext = array("jpg",'png','gif');
      if(in_array($ext,$allow_ext)){
          if (move_uploaded_file($img['tmp_name'],"images/".$img['name'])) {
              $nom_image = Img::creerMin("images/".$img['name'],"images/min",$img['name'],653,370);
              if ($nom_image !== false){
                  $requeteinsert = 'INSERT INTO images(lienimage,url) VALUES(\''.$nom_image.'\',\''.mysql_real_escape_string($_POST['url']).'\')';
                  $result = mysql_query($requeteinsert,$connect);
              }
          }
          else {
              $x = up_error($_FILES['img']['error'], $_FILES['img']['name']);
              $erreur = 'Le fichier a pas était uploadée '.$x[1];
          }
      }
      else
      {
          echo 'type fichier pas bon<hr />';
      }
  }
  else {
      $x = up_error($_FILES['img']['error'], $_FILES['img']['name']);
      if ($x[0] === false){
          $erreur = '<p style="border:1px solid red; color:red;">Erreur lors de l\'upload : '.$x[1].'</p>';
      }
  }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="css/admin.css"  type="text/css" media="screen, projection" />
    </head>
    <body>
   <?php
if(isset($erreur)){
   echo $erreur;
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
<fieldset>
<legend>Ajout d'une image</legend>
                <label for="image1">Image</label>
<input type="file"  name="img"/>
<input type="text" id="url" name="url" value="http://"/>
                <label for="image1">url du site web</label>
                <button type="submit">Uploader</button>
            </fieldset>
</form>
<table summary="Liste des images de la galerie">
<caption>Liste des images</caption>
<tr>
<th>Nom</th>
<th>site web</th>
<th>Supprimer</th>
</tr>
<?php
$dir = pathinfo(__FILE__,PATHINFO_DIRNAME);
         if(!empty($_GET['sup']) && is_numeric($_GET['sup'])){
            $requeteselect = 'SELECT lienimage FROM images WHERE id=\''.mysql_real_escape_string($_GET['sup']).'\'';
            $result = mysql_query($requeteselect, $connect);
             if (mysql_num_rows($result) === 1 ){
                $image_courante = mysql_fetch_array($result,MYSQL_ASSOC);
                if (unlink($dir.DIRECTORY_SEPARATOR.$image_courante['lienimage'])) {
                    //unlink('images/'.$image_courante['lienimage']);
                    $requetesup = 'DELETE FROM images WHERE id=\''.mysql_real_escape_string($_GET['sup']).'\'';
                    $result = mysql_query($requetesup, $connect);
                }
                mysql_free_result($result);
            }
            else {
                // erreur soit zéro soit plus d'un tuples. 
                echo 'le fichier existe pas ;)<hr />';
            }
            
         }

         $requeteselect = 'SELECT id,lienimage,url FROM images';
         $result = mysql_query($requeteselect, $connect);
         while($image_courante = mysql_fetch_array($result,MYSQL_ASSOC)){
            echo '<tr>
                  <td>'.$image_courante['lienimage'].'</td>
                  <td>'.stripslashes($image_courante['url']).'</td>
                  <td><a href="?sup='.$image_courante['id'].'">Supprimer</a></td>
            </tr>';
         }
         mysql_free_result($result);
         mysql_close($connect);
         ?>
</table>
</body>
</html>
bien entendu tu peux supprimer ou modifier le message d'erreur ligne 102 ^^

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

23 juin 2011, 16:23

désole méme avec le code corrigé on a le méme probléme:
qudn j'upload tout va bien
mais une fois l'image supprimé, et que je veux re-uploader, bah il affiche l'rreur sur le unlink, mais il effectue quand méme l'opétaion
je vous donne tout mes codes afin de bien tésté
*le nom ma base est "diapo"
-le code sql des table
-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Mar 21 Juin 2011 à 12:49
-- Version du serveur: 5.1.30
-- Version de PHP: 5.2.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de données: `diapo`
--

-- --------------------------------------------------------

--
-- Structure de la table `images`
--

CREATE TABLE IF NOT EXISTS `images` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `lienimage` varchar(100) NOT NULL,
  `url` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=102 ;

--
-- Contenu de la table `images`
--

INSERT INTO `images` (`id`, `lienimage`, `url`) VALUES
(101, 'images/min/coca.jpg', 'http://www.cocacola.com'),
(100, 'images/min/fanta.jpg', 'http://www.fanta.com');

- ma classe pour creer les miniatures"imgClass.php"
<?php
class Img{
    static function creerMin($img,$chemin,$nom,$mlargeur=653,$mhauteur=370){
        // On supprime l'extension du nom
        $nom = substr($nom,0,-4);
        // On récupère les dimensions de l'image
        $dimension=getimagesize($img);
        // On cré une image à partir du fichier récup
        if(substr(strtolower($img),-4)==".jpg"){$image = imagecreatefromjpeg($img); }
        else if(substr(strtolower($img),-4)==".png"){$image = imagecreatefrompng($img); }
        else if(substr(strtolower($img),-4)==".gif"){$image = imagecreatefromgif($img); }
        // L'image ne peut etre redimensionne
        else{return false; }

        // Création des miniatures
        // On cré une image vide de la largeur et hauteur voulue
        $miniature =imagecreatetruecolor ($mlargeur,$mhauteur);
        // On va gérer la position et le redimensionnement de la grande image
        if($dimension[0]>($mlargeur/$mhauteur)*$dimension[1] ){ $dimY=$mhauteur; $dimX=$mhauteur*$dimension[0]/$dimension[1]; $decalX=-($dimX-$mlargeur)/2; $decalY=0;}
        if($dimension[0]<($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mlargeur*$dimension[1]/$dimension[0]; $decalY=-($dimY-$mhauteur)/2; $decalX=0;}
        if($dimension[0]==($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mhauteur; $decalX=0; $decalY=0;}
        // on modifie l'image crée en y plaçant la grande image redimensionné et décalée
        imagecopyresampled($miniature,$image,$decalX,$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
        unlink($img);
        // On sauvegarde le tout
        if (imagejpeg($miniature,$chemin."/".$nom.".jpg",90)) {
            return $chemin."/".$nom.".jpg";
        }
        else return false;
    }
}
?>
-ma page "admin.php"que vous bavez corriger
<?php
include('params.inc.php');

function up_error($code,$nom) {
    $valid = false;
    switch ($code) {
        case '0' : $erreur = 'Pas d\'erreur';$valid = true;break;
        case '1' : $erreur = 'Votre fichier `'.$nom.'` dépasse la taille maximale d\'upload autorisée par PHP( '.get_cfg_var('upload_max_filesize').' )'; break;
        case '2' : $erreur = 'Votre fichier dépasse la taille maximale demandée par le Webmestre';break;
        case '3' : $erreur = 'Le fichier n\'a pas été totalement uploadé !!!';break;
        case '4' : $erreur = 'Aucun fichier téléchargé !!!';break;
        default : $erreur = 'L\'upload a rencontré une erreur inconnue !!!'; break;
    }
    $return[] = $valid;
    $return[] = $erreur;
    return $return;
}

$connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion');
mysql_select_db(MYDB) or die ('erreur de connexion à la base');
if(!empty($_FILES['img'])){
  //print_r($_FILES);
  require("imgClass.php");
  if ($_FILES['img']['error'] === 0) {
      $img = $_FILES['img'];
      $ext = strtolower(substr($img['name'],-3));
      $allow_ext = array("jpg",'png','gif');
      if(in_array($ext,$allow_ext)){
          if (move_uploaded_file($img['tmp_name'],"images/".$img['name'])) {
              $nom_image = Img::creerMin("images/".$img['name'],"images/min",$img['name'],653,370);
              if ($nom_image !== false){
                  $requeteinsert = 'INSERT INTO images(lienimage,url) VALUES(\''.$nom_image.'\',\''.mysql_real_escape_string($_POST['url']).'\')';
                  $result = mysql_query($requeteinsert,$connect);
              }
          }
          else {
              $x = up_error($_FILES['img']['error'], $_FILES['img']['name']);
              $erreur = 'Le fichier a pas était uploadée '.$x[1];
          }
      }
      else
      {
          echo 'type fichier pas bon<hr />';
      }
  }
  else {
      $x = up_error($_FILES['img']['error'], $_FILES['img']['name']);
      if ($x[0] === false){
          $erreur = '<p style="border:1px solid red; color:red;">Erreur lors de l\'upload : '.$x[1].'</p>';
      }
  }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="css/admin.css"  type="text/css" media="screen, projection" />
    </head>
    <body>
   <?php
if(isset($erreur)){
   echo $erreur;
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
<fieldset>
<legend>Ajout d'une image</legend>
                <label for="image1">Image</label>
<input type="file"  name="img"/>
<input type="text" id="url" name="url" value="http://"/>
                <label for="image1">url du site web</label>
                <button type="submit">Uploader</button>
            </fieldset>
</form>
<table summary="Liste des images de la galerie">
<caption>Liste des images</caption>
<tr>
<th>Nom</th>
<th>site web</th>
<th>Supprimer</th>
</tr>
<?php
$dir = pathinfo(__FILE__,PATHINFO_DIRNAME);
         if(!empty($_GET['sup']) && is_numeric($_GET['sup'])){
            $requeteselect = 'SELECT lienimage FROM images WHERE id=\''.mysql_real_escape_string($_GET['sup']).'\'';
            $result = mysql_query($requeteselect, $connect);
             if (mysql_num_rows($result) === 1 ){
                $image_courante = mysql_fetch_array($result,MYSQL_ASSOC);
                if (unlink($dir.DIRECTORY_SEPARATOR.$image_courante['lienimage'])) {
                    //unlink('images/'.$image_courante['lienimage']);
                    $requetesup = 'DELETE FROM images WHERE id=\''.mysql_real_escape_string($_GET['sup']).'\'';
                    $result = mysql_query($requetesup, $connect);
                }
                mysql_free_result($result);
            }
            else {
                // erreur soit zéro soit plus d'un tuples.
                echo 'le fichier existe pas <img src="./images/smilies/icon_wink.gif" alt=";)" title="Wink" /><hr />';
            }
           
         }

         $requeteselect = 'SELECT id,lienimage,url FROM images';
         $result = mysql_query($requeteselect, $connect);
         while($image_courante = mysql_fetch_array($result,MYSQL_ASSOC)){
            echo '<tr>
                  <td>'.$image_courante['lienimage'].'</td>
                  <td>'.stripslashes($image_courante['url']).'</td>
                  <td><a href="?sup='.$image_courante['id'].'">Supprimer</a></td>
            </tr>';
         }
         mysql_free_result($result);
         mysql_close($connect);
         ?>
</table>
</body>
</html>
et mon script de connexion à la base"params.inc.php"
<?php
define("MYHOST","localhost");
define("MYUSER","root");
define("MYPASS","");
define("MYDB","diapo");
?>
et le css "admin.css"
form{
    width:500px;
    margin:auto;
    background-color:#e5e5e5;
    border-radius:1em; 
    -moz-border-radius:1em; 
}
form *{
    font-size:1.0em;
    font-family:georgia;
}
form fieldset{
    border:none;
}
 
form legend{
    font-size:2em;
    color:#777;
    margin-top:0.3em;
}
form label{
    display:block;
    float:left;
    width:150px;
    text-align:right;
}
form input, form select, form textarea{
    width:300px;
    margin-bottom: 1em;
    margin-left:0.5em;
}
form button{
    position:relative;
    left:160px;
}
 
table{
width:50%;
margin:auto;
}
table caption{
font-size:2em;
color:#777;
}
table th{
background-color:#ddd;
border:none;
}
.style1{
position:relative;
left:770px;

}
.style2{
position:relative;
left:240px;
voila la je pense que vous avez tout, et essayer d'uploader un fichier, vous allez constater que tout fonctionne bien, mais une fois vous le supprimer, et que vous essayer d'uploader un autre donc vous auriez l'errreur
et je vous remercie beaucoup pour votre aide^^

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 juin 2011, 16:50

hum y a moyen de tester en ligne ?

Qu'elle version de php ?

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

23 juin 2011, 21:20

je n'est pas de serveur en ligne je travaille en local