Enregistrer dans mysql upload fichier

Signaler
Messages postés
10
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
10 décembre 2004
-
elnawak
Messages postés
27
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
21 février 2005
-
Bonjour et merci de me répondre,
j'essaye d'enregistrer un .doc (fichier word) dans un champ blob de mysql mais le problème est que je ne sais pas où est le fichier, le code qui suit ne copie pas dans le blob champ1.
Que faut-il faire ?
Merci de m'aider

$uploaddir = '/var/www/uploads/';

move_uploaded_file($_FILES[$doc]['tmp_name'], $uploaddir . $_FILES[$doc]['name']) ;

print_r($_FILES);

$lien = mysql_connect("","","") ;
mysql_select_db("") ;

$query = "insert into temp (champ1) values ('".$_FILES[$doc]['tmp_name']."')" ;

$result = mysql_query($query) ;

mysql_close($lien) ;

11 réponses

Messages postés
34
Date d'inscription
lundi 15 novembre 2004
Statut
Membre
Dernière intervention
27 octobre 2005

Tu peux enregistrer du texte dans une base SQL mais là t'es entrain de lui demander d'enregistrer l'adresse d'un fichier qui n'est même pas au bon format je pense.

Ce que tu peu faire, c'est soit lire le fichier doc que t'as enregistrer avec move_uploaded_file et enregistrer son contenu dans ton champs blob. Sinon tu peux juste enregistrer le chemin d'accès vers ton fichier move_uploaded_filé ( super verbe ) et après pour le relire juste l'appellé en lisant son adresse dans la table sql.
Messages postés
27
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
21 février 2005

salut jeiragne !

oui en effet HecToR_coCHON a raison la tu enregistre l'adresse du fichier et non son contenu (ce qui en soit est une bonne idée ca ne surchargera pas ta base pour rien ) mais le probleme c'est que le chemin que tu enregistre dans dans base n'est pas le bon .... tu enregistre "$_FILES[$doc]['tmp_name']" alors qu'il faut faut "$uploaddir . $_FILES[$doc]['name']" c'est la qu'est sotcké ton fichier sur le serveur (et c'est la que tu le trouveras ) sinon si la fonction move_uploaded_file te pose PB utilise copy . (ca marche parieil)

voila j'espere t'avoir aidé
@+
Messages postés
10
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
10 décembre 2004

Merci de t'interesser à mon pb et de m'avoir répondu.
Je dois ajouter que j'ai un peux progresser mais j'ai toujours une erreur, voici le dernier code :

$uploaddir = '/var/www/uploads/';

move_uploaded_file($_FILES[$doc]['tmp_name'], $uploaddir.$_FILES[$doc]['name']) ;

$handle = fopen($uploaddir.$_FILES[$doc]['name'], "rb");
$contents = '';
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);

$lien = mysql_connect("","","") ;
mysql_select_db("") ;
$query = "insert into temp (champ1) values ('".$contents."')" ;

Merci de voir le pb du dernier source, je précise que mon site est sur free.
Messages postés
27
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
21 février 2005

re salut !

la en effet y a un pb tu fais :

while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
en fait tu combine deux methodes je m'explique :
soit tu fais
$contents=fread($handle, filesize ($handle)); et non pas 8192 car fread lis un fichier du debut jusqu'a l'endroit specifie par le 2 param (en octect) autrement dis si tu veux tout le fichier filesize ("ton_fichier") .

sinon tu fait :

while (!feof($handle)) {
$contents .= fgets($handle, "nb_octet_arbitraire"); //ex 1024
}

mais pas les deux en meme temps , je sais on veut bien faire mais en prog moins y en a, moins y a d'erreurs ...

sinon le reste de ton code me parait correct mais n'hesite pas si tu as d'autre PB.

@+ et bon courage !
Messages postés
10
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
10 décembre 2004

re bonjour,

j'ai encore progresser mais il reste 2 erreurs qui se répètent avec la boucle while et voici les messages d'erreurs :

