Forums Webou.net - Hébergement gratuit et sans publicités avec PHP/MySQL

Programmation => PHP/MySQL - (x)HTML - ... => Discussion démarrée; par: asgpv-18 le 19 Juin 2009, 18:19:17



Titre: inserer une image dans la bdd
Posté par: asgpv-18 le 19 Juin 2009, 18:19:17
Bon en ce moment c'est la grande rénovation dans mon site,
donc j'aimerai, dans l'espace membre que j'ai créé, donner la possibilité à chaque membre de se créer un avatar.

Pour se faire je pense que le plus judicieux serait de mettre dans le formulaire d'inscription un champ upload qui envoie directement la photo dans la base de donnée.

Je voudrais savoir d'abord s'il est possible de stocker des images dans la bdd directement, si oui j'ai essayé en créant dans ma table "membre2" un champ "avatar" (longblob) mais je n'arrive pas à récuperer l'image sur ma page.

voici le code de la page:
Code:
<?php
mysql_connect
("localhost""...""mdp");
mysql_select_db("...");
 
$reponse mysql_query("SELECT * FROM membre2"); // Requête SQL
 
 
// On fait une boucle pour lister tout ce que contient la table :
 
while ($donnees mysql_fetch_array($reponse) )
{
?>

    <p>
    <strong>Avatar</strong> : <?php echo $donnees['avatar']; ?><br />

   </p>
<?php
}
 
mysql_close(); // Déconnexion de MySQL
?>


(Le code est simplifié au maximum)
Pouvez vous me dire si le probleme vient de la base de donnée ou du code? :)


Titre: Re: inserer une image dans la bdd
Posté par: Ninety le 19 Juin 2009, 20:21:35
Tu peux faire un script qui sauvegarde ton image dans un dossier sur ton serveur et un autre script qui met le lien de cette image dans la BDD ;).


Titre: Re: inserer une image dans la bdd
Posté par: MIkE le 19 Juin 2009, 20:46:22
Bonjour,

Il est déconseillé de stocker des images dans la BDD. C'est très inefficace au niveau ressources, et ça fait exploser la taille de la BDD qui n'est pas faite pour ça.


Titre: Re: inserer une image dans la bdd
Posté par: asgpv-18 le 20 Juin 2009, 11:30:54
ok donc il faut mieux passer par un lien, mais y a t-il un moyen que lorsque le visiteur upload le fichier sur le serveur qu'un lien se créé automatiquement (sans que le visiteur ait besoin de le taper..).
En gros j'aimerai savoir comment font les blogs pour faire des articles avec images.


Titre: Re: inserer une image dans la bdd
Posté par: Neiflheim le 20 Juin 2009, 14:12:25
oui tu renomme le fichier de destination, en mettant par exemple le pseudo du membre >> $name= 'images/avatar'.$_SESSION['login'].'.jpg'; enfin après tout dépend ton code, comme ça tu es sur que personne ne pourra faire un doublon d'image dans ton dossier avatar  ;)


Titre: Re: inserer une image dans la bdd
Posté par: asgpv-18 le 20 Juin 2009, 14:39:58
ok je vais essayer de faire ca merci  :)


Titre: Re: inserer une image dans la bdd
Posté par: asgpv-18 le 20 Juin 2009, 16:00:50
oui tu renomme le fichier de destination, en mettant par exemple le pseudo du membre >> $name= 'images/avatar'.$_SESSION['login'].'.jpg'; enfin après tout dépend ton code, comme ça tu es sur que personne ne pourra faire un doublon d'image dans ton dossier avatar  ;)

J'ai un peu du mal a integrer ton code Neiflheim dans le mien...
Mon code est le suivant:
[Fichier: upload.php]
Code:
<?php include("../fct_membre.php"); ?>
<?php

