Insertion d'images sur MySQL

Résolu
Euskalor Messages postés 40 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 avril 2010 - 6 mars 2008 à 17:50
linkinnissou Messages postés 3 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 22 avril 2010 - 22 avril 2010 à 21:05
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

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
7 mars 2008 à 00:04
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
*/
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 mars 2008 à 03:14
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
*/
3
Euskalor Messages postés 40 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 avril 2010
9 mars 2008 à 18:16
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.
3
Euskalor Messages postés 40 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 avril 2010
7 mars 2008 à 11:39
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 :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
7 mars 2008 à 14:05
longlob est un bon choix si tes fichiers sont gros

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
0
Euskalor Messages postés 40 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 avril 2010
8 mars 2008 à 03:06
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 !
0
Euskalor Messages postés 40 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 avril 2010
9 mars 2008 à 18:40
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 !!
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
26 mars 2008 à 18:30
:) 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
*/
0
linkinnissou Messages postés 3 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 22 avril 2010
21 avril 2010 à 14:24
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
0
Euskalor Messages postés 40 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 avril 2010
21 avril 2010 à 21:34
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 !
0
linkinnissou Messages postés 3 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 22 avril 2010
22 avril 2010 à 17:12
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 :)
0
Euskalor Messages postés 40 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 avril 2010
22 avril 2010 à 19:11
Je pense que ton soucis dans ton formulaire. Peux-tu le mettre ?
0
linkinnissou Messages postés 3 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 22 avril 2010
22 avril 2010 à 21:05
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>
0
Rejoignez-nous