Upload image

mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009 - 10 sept. 2005 à 11:58
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009 - 10 sept. 2005 à 15:27
bonjour,
j'ai créer un système d'upload pour des image stocker dans une base de donnée .
mon script fonctionne bien en local mais plus sur le net (je suis chez ovh)
quelqu'un aurait il une idée pour résoudre ce problème?

voici la partie de l'upload:

// Taille maximum
$MAX_FILE_SIZE = 30000;
// Tableau array des différents types
$allowed_types = array("image/gif", "image/pjpeg", "image/jpeg", "image/jpg");

// Variables récupérée par methode POST du formulaires
$fname = $_FILES['FileUpload']['name'];
$ftype = $_FILES['FileUpload']['type'];
$fsize = $_FILES['FileUpload']['size'];
$ftmp = $_FILES['FileUpload']['tmp_name'];

//répertoire temp
$repertoire = getcwd();
//si il y a un fichier uploader
if (is_uploaded_file($_FILES['FileUpload']['tmp_name']))
{


if( ($fsize <= $MAX_FILE_SIZE) && (in_array($ftype, $allowed_types)) )//debut pas erreur test image
{
copy($_FILES['FileUpload']['tmp_name'], $repertoire . "\" . $_FILES['FileUpload']['name']);

$fp=fopen($_FILES['FileUpload']['name'],"rb");
$buf =addslashes(fread($fp,filesize($_FILES['FileUpload']['name'])));
fclose($fp);
//insertion si image ok
$sql = "INSERT INTO annonces (id_annonces,dateajoute,theme,titre,photo,region,prix,descriptif,id_client,statut,region_admin)
VALUES ( '',NOW(),'$theme','$titre', '$buf', '$region_user', '$prix', '$descriptif','$idclient','$statut','$region_r') " ;

//exécution de la requête SQL:
$requete = mysql_query($sql) or die( mysql_error() ) ;

//efface le fichier car présent dans la base désormais
unlink($_FILES['FileUpload']['name']);

}

j'ai ce type d'erreur

Warning : fopen(poussette_sport.jpg): failed to open stream: No such file or directory in ...
Warning: filesize(): Stat failed for poussette_sport.jpg (errno =2 - No such file or directory)
Warning: fread(): supplied argument is not a valid stream resource in....

Warning: fclose(): supplied argument is not a valid stream resource in ....
Warning: unlink(poussette_sport.jpg): No such file or directory in ..

merci d'avance pour votre aide.

10 réponses

aurelien0306 Messages postés 181 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 2 mars 2009
10 sept. 2005 à 12:48
salut,

en fait tous les warnings découlent du premier puisqu'il ne peut pas ouvrir le fichier (non trouvé)

donc le chemin du fichier coince...

Tu copies ton fichier temporaire vers $repertoire . "\" . $_FILES['FileUpload']['name']

(en passant depuis la version 4.0.3 tu as le moyen de faire la même chose en utilisant move_uploaded_file())

donc je serais tenté de dire qu'il faudrait faire un fopen($repertoire . "\" . $_FILES['FileUpload']['name']) non? (même si $repertoire est le répertoire courant)



Ensuite sur les systèmes Linux, je ne suis pas sur que le chemin du
type mon\dossier\mon\fichier.image puisse être résolu alors que
mon/dossier/mon/fichier.image oui

(à vérifier) ... et sous Windows je pense que les chemins comme ceci "/" fonctionnent également...
0
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
10 sept. 2005 à 13:06
bonjour,
j'ai essayer ta solution mais j'ai toujours le même problème du fichier qui ne s'ouvre pas
j'ai cependant remplacer mon copy par move_upload_file plus actuel
c'est vraiment curieux qu'en local cela fonctionne parfaitement mais plus sur le net(rrrrrrrrr!!!!!!)
merci pour ton aide
0
aurelien0306 Messages postés 181 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 2 mars 2009
10 sept. 2005 à 13:16
et pour le \, tu as essayé de le remplacer par / ? essaie de reposter
ton bout de code avec la modif que tu as faites pour vérifier
0
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
10 sept. 2005 à 13:31
rebonjour,

ah çà fonctionne pour l'insertion d'image mais pas encore pour la modification

j'ai fait:
move_uploaded_file($_FILES['FileUpload']['tmp_name'], $repertoire . "//" . $_FILES['FileUpload']['name']);
$fichier=$repertoire . "//" . $_FILES['FileUpload']['name'];
$fp=fopen($fichier,"rb");
$buf =addslashes(fread($fp,filesize($_FILES['FileUpload']['name'])));
fclose($fp);

et çà à l'ai de fonctionner

merci
0

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

Posez votre question
aurelien0306 Messages postés 181 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 2 mars 2009
10 sept. 2005 à 13:33
par contre le doublement du slash n'est pas utile si? j'aurais juste mis "/" et non pas "//" ...
0
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
10 sept. 2005 à 13:41
salut,

j'ai mis des simple "/" et çà fonctionne aussi
mais j'ai une autre question .
je dois effectuer une modification et là cela ne fonctionne pas pourtant normalement si j'ai effectuer un changement d'image uploader (en utilisant la même méthode que ci-dessus)je dois écraser la valeur existant dans ma base?non

move_uploaded_file($_FILES['FileUpload']['tmp_name'], $repertoire . "/" . $_FILES['FileUpload']['name']);
$fichier=$repertoire . "/" . $_FILES['FileUpload']['name'];
$fp=fopen($fichier,"rb");
$buf =addslashes(fread($fp,filesize($_FILES['FileUpload']['name'])));
fclose($fp);
//insertion si image ok
$sql = "UPDATE annonces
SET
theme = '$theme',
titre = '$titre',
prix ='$prix',
photo = '$buf',
descriptif = '$descriptif',
valider_annonce = 0
WHERE id_annonces = ".$id ;

...
0
aurelien0306 Messages postés 181 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 2 mars 2009
10 sept. 2005 à 13:51
re :


qu'est ce qui ne fonctionne pas?


Je suis d'accord que si le fichier que tu postes existes déja dans ton
répertoire, il écrasera l'ancien fichier qui portait le même nom (cf move_uploaded_file())

mais après si c'est la modif dans la base de données...
0
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
10 sept. 2005 à 14:14
et bien en utilisant la même méthode de récupération d'un fichier uploader je devrais pouvoir récupérer une valeur (ici blob) qui vient écraser ma valeur( blob) présente dans ma table
or en local cela fonctionnait bien maintenant il conserve l'ancienne valeur (le fichier déja présent dans la base)
mon erreur est peut-être dans ma boucle de condition?
parce que je crois qu'il ne recupère pas de fichier et passe à ma requete qui modifie les autre champs sans le fichier
voici mon code simplifier:
//je récupère le fichier
$fname = $_FILES['FileUpload']['name'];
$ftype = $_FILES['FileUpload']['type'];
$fsize = $_FILES['FileUpload']['size'];
$ftmp = $_FILES['FileUpload']['tmp_name'];

//si le nouveau fichier existe
if (is_uploaded_file($_FILES['FileUpload']['tmp_name']))
{
move_uploaded_file($_FILES['FileUpload']['tmp_name'], $repertoire . "/" . $_FILES['FileUpload']['name']);
$fichier=$repertoire . "/" . $_FILES['FileUpload']['name'];
$fp=fopen($fichier,"rb");
$buf =addslashes(fread($fp,filesize($_FILES['FileUpload']['name'])));
fclose($fp);
//puis update
$sql = "UPDATE annonces
SET
theme = '$theme',
titre = '$titre',
prix ='$prix',
photo = '$buf',
descriptif = '$descriptif',
valider_annonce = 0
WHERE id_annonces = ".$id ;
$requete = mysql_query($sql) or die( mysql_error() ) ;

unlink($_FILES['FileUpload']['name']);

}else{//pas de fichier à modifier

$sql = "UPDATE annonces
SET
theme = '$theme',
titre = '$titre',
prix ='$prix',
descriptif = '$descriptif',
valider_annonce = 0
WHERE id_annonces = ".$id ;
$requete = mysql_query($sql) or die( mysql_error() ) ;
}

encore un tut grand merci pour ton aide
0
aurelien0306 Messages postés 181 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 2 mars 2009
10 sept. 2005 à 14:22
de rien ...

essaie de voir ça dans ton else pour savoir pourquoi il a pas été uploadé ton fichier (et donc qu'il passe dans ton else)

 switch($HTTP_POST_FILES['userfile']['error']){

    case 0: //no error; possible file attack!

      echo "There was a problem with your upload.";

      break;

    case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini

      echo "The file you are trying to upload is too big.";

      break;

    case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form

      echo "The file you are trying to upload is too big.";

      break;

    case 3: //uploaded file was only partially uploaded

      echo "The file you are trying upload was only partially uploaded.";

      break;

    case 4: //no file was uploaded

      echo "You must select an image for upload.";

      break;

    default: //a default error, just in case!  :)

      echo "There was a problem with your upload.";

      break;






(source : http://fr.php.net/manual/fr/function.is-uploaded-file.php#29635)
0
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
10 sept. 2005 à 15:27
salut,

j'ai trouver mon erreur il s'agissait du name du champ fichier qui n'était pas le même (trop bête).
à force de modification j'ai peut-être du le modifier pk je sais pas .bref cela fonction bien désormais insertion et modification.
Un grand merci pour ton aide et bonne fin de journée
0
Rejoignez-nous