Warning: feof(): supplied argument is not a valid stream resource in ...
Warning: fgets(): supplied argument is not a valid stream resource in ...
---------------------------------- Source final ------------------------------
move_uploaded_file($_FILES[$doc]['tmp_name'], $_FILES[$doc]['name']) ;

$handle = fopen($_FILES[$doc]['name'], "r");
$contents = "";
while (!feof($handle)) {
$contents .= fgets($handle, 1024);
}
fclose($handle);

Merci de me répondre.
Messages postés
27
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
21 février 2005

on va essayer une autre methode beacoup plus simple !

$texte=file_get_contents($handle); //solution a privilegier
plus de boucle while, $texte contient tout ton fichier ! et en plus c'est plus rapide ! (mais je sais pas si ca marche avec tous les type de fichiers faut tester )
sinon si tu veux garder ta boucle while essaie de mettre "rb" (mode binaire ) dans fopen. et si vraiment rien ne marche utilise fread(),je pense que c'est mieux.

PS : je te conseille de faire un file_exits ($handle) (renvoie true ou false) avant toute chose histoire de voir si le fichier est la ou tu pense.on est jamais trop prudent !

en esperant que ca finira pas marcher comme tu le souhaite !

@+
Messages postés
10
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
10 décembre 2004

bonsoir,

j'ai testé l'existence du fichier et malheureusement, il n'existe pas.
Peut-être que chez free ce n'est pas possible de lire un fichier de puis un $_FILES ?
j'ai essayé avec $HTTP_POST_FILES, ça ne marche pas mieux
dans mon form il y a bien enctype ..., si je ne met pas enctype ... dans le form, je récupère un nom de fichier lisible d://mes documents ... mais ça ne marche pas mieux !!
j'ai essayé avec "rb" ou "r" c'est pareil !!

merci de réfléchir encore sur ce problème

:)
Messages postés
27
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
21 février 2005

essaie ca :

ton form doit etre : enctype="multipart/form-data"

$avatar_tmp=$_FILES["file"]["tmp_name"];
if ($avatar_tmp!=NULL){
copy($avatar_tmp,"avatar/". $file_name);
}

je pense que l'upload marche chez free, y pas de raison, mais le fichier que tu recoit dois etre enregistre on ne sait ou ....

aller ca va bien finir par marcher !

:big)
Messages postés
10
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
10 décembre 2004

:)
Messages postés
10
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
10 décembre 2004

Bonjour,

voici ce que je fais pour récupérer la variable document de type file enctype...

$document = $HTTP_POST_VARS["document"] ;

si je mes //$document = $HTTP_POST_VARS["document"] ;
c'est pareil ça ne marche pas, le fichier $avatar_tmp=$_FILES["file"]["tmp_name"] n'est pas trouvé !!

peut-être faut-il faire autre chose et je me trompe, je ne suis pas un expert du dernier php malheureusement lol
de plus j'appelle le même fichier .php qui teste l'existence de certaines variables pour savoir si elles ne sont pas vides mais ça passe à l'intérieur ça c'est bon !!

Merci de me répondre

:)
Messages postés
27
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
21 février 2005

bon attend on vas tous reposer a plat pour voir ou se situe le PB:

1)tu envoie ton form
2)tu recupere avec $avatar_tmp=$_FILES["file"]["tmp_name"];
3)tu fais un echo $avatar_tmp
4)file_exits($avatar_tmp)
5)copy($avatar_tmp,"avatar/". $file_name);

normalement ca devrai bugger avant la fin (enfin facon de parler ....)

y faut voir ou ! si tu recoi pas $_FILES["file"]["tmp_name"]; soit ton form est mal parametre (enctype="multipart/form-data" ou action )

si ca marche pas a file_exits() ca peut etre embetant (peut etre que free bloque ....) y a peu de chance quand meme

sinon c'est la methode de copy

voila dis moi ce qui passe pour que je situe bien le bug et apres on arrange ca !

@+