2013-03-18 4 views
2

Je travaille sur un site Web de type réseau social pour les musiciens qui utilise une base de données MySql sur phpMyAdmin. J'ai un problème avec le site Web en insérant des fichiers image dans la base de données, puis en les affichant (pour les images de profil). Les images sont stockées en tant que LONGBLOB dans la base de données.Insérer un fichier image dans la base de données MySQL

Si j'ajoute une image directement via phpMyAdmin, cela fonctionne correctement. C'est un .jpg stocké comme .bin dans le type de données LONGBLOB en fonction de la base de données. Sur mon site je peux interroger et afficher parfaitement à l'aide:

<img src="data:image/jpeg;base64,<?php echo base64_encode($memberpicture);?>" 
ALT="Member does not have picture" WIDTH=100 HEIGHT=100></img> 

Cependant, si un utilisateur de site crée un profil et insère une image comme image de profil à l'aide de la fonctionnalité « créer un profil » du site, il ne s'affiche sur leur profil. Voici la sélection du code d'image:

... 
<div class="control-group"> 
    <div class="controls"> 
     <label>Band Picture</label> 
     <input type="file" name="picture"/> 
    </div> 
</div> 
... 

Et voici le code d'insertion:

<?php 
    session_start(); 
    foreach($_POST AS $key => $val) { 
    $_SESSION[$key]=$val; 
} 

mysql_connect("***", "***", "***"); 
mysql_select_db("musicians"); 

//...declare other values(name, bio, etc... 
$cpicture=$_POST['picture']; 
$cpicture = stripslashes($cpicture); 
$cpicture = mysql_real_escape_string($cpicture); 

$profileInsert="INSERT INTO profile(PROFILE_BANDNAME,PROFILE_GENRE,PROFILE_BANDBIO, 
    PROFILE_PICTURE,PROFILE_ART,PROFILE_MUSICVIDEO,PROFILE_PLAYLIST) 
    VALUES ('$cbandname','$cgenre','$cbio','$cpicture','$cart','$cvideo','$cplaylist')" 
or die(mysql_error()); 

Si je regarde la base de données, il y a un fichier il après l'insertion, mais il est extrêmement faible (environ 16 octets), et il ne peut pas être consulté sur le site ou directement à partir de la base de données. Il s'agit d'un .bin stocké en tant que .bin dans le type de données LONGBLOB en fonction de la base de données, par opposition à un .jpg stocké en tant que .bin. Toute aide concernant cet insert serait grandement appréciée!

+0

Pourquoi frodo pourquoi - utiliser le système de fichiers s'il vous plaît, ou pour la performance Mongodb + GridFS – user956584

+0

êtes-vous sûr que l'image se rend au serveur? vous pouvez faire quelque chose comme copy ($ cpicture, "somepath") et assurez-vous juste qu'il est là avant de commencer à essayer de publier la base de données. peut-être juste le montrer directement après l'avoir téléchargé pour s'assurer? –

Répondre

0

L'utilisation du système de fichiers serait probablement meilleure mais si vous insistez pour le faire à votre façon, comment cela fonctionne-t-il puisque votre code ne semble pas être dans un formulaire, il n'y a pas de bouton soumettre?

+0

Oui, je me rends compte qu'il serait probablement préférable de faire le système de fichiers, mais ce projet est attendu dans 4 jours pour une classe dans laquelle je suis, et j'ai envie de faire fonctionner le LONGBLOB. J'ai seulement posté les parties pertinentes du code, car mon script entier par page est très long, car il se passe beaucoup de choses. La méthode pour le premier extrait est "post" et le second extrait de code provient de la page vers laquelle il est publié. – user2177869

+0

Avez-vous enctype = "multipart/form-data" sur votre

? – H2ONOCK

+0

Non, j'ai juste , devrais-je le changer en ? – user2177869

0

Je pense que le problème est dans MySql Server Networking. Vérifiez la max_allowed_packet dans votre configuration :)

+0

La taille de fichier maximale autorisée est de 2 Go par fichier sur ma base de données, c'est ce que vous voulez dire? – user2177869

+0

Max longueur de paquet autorisé à envoyer/recevoir du serveur – curiosity

+0

Je ne suis pas sûr de savoir comment trouver ce chiffre, j'utilise hostgator pour héberger le domaine et le serveur si cela aide ... – user2177869

0

Je ne sais pas si cela fait une différence, mais votre code pour l'économie est différent de tous les premiers résultats quand je cherchai sur google:

http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/uploading-files-to-mysql-database.aspx http://mirificampress.com/permalink/saving_a_file_into_mysql http://bytes.com/topic/php/insights/740327-uploading-files-into-mysql-database-using-php

peut-être juste essayer un échange de code.

Je ferais écho aux autres commentaires/réponses ici concernant l'utilisation du système de fichiers. Mais si vous essayez simplement de le faire fonctionner comme vous l'avez mentionné dans certaines de vos réponses, il suffit de copier un code de travail d'un autre site.

Questions connexes