if( isset($_POST['upload']) ) {  // si formulaire soumis
    
$dossier 'images/avatar/'// nom du dossier ou vont &#38;#234;tre stock&#38;#233; les images
    
$fichier basename($_FILES['fichier']['name']);
    
$taille_maxi 16777216;  // taille maximal du fichier
    
$taille filesize($_FILES['fichier']['tmp_name']);
    
$extensions = array('.png''.gif''.jpg');
    
$extension strrchr($_FILES['fichier']['name'], '.');
    
//D&#38;#233;but des v&#38;#233;rifications de s&#38;#233;curit&#38;#233;...
    
if(!in_array($extension$extensions)) { //Si l'extension n'est pas dans le tableau
         
$erreur 'Vous devez uploader un fichier de type jpg, png ou gif...';
    }
    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
         
$fichier strtr($fichier,
              
'&#38;#192;&#38;#193;&#38;#194;&#38;#195;&#38;#196;&#38;#197;&#38;#199;&#38;#200;&#38;#201;&#38;#202;&#38;#203;&#38;#204;&#38;#205;&#38;#206;&#38;#207;&#38;#210;&#38;#211;&#38;#212;&#38;#213;&#38;#214;&#38;#217;&#38;#218;&#38;#219;&#38;#220;&#38;#221;&#38;#224;&#38;#225;&#38;#226;&#38;#227;&#38;#228;&#38;#229;&#38;#231;&#38;#232;&#38;#233;&#38;#234;&#38;#235;&#38;#236;&#38;#237;&#38;#238;&#38;#239;&#38;#240;&#38;#242;&#38;#243;&#38;#244;&#38;#245;&#38;#246;&#38;#249;&#38;#250;&#38;#251;&#38;#252;&#38;#253;&#38;#255;',
              
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
         
$fichier preg_replace('/([^.a-z0-9]+)/i''-'$fichier);
         if(
move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier $fichier)) { //Si l'upload a fonctionn&#38;#233;...
              
echo 'Upload effectu&#38;#233; avec succ&#38;#232;s !';
         }
         else { 
// Sinon
              
echo 'Echec de l\'upload !';
         }
    }
    else {
         echo 
$erreur;
    }
}

?>
Quelqu'un pourrait me le modifier?   :-\


Titre: Re: inserer une image dans la bdd
Posté par: Ninety le 21 Juin 2009, 00:14:49
En même temps que tu upload ton fichier et donc que tu le sauvegarde sur le serveur, tu dois insérer son emplacement (INSERT) dans la BDD.
A l'affichage de la page tu va devoir récupérer cet emplacement (SELECT) de la BDD. Ensuite tu va afficher l'image grâce a la balise img (imaginons que le chemin de l'image soit stocker dans $path) :

Code:
<?php
    
echo '<img alt=\'mom_image\' src=\''$path .'\' />';
?>


Titre: Re: inserer une image dans la bdd
Posté par: asgpv-18 le 21 Juin 2009, 10:48:46
Merci mais j'envisage plutot de faire uploader le fichier sur le serveur puis aux endroits où je veux qu'il y ait l'image je met ce code :
Code:
<img src="images/avatar_<?php echo htmlentities(trim($_SESSION['login'])); ?>.jpg">
mais seulement il faudrait d'abord que j'arrive à faire ce que Neiflheim a dit : changer le nom du fichier uploader pour qu'il prenne le nom du membre qui l'envoi.

Exemple: "jean_nemar" upload sa jolie photo perso qui s'appele "bg.jpg" et quand celle-ci est reçue sur le serveur dans le fichier "images" elle porte le nom de "avatar_jean_nemar.jpg" , à chaque fois qu'il uploadera un avatar, l'ancien sera supprimé (vu qu'il porte le même nom). :)

C'est très simple à faire , il faut juste que j'arrive à changer le nom du fichier pendant l'upload.
quelqu'un pourrait me modifier mon code afin que ca marche?

Code:
<?php include("../fct_membre.php"); ?>
<?php

