Insertion d'images sur MySQL [Résolu]

Signaler
Messages postés
40
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 avril 2010
-
Messages postés
3
Date d'inscription
mercredi 21 avril 2010
Statut
Membre
Dernière intervention
22 avril 2010
-
Salut à toutes et à tous !

Je souhaiterais savoir comment faire pour mettre une image dans une base de donnée MySQL via un code PHP. Etant débutant en PHP, je ne connais pas toutes les fonctions et malgré avoir trouvé des codes pouvant m'aider.
Le problème est que j'ai trouvé un code sur internet me permettant de faire l'opération que je souhaite. Mais en éxécutant le code je vois s'afficher une erreur concernant les fonctions " fread " et " fopen " ( fonctions inconnues me dit-elle ), malgré le bon fonctionnement du code en général car en effet je vois bien que la base de donnée a bien enregistré l'id correspondant à ma tentative.
Alors je voudrais savoir si je suis obligé d'utiliser fread et fopen dans mon code pour permettre l'envoi de l'image dans ma base de donnée ?
Voici la partie du code qui me pose problème :
<?php
mysql_connect ....
$données=addslashes(fread(fopen($image, "r"),filesize($image)));
$result=mysql_query("INSERT INTO ....

J'ai testé ce code en interne sur mon ordinateur en chargeant une image par le biais d'un input type ="file". Est-ce possible que ça ne fonctionne pas comme cela ?

Merci d'avance de bien vouloir éclairer ma lanterne !!

13 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
salut

tu peux utiliser file_get_contents, ca sera plus lisible.

sinon, n'oublie pas d'enregistre dans un type GLOB ou chose du genre.

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
c'est surement une question de header....

header('Content-type: image/jpeg');

sinon, valide la reponse stp

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
40
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 avril 2010

Bon j'ai toujours un problème lors de l'affichage. Soit j'ai toujours le code binaire de l'image qui s'affiche soit j'ai un écran blanc.
J'ai bien vérifier dans ma base de donnée si le ficher était bien là. Et il l'est car je voit bien la taille exacte de la photo dans ma base.
Mais je voulais savoir si d'une par mon code était bon pour l'insertion de la photo dans ma base ( je pense que oui car le transfert à bien lieu ).
Et surtout si lors du transfert, il prend aussi le type de fichier ( soit jpeg ).

Voci le code pour l'envoi de la photo vers la base donnée :

$donnees = file_get_contents($_FILES['photo']['tmp_name']);
 $query = "INSERT INTO image (donnee_binaire) VALUES ('".addslashes($donnees)."')";
    $result = mysql_query($query) or die("
Enregistrement en BDD impossible !!

".$query."
");
    $id = mysql_insert_id();
    print "
Indentifiant du fichier dans la base: $id
";
    mysql_close();
  
  if(!$result)
   echo"Enregistrement absent

";
  else
   echo"Enregistrement en base effectu&eacute; :)

";

J'ai lu aussi qu'il fallait faire un fichier php pour l'upload de l'image et un autre fichier html pour l'afficher, est-ce vraiment nécessaire ? Ou est-il possible de lfaire sue une seule et même page en php.

Pour l'affichage, j'ai essayer sur une seule page le lecture de la base avec " SELECT*FROM ..... et tenter de l'afficher avec un " echo"img src="".$(result) etc.... Sans le header il m'affiche le code binaire avec c'est la page blanche.

Je pense qu'il y a un problème que je ne dois pas la voir au vu des mes connaissances en php, je dois surement faire une erreur quelque part.
Messages postés
40
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 avril 2010

Bonjour !

Je te remercie pour ta réponse coucou 747 ! J'ai eu beau chercher sur internet je n'avais pas trouvé cette fonction ^^ En effet ça va être plus lisible !!
Je ne la connaît pas non plus mais j'en déduit qu'il fut que je réécrive la ligne avec les fred etc ... Je vais faire des essais avec pour trouver son fonctionnement je suis ravi :)
Sinon pour l'enregistrement je le fait dans un type LONGBLOB.
Tiens une autre question du coup me vient ! Je suppose que je dois garder les champs dans ma base donnée de taille et de type du fichier ? Je m'éloigne je suis proche ?
Je vais quand même chercher !! Ce qui est bien avec le PHP c'est que ça fonctionne avec la logique tout s'explique du moment qu'on a les bon outils :)

A bientôt et merci encore :)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
longlob est un bon choix si tes fichiers sont gros

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
40
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 avril 2010

Merci beaucoup pour tes conseils ! L'envoi des données dans ma base de donnée marche bien ! J'ai pas réussi du premier coup car il me manquait des codes. Mais j'ai cherché comment bien utiliser cette fonction dans des bouquin et sur le net !!
Maintenant je travaille sur l'affichage de la photo à partir d'une autre page web. Pour l'instant je n'ai le droit qu'au cryptage de la photo pas l'image. Mais j'y travaille et je trouverais !

Encore merci et à bientôt !
Messages postés
40
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 avril 2010

Voilà juste pour dire que j'ai trouvé l'erreur !!!! L'insertion est bonne !! J'avait juste mal place mon header !! Tout marche à la perfection !!

