Page 1 sur 1

Souci avec les images

Posté : 08 nov. 2006, 17:50
par 2501gigi
Salut j'ai un peut souci car j'ai se code :
<?php

if(!isset($_FILES["fichier_choisi"] )) $imgsolt=""; else $imgsolt=$_FILES["fichier_choisi"];


if(!empty($_FILES["fichier_choisi"]["name"]))
{
	//nom du fichier choisi:
	$nomFichier    = $_FILES["fichier_choisi"]["name"] ;
	//nom temporaire sur le serveur:
	$nomTemporaire = $_FILES["fichier_choisi"]["tmp_name"] ;
	//type du fichier choisi:
	$typeFichier   = $_FILES["fichier_choisi"]["type"] ;
	//poids en octets du fichier choisit:
	$poidsFichier  = $_FILES["fichier_choisi"]["size"] ;
	//code de l'erreur si jamais il y en a une:
	$codeErreur    = $_FILES["fichier_choisi"]["error"] ;
	
	$type_file = $_FILES["fichier_choisi"]["type"];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'JPG') && !strstr($type_file, 'JPEG') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
    { 
	exit("Le fichier choisi n'est pas une image");
	}
    else 
	{	
    if ($actionajouims=="Ajouter")  //Si le bouton ajouter et que la valeur de la session et 1 on modifier
    {
    $insertimgslot = "INSERT INTO tcollslot (IMSlot,TITIMslot) VALUES ('$imgsolt','$TitreImagSlot')";//inserer la date, le titre et le texte
    $Result7 = mysql_query($insertimgslot, $Debaseconnect) or die(mysql_error()); 
    header("Location: notesCollecSlot.php");
    }
	}
}	
else
{
echo("Vous n'avez pas choisit de fichier!!<br>") ;
}
?>
Mais le soucis c'est que sa ne m'enregistre pas l'image dans ma BD.


Alors je suis pas sur que sa, sa se fasse :
if(!isset($_FILES["fichier_choisi"] )) $imgsolt=""; else $imgsolt=$_FILES["fichier_choisi"];
Puis dans ma BD le type de champs de mon image et VARCHAR et sa non plus je pense pas que sa se fasse.

Une petite idée.

Posté : 08 nov. 2006, 18:28
par 2501gigi
j'ai changer de technique vous me dites si c'est mieux en faite je vais enregistrer le lien de l'image dans la bd une fois l'uploade du fichier image reussi dans un dossier dedier, bien sur mon code ne marche pas.
 <?php
//on vérifies que le champ est bien rempli:
if(!empty($_FILES["fichier_choisi"]["name"]))
{
	//nom du fichier choisi:
	$nomFichier    = $_FILES["fichier_choisi"]["name"] ;
	//nom temporaire sur le serveur:
	$nomTemporaire = $_FILES["fichier_choisi"]["tmp_name"] ;
	//type du fichier choisi:
	$typeFichier   = $_FILES["fichier_choisi"]["type"] ;
	//poids en octets du fichier choisit:
	$poidsFichier  = $_FILES["fichier_choisi"]["size"] ;
	//code de l'erreur si jamais il y en a une:
	$codeErreur    = $_FILES["fichier_choisi"]["error"] ;
	
	//chemin qui mène au dossier qui va contenir les fichiers uplaod:
	$content_dir = 'photosbien' ;
    
	$type_file = $_FILES["fichier_choisi"]["type"];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'JPG') && !strstr($type_file, 'JPEG') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
    { 
	exit("Le fichier choisi n'est pas une image");
	}
    else 
	{
     if(move_uploaded_file($nomTemporaire,$content_dir.'/'.$nomFichier))
     { $imgslot= "'.$content_dir.'/'.$nomFichier.'";	 
       if ($actionajouims=="Ajouter") 
       {
       $insertLienimgs = "INSERT INTO tcollslot (IMSlot,TITIMslot) VALUES ('$imgsolt','$TitreImagSlot')";
       $Result6 = mysql_query($insertLienimgs, $Debaseconnect) or die(mysql_error()); 
       header("Location: notesCollecSlot.php");
	   } 
	 }
	  else
	  {
	  echo("l'upload a échoué") ;
	  }	
	}
}//fin if
else
{
	echo("Vous n'avez pas choisit de fichier!!<br>") ;
	
}


//fin else
?>
Une idée.

Posté : 08 nov. 2006, 20:25
par 2501gigi
J'ai mis sa pour voir mais sa ne marche pas non plus :
 $insertLienimgs = "INSERT INTO tcollslot (IMSlot,TITIMslot) VALUES ('.$content_dir.'/'.$nomFichier.','$TitreImagSlot')";