if( isset($_POST['upload']) ) {  // si formulaire soumis
    
$dossier 'images/avatar/'// nom du dossier ou vont &#38;#38;#234;tre stock&#38;#38;#233; les images
    
$fichier basename($_FILES['fichier']['name']);
    
$taille_maxi 16777216;  // taille maximal du fichier
    
$taille filesize($_FILES['fichier']['tmp_name']);
    
$extensions = array('.png''.gif''.jpg');
    
$extension strrchr($_FILES['fichier']['name'], '.');
    
//D&#38;#38;#233;but des v&#38;#38;#233;rifications de s&#38;#38;#233;curit&#38;#38;#233;...
    
if(!in_array($extension$extensions)) { //Si l'extension n'est pas dans le tableau
         
$erreur 'Vous devez uploader un fichier de type jpg, png ou gif...';
    }
    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
         
$fichier strtr($fichier,
              
'&#38;#38;#192;&#38;#38;#193;&#38;#38;#194;&#38;#38;#195;&#38;#38;#196;&#38;#38;#197;&#38;#38;#199;&#38;#38;#200;&#38;#38;#201;&#38;#38;#202;&#38;#38;#203;&#38;#38;#204;&#38;#38;#205;&#38;#38;#206;&#38;#38;#207;&#38;#38;#210;&#38;#38;#211;&#38;#38;#212;&#38;#38;#213;&#38;#38;#214;&#38;#38;#217;&#38;#38;#218;&#38;#38;#219;&#38;#38;#220;&#38;#38;#221;&#38;#38;#224;&#38;#38;#225;&#38;#38;#226;&#38;#38;#227;&#38;#38;#228;&#38;#38;#229;&#38;#38;#231;&#38;#38;#232;&#38;#38;#233;&#38;#38;#234;&#38;#38;#235;&#38;#38;#236;&#38;#38;#237;&#38;#38;#238;&#38;#38;#239;&#38;#38;#240;&#38;#38;#242;&#38;#38;#243;&#38;#38;#244;&#38;#38;#245;&#38;#38;#246;&#38;#38;#249;&#38;#38;#250;&#38;#38;#251;&#38;#38;#252;&#38;#38;#253;&#38;#38;#255;',
              
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
         
$fichier preg_replace('/([^.a-z0-9]+)/i''-'$fichier);
         if(
move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier $fichier)) { //Si l'upload a fonctionn&#38;#38;#233;...
              
echo 'Upload effectu&#38;#38;#233; avec succ&#38;#38;#232;s !';
         }
         else { 
// Sinon
              
echo 'Echec de l\'upload !';
         }
    }
    else {
         echo 
$erreur;
    }
}

?>


Titre: Re: inserer une image dans la bdd
Posté par: asgpv-18 le 22 Juin 2009, 18:25:33
personne sais faire ???


Titre: Re: inserer une image dans la bdd
Posté par: oujanespace le 22 Juin 2009, 19:18:40
merci a toi  très claire ;)


Titre: Re: inserer une image dans la bdd
Posté par: Neiflheim le 22 Juin 2009, 20:30:28
personne sais faire ???

Pendant l'upload tu ne peux pas changer le nom, par contre une fois qu'il est dans ton dossier tu peux utiliser la fonction rename.
Pour éviter un doublon lors de l"upload, tu peux lui donner un numéro aléatoire a 40 chiffres :) que tu renommes par la suite en ce que tu veux.
(ou tu créé un dossier pour les fichiers temporaires)


Titre: Re: inserer une image dans la bdd
Posté par: asgpv-18 le 22 Juin 2009, 20:40:27
ok merci


Titre: Re: inserer une image dans la bdd
Posté par: fontaineff le 14 Septembre 2010, 00:55:46
Bonjour,