Conclusion !! Copier coller un code déjà pondu ça ne ser à rien car la plupart du temps ça ne marche pas ! Le mieux c'est de voir comment il fonctionne apprendre les fonctions qu'on ne connaît et faire son propre code !! Comme on aprrend on comprend et on avance dans le monde php :) !!

PS : YOUPI  ! Je suis content d'avoir trouvé tout seul enfin presque !!! Les pistes ou grands chemins de coucou 747 m'ont beaucoup aider. Je te remercie de ne pas m'en avoir trop dit non plus sinon je n'aurais pas compris ce que je faisais !!
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
:) de rien

essaie juste de coller coucou a 747 stp, mon pseudo c'est coucou747, j'ai pas pour nom 747 et prenom coucou...

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
3
Date d'inscription
mercredi 21 avril 2010
Statut
Membre
Dernière intervention
22 avril 2010

salut Euskalor,j'ai fait le même code que vous et n'as pas marché,il a un problème au niveau de la fonction "file_get_contents" et à ce que j'ai compris il ne recoit pas l'image,pouvez vous m'aidez,c'est trés urgent pour mon projet de fin d'étude.j'attend merci
Messages postés
40
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 avril 2010

Salut !!
Un extrait de ton code concerné me serait utile pour pouvoir apporter une réponse.
Sinon, sache que l'envoi d'un fichier photo dans une BDD n'est pas vraiment la meilleure des solutions. D'ailleurs je n'utilise plus tout à fait ce script.
La meilleure méthode à mon sens est de télécharger le fichier photo dans un répertoire de ton serveur et de copier son chemin d'accès dans la BDD !

Bon courage !
Messages postés
3
Date d'inscription
mercredi 21 avril 2010
Statut
Membre
Dernière intervention
22 avril 2010

merci beaucoup pour votre réponse,mais tout va bien,j'ai trouvé la solution en ce qui concerne l'upload de l'image.mais j'ai une autre question si ca vous dérange pas,dans mon projet j'ai un tableau qui contient des données des étudiants,chaque ligne correspond à un étudiant et qui contient une case à cocher,lorsque je coche d'une ligne j'insère les données dans une autre table,mon problème c'est que la requete ne permet que la l'insertion des données de la dernière ligne malgrès que je l'ai pas coché.sachant que toutes les autres requetes fonctionnent avec mon code,seulement insert into.
Voici mon code:(delete est mon checkbox)
<?
$id=$_POST['id'];
if(!isset($id)){
die("id erronné");
}
$nom=$_POST['nom'];
if(!isset($nom)){
die("nom erronné");
}
$prenom=$_POST['prenom'];
if(!isset($prenom)){
die("prenom erronné");
}
$naissance=$_POST['naissance'];
if(!isset($naissance)){
die("date erronné");
}
$adresse=$_POST['adresse'];
if(!isset($adresse)){
die("adresse erronné");
}


$delete=$_POST["delete"];
if(!isset($delete)){
die("tab erronné");
}




if (sizeof($delete)==0){
header('Location:pageformulaire.php');
exit;}
else{

// on se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');

// on sélectionne la base
mysql_select_db('nessrine',$db);
foreach($delete as $valeur){

$ins="INSERT INTO test(nom,prenom,naissance,adresse,valeur,id,etat) VALUES($nom,$prenom,$naissance,$adresse,$valeur,$id,'valide')";

$req1= mysql_query($ins);



}
mysql_close();

exit;
}
?>


Merci pour votre aide,à bientot :)
Messages postés
40
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 avril 2010

Je pense que ton soucis dans ton formulaire. Peux-tu le mettre ?
Messages postés
3
Date d'inscription
mercredi 21 avril 2010
Statut
Membre
Dernière intervention
22 avril 2010

voici mon formulaire:(la code dont je te l'ai envoyé dans le message précedent est de la page fenetre2.php)
<form name="formulaire" method="POST" action="fenetre.php">

<?php

// on se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');

// on sélectionne la base
mysql_select_db('nessrine',$db);
if($_POST['ok'])
{
$naissance=$_POST['naissance'];
if(!isset($naissance)){
die("année erronné");
}


$sql = "SELECT id,nom,prenom,naissance,adresse,num FROM affilié WHERE '".$naissance."'-(SELECT EXTRACT(YEAR FROM naissance))='20' AND etat='invalide'";

$result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);
// si on a récupéré un résultat on l'affiche.

if($total) {

echo '';

echo '----
';
echo'<center>Identifiant</center>, ';
echo'<center>Nom</center>, ';
echo'<center>Prénom</center>, ';
echo'<center>Date Naissance</center>, ';
echo'<center>Adresse</center>, ';

echo'<center>Action</center>, ';
echo', ';
echo '';

while($row = mysql_fetch_array($result)) {
echo '----
';
echo '<center></center>, ';
echo '<center></center>, ';
echo '<center></center>, ';
echo '<center></center>, ';
echo '<center></center>, ';

echo\" Modifier , \";
echo '<center>'.$row["num"].' </center>, ';
echo'';

}

echo '
';
echo'';
echo '----
';
echo '
';
echo ' ';
echo'';
echo'';
echo'
';


}
else echo'Pas d\'enregistrements dans cette table...';



// on libère le résultat
mysql_free_result($result);
}
?>

</form>