Posté : 09 nov. 2006, 12:57
par Ryle
Si tu optes pour la solution 1 (stocker des images dans ta base de données), c'est un champ de type LONGBLOB qu'il te faut utiliser pour stocker le fichier en binaire (avec un fread())
Par contre, ça allourdi considérablement ta base et va donc ralentir les recherches. L'intérêt dans ton cas est à mon avis assez limité, c'est plutôt utile si tu as besoin de faire des recherches de formes ou de couleurs... :)

Concernant la solution 2, au lieu de nous dire "ça ne marche pas" commence toujours par tester ton code :
- vériifes que tu rentres dans les if() en ajoutant des echo "xx" et en vérifiant qu'ils apparaissent bien
- si tu n'entre pas dans un if() c'est que la condition est fausse, affiche les variables que tu utilises pour contrôler leurs valeurs
- affiche le sql que tu génères, vérifies les valeurs, essayes le dans mysql

En faisant cela tu verrais :
- que tu rentre bien dans le if
- que ta variable $imgslot est bien renseignée
- que sa valeur dans ta requête est vide

Tu en déduirais donc qu'il y a un soucis entre ces deux lignes. Ca réduit nettement la portée du problème, aussi bien pour nous que pour toi :) Et si tu ne vois toujours pas pourquoi $imgslot est renseigné alors que $imgsolt ne l'est pas, tu peux venir poser la question dès fois que quelqu'un remarque la différence ;)

Mais tu auras à mon avis beaucoup plus de satisfaction à faire ces quelques tests et à trouver la solution toi même quand tu buttes sur un problème :)

Posté : 09 nov. 2006, 13:35
par 2501gigi
Merci ryle et c'est ce que j'ai fait sa a bien marche sauf que maintenany j'ai plus un soucis de mis en forme dirons nous , à non de syntax j'ai trouvé le mot que je chercher, mais je n'arrive pas a trouver.

Voila ma ligne:
$insertLienimgs = "INSERT INTO tcollslot (IMSlot,TITIMslot) VALUES (". $_FILES['fichier_choisi']['name'].",'$TitreImagSlot')";
Pour le probleme precedent donc j'avais trouvé en feuilletent le forum si je peut m'exprimer ainsi.

La ligne du code mise precedament fais parti de ceci:
			  <?php 
      if(isset($_FILES['fichier_choisi'])) 

      { 
        //parametres 
        unset($erreur); 
        $extensions_ok = array('png', 'gif', 'jpg', 'jpeg', 'JPG','JPEG'); 
        $taille_max = 1000000; 
        $dest_dossier = 'photosbien'; 
        $size = getimagesize("".$_FILES['fichier_choisi']['tmp_name']); 
        $height = $size[1]; 
        $width = $size[0]; 
        $taille = 100000; 

        // On verrifie les extensions 
         if( !in_array( substr(strrchr($_FILES['fichier_choisi']['name'], '.'), 1), $extensions_ok ) ) 
           { 
             echo("Le fichier choisi n'est pas une image");
          } 
        // On verrifie la taille du fichier 
         elseif( file_exists($_FILES['fichier_choisi']['name']) and $_FILES['fichier_choisi']['size'] > $taille_max) 
           { 
             echo("Le fichier choisi est trop grand");
          } 
        elseif( file_exists($_FILES['fichier_choisi']['name']) and $height > $taille && $width > $taille) 
           { 
            echo("Le fichier choisi est trop grand");
          } 

        // Si ficher = bonne taille & bonne extension 
             if(!isset($erreur)) 
             { 

            $dest_fichier = basename($_FILES['fichier_choisi']['name']); 
            //formatage nom fichier 
            //enlever les accents 
            $dest_fichier = strtr($dest_fichier, 
            'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
            'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
            // remplacer les caracteres autres que lettres, chiffres et point par _ 
            $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier); 
            // On upload le fichier 
               move_uploaded_file($_FILES['fichier_choisi']['tmp_name'], $dest_dossier .'/'. $_FILES['fichier_choisi']['name']); 
			   $insertLienimgs = "INSERT INTO tcollslot (IMSlot,TITIMslot) VALUES (". $_FILES['fichier_choisi']['name'].",'$TitreImagSlot')";
               $Result6 = mysql_query($insertLienimgs, $Debaseconnect) or die(mysql_error()); 
			   header("location: notesCollecSlot.php");
			       } 
      }else{ 
       echo("Vous n'avez pas choisit de fichier!!<br>") ;
      } 