Je reprends ce vieux (2009) fil de discussion car l'objet est 100% ce que je recherche, càd, en gros, insérer des images dans une BD pour que ces photos apparaissent le cas écheans dans les pages dynamiques.
Si je refais le topo des messages précédents (car c'est un peu chinois pour le non pro que je suis):
Mike insiste pour que les photos ne soient pas stockées dans la BD elle-même, donc cela induit que je doit créer :
(1a) un formulaire qui doit permettre à un visiteur d'uploader sa photo (le visiteur choisi le chemin et le fichier sur son pc à uploader ) et (1b) un code enregistrera la photo sur le serveur (et pas dans la BD) avec un nom de fichier construit pour éviter les doublons,
(2) (avec MySQL) un champ 'référence photo' dans la BD stockera les noms des fichiers photos sur le serveur en lien avec les sujets auxquelles elles se rapportent;
(3) un code qui, lorsque le sujet de la photo sera visité par un visiteur, lira le nom du fichier dans la DB et extrairera la photo elle-même pour l'insérer dans la page dynamique.

Les messages précédants donnent des pistes pour la tâche (1b) et (3), ce dernier étant particulièrement difficile à comprendre (please mettez un max d'explications dans vos codes :'().

Pour le (2), je suppose que le champ peut être VARCHAR :-\

Je serais très reconnaissant à tout doué (des codes php), et passiant, s'il voudrait bien copier ici un exemple de code entier  pour (1a) et (3) avec un petit mot d'explication pour un max de lignes. ;)

François


Titre: Re: inserer une image dans la bdd
Posté par: MIkE le 16 Septembre 2010, 09:25:35
Bonjour,

Quelques liens utiles :
http://www.siteduzero.com/tutoriel-3-37674-upload-de-fichiers-par-formulaire.html
http://antoine-herault.developpez.com/tutoriels/php/upload/


Titre: Re: inserer une image dans la bdd
Posté par: fontaineff le 16 Septembre 2010, 13:18:08
je vais regarder cela.
Grand Merci Mike!


Titre: Re: inserer une image dans la bdd
Posté par: gogaule le 22 Septembre 2010, 18:35:48
Bonsoir à toutes et tous .

asgpv-18

Voici une partie de code touta fait fonctionnelle :
    _Cela permets de télécharger une image à l'aide d'un formulaire.
    _Choisir le fichier à télécharger.
    _Choisir un dossier de destination .(Dans un menu de  présélection.)
    _Enfin renommer le fichier pour éviter les doublons et l'écrasement .

Code:
<!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"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Test</title> 
</head> 
<body> 
<?php  
$poids_max 
512000// Poids max de l'image en octets (1Ko = 1024 octets)  
 
$repertoires = array(    // chemins à modifier 
    
'Images'        =>    '/images/'
    
'Gym'            =>   '//photos/'
    
'Locations'     =>    '//locations/' 
); 
 
$erreur false
$repertoire = !empty($_POST['repertoire']) && array_key_exists($_POST['repertoire'], $repertoires) ? $_POST['repertoire'] : 'Images'
 
$upload_errors =     array( 
    
// Erreurs liées à l'upload 
    
1    =>    'L\'image doit être inférieure à ' $poids_max/1024 'Ko.'
    
2    =>    'L\'image doit être inférieure à ' $poids_max/1024 'Ko.',  
    
3    =>    "Le fichier n'a été que partiellement téléchargé"
    
4    =>    'Vous devez sélectionner un fichier'
    
6    =>    'Un dossier temporaire est manquant.'
    
7    =>    "Échec de l'écriture du fichier sur le disque"
    
8    =>    "Une extension PHP a arrété l'envoi de fichier"
); 
if(
$_SERVER['REQUEST_METHOD'] == 'POST') { 
    if( empty(
$_FILES) ) { 
        
$erreur 'L\'image doit être inférieur à ' $poids_max/1024 'Ko.';  
    } elseif(
$_FILES['fichier']['error'] != 0) {  
        
$erreur $upload_errors[$_FILES['fichier']['error']]; 
    } elseif(
$_FILES['fichier']['size'] > $poids_max) {  
        
$erreur 'L\'image doit être inférieur à ' $poids_max/1024 'Ko.';  
    } elseif( !
$size getimagesize($_FILES['fichier']['tmp_name']) ) { 
        
$erreur 'Le fichier n\'est pas une image valide.';  
    } else { 
        
$mime_types = array( 
            
'image/gif'        =>    'gif',  
            
'image/jpeg'    =>    'jpg',  
            
'image/png'        =>    'png' 
        
); 
        if( !
array_key_exists$size['mime'], $mime_types) ) { 
            
$erreur 'Le fichier n\'est pas une image valide.'
        } 
    } 
    
// Si il y a une erreur on l'affiche sinon on peut télécharger  
    
if(!empty($erreur)) 
    {  
        echo 
'' $erreur '<br /><a href="javascript:history.back(1)">Retour</a>';  
    } else { 
        
$nom_fichier uniqid(image_jpg).'.'.$mime_types[$size[2]]; 
        
// On télécharge le fichier sur le serveur.  
        
if (move_uploaded_file($_FILES['fichier']['tmp_name'], $repertoires[$repertoire].$nom_fichier)) {  
            echo 
'<p>Votre image à été téléchargée sur le serveur avec succès !</p><p><img src="'.$repertoires[$repertoire].$nom_fichier.'" alt=""' .$size[3].' />';  
        } else { 
            echo 
'L\'image n\'a pas pu être téléchargée sur le serveur.','<br /><a href="javascript:history.back(1)">Retour</a>';  
        }  
    } 
} else {  
?>

<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" enctype="multipart/form-data">
    <p>
        <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $poids_max?>" />
        <label for="fichier">Image : </label>
        <input type="file" name="fichier" id="fichier" />
    </p>
    <p>
        <label for="repertoire">Destination : </label>
        <select name="repertoire" id="repertoire">
        <?php 
        
foreach($repertoires as $key=>$value) { 
            echo 
'<option value="'.$key.'">'.$key.'</option>'."\n"
        } 
        
?>

        </select>
    </p>
    <p>
        <input type="submit" value="Envoyer" />
    </p>
</form> 
<?php ?>
</body> 
</html>


Titre: Re: inserer une image dans la bdd
Posté par: fontaineff le 25 Septembre 2010, 11:06:00
Cool Gogaule, grand merci, je vais essayer cela!
François