?>
Par contre ouij'ai choisi la 2 ieme solution en faite enregistrer le nom de la photos dans la base de donnée puis de l'afficher comme ceci :
 <?php
echo '<img src="photosbien/'.$row_RTcollecslot['IMSlot'].'" border="0">'; ?>
J'aurais aussi voulus savoir si avec se bout de code en rajoutant queque fonction biensur il est possible de redimensionner l'image a l'affichage?

Et 2ieme que quand on supprimer le non de la base de donnees sa supprimer la photos dans le dossier?

Merci a tous

Posté : 10 nov. 2006, 15:58
par 2501gigi
Bon voila j'ai trouvait ce code pour redimensionner l'image :
function thumbnail($file, $maxWidth, $maxHeight){//Créer une image à partir de $file
    $img = ImageCreateFromJpeg("$file");
    //Dimensions de l'image
    $imgWidth = imagesx($img);
    $imgHeight = imagesy($img);
    //Facteur largeur/hauteur des dimensions max
    $whFact = $maxWidth/$maxHeight;
    //Facteur largeur/hauteur de l'original
    $imgWhFact = $imgWidth/$imgHeight;
    //fixe les dimensions du thumb
    if($whFact < $imgWhFact){//Si largeur déterminante
        $thumbWidth  = $maxWidth;
        $thumbHeight = $thumbWidth/$imgWhFact;
    } else { //Si hauteur déterminante
        $thumbHeight = $maxHeight;
        $thumbWidth = $thumbHeight*$imgWhFact;
    }
    
    //Crée le thumb (image réduite)
    $imgThumb = ImageCreateTruecolor($thumbWidth, $thumbHeight);
    //Insère l'image de base redimensionnée
    ImageCopyResized($imgThumb, $img, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight);
    //Nom du fichier thumb
    $imgThumbName = "thumb_".$file;
    //Crée le fichier thumb
    $fp = fopen($imgThumbName, "w");
    fclose($fp);
    //Renvoie le thumb créé
    ImageJpeg($imgThumb, $imgThumbName);
    return $imgThumbName;
}
et je fais appelle a cette fonction en faisant ca :
echo '<img src="photosbien/'.thumbnail($row_RTcollecslot['IMslot'], 100, 100).'" border="0">';
mais sa ne marche pas voila sa m'affiche sa :
Notice: Undefined index: IMslot in c:\program files\easyphp1-7\www\sitedebase\admin\notescollecslot.php on line 308

Warning: imagesx(): supplied argument is not a valid Image resource in c:\program files\easyphp1-7\www\sitedebase\admin\notescollecslot.php on line 279

Warning: imagesy(): supplied argument is not a valid Image resource in c:\program files\easyphp1-7\www\sitedebase\admin\notescollecslot.php on line 280

Warning: Division by zero in c:\program files\easyphp1-7\www\sitedebase\admin\notescollecslot.php on line 284

Warning: imagecreatetruecolor(): Invalid image dimensions in c:\program files\easyphp1-7\www\sitedebase\admin\notescollecslot.php on line 295

Warning: imagecopyresized(): supplied argument is not a valid Image resource in c:\program files\easyphp1-7\www\sitedebase\admin\notescollecslot.php on line 297

Warning: imagejpeg(): supplied argument is not a valid Image resource in c:\program files\easyphp1-7\www\sitedebase\admin\notescollecslot.php on line 304
Quelqu'un peut m'aider.

Posté : 10 nov. 2006, 16:49
par 2501gigi
Bon puisque personne ne ma aider j'ai fait autrement, j'aurais juste a creé une miniature et la selectionner en maintenant que l'image reelle c'est un peut plus de boulot a la creation de l'image mais pour le code c'est plus facile.

Mais par contre quand je supprimer un enregistrement donc contenant l'Id, la miniature et l'image taille reelle et le texte sa marche ,mais sa ne me supprime pas les image qui se trouve dans le dossier.

Comment puis-je m'y prendre.

Posté : 10 nov. 2006, 18:04
par Ryle
Tu n'es pas obligé de changer de façon de faire à chaque fois que personne ne te réponds, tu peux aussi attendre un peu plus qu'une heure pour avoir une réponse ;)

Pour la suppression du fichier, il te faut récuperer le nom du fichier en base avant de le supprimer et utiliser la fonction unlink() pour virer le fichier :)

Posté : 10 nov. 2006, 19:03
par 2501gigi
Oui je sais merci ryle mais de toute facons je pense que l solution que j'ai choisie et la plus facile a metre en place mais peut etre pas la plus pratique mais au moins sa marche.

Merci je vais essayer unlink().