upload de fichier

Répondre
Bzh
le 23/07/2006 à 16:57
Bzh
<?php

//vérification du type de l'img, son poids et sa taille
if ( ( $type == "image/gif" || $type == "image/jpeg" ) && $size<=20500 && $width<=100 && $height<=100 )

?>


Voila !
moogli
le 23/07/2006 à 21:13
moogli
Beh, je suis déçu que tu conseil de ce baser simplement sur l'extension du fichier ( un fichieralanoix.php.gif peut etre génant ) :)

quand reste, sparh cherche un peu plus ce n'est pas difficile, il suffit de te demande ce qu'il faire ( je doit autoriser le type gif et le type jpeg ( impose les deux)
je doit autoriser le type gif ou le type jpeg => l'un ou l'autre :)

@+
Il en faut peu pour être heureux !!!!!
sparh
le 23/07/2006 à 23:06
sparh
Merci pour vos conseils, ca marche!
Bon j'essai donc d'introduire un elseif pour que les
fichiers .swf soit redirigés à la bonne place --> mais ca marches pas!!
<?php
if (isset($_FILES['fichier']))
{
//$_FILES existe
foreach ($_FILES['fichier']['name'] as $key => $value) {
$fichier=$value;//nom reel de l'image
$size=$_FILES['fichier']['size'][$key]; //poids de l'image en octets
$tmp=$_FILES['fichier']['tmp_name'][$key];//nom temporaire de l'image (sur le serveur)
$type=$_FILES['fichier']['type'][$key];//type de l'image
//On récupère la taille de l'image
list($width,$height)=getimagesize($tmp);
if (is_uploaded_file($tmp)) //permet de vérifier si le fichier a été uplodé via http
{
//vérification du type de l'img, son poids et sa taille
if ($type == "application/x-shockwave-flash" )
{
// type mime gif, poids < à 20500 octets soit environ 20Ko, largeur = hauteur = 100px
//Pour supprimer les espaces dans les noms de fichiers car celà entraîne une erreur lorsque vous voulez l'afficher
$fichier = preg_replace ("` `i","",$fichier);//ligne facultative :)
//On vérifie s'il existe une image qui a le même nom dans le répertoire
if (file_exists('../Jeux/'.$fichier))
{
//Le fichier existe on rajoute dans son nom le timestamp du moment pour le différencier de la première (comme cela on est sûr de ne pas avoir 2 images avec le même nom :) )
$nom_final= preg_replace("`.swf`is",date("U").".swf",$fichier);
}
else {
$nom_final=$fichier; //l'image n'existe pas on garde le même nom
}
//on déplace l'image dans le répertoire final
if (move_uploaded_file($tmp,'../Jeux/'.$nom_final)) {
//Message indiquant que tout s'est bien passé
//Pour le test on affiche l'image
echo 'Votre fichier à bien été télechargé.';
echo '<br/>';
}
else {
//l'image ne peut être déplacée, on supprime le fichier temporaire
@ unlink ($tmp);
echo 'L'image n'a pu être déplacée !';
}
}
elseif ( ( $type == "image/gif" || $type == "image/jpeg" ) && $size<=20500 && $width<=100 && $height<=100 )
{
// type mime gif, poids < à 20500 octets soit environ 20Ko, largeur = hauteur = 100px
//Pour supprimer les espaces dans les noms de fichiers car celà entraîne une erreur lorsque vous voulez l'afficher
$fichier = preg_replace ("` `i","",$fichier);//ligne facultative :)
//On vérifie s'il existe une image qui a le même nom dans le répertoire
if (file_exists('../Image/'.$fichier))
{
//Le fichier existe on rajoute dans son nom le timestamp du moment pour le différencier de la première (comme cela on est sûr de ne pas avoir 2 images avec le même nom :) )
$nom_final= preg_replace("`.jpg`is",date("U").".jpg",$fichier);
}
else {
$nom_final=$fichier; //l'image n'existe pas on garde le même nom
}
//on déplace l'image dans le répertoire final
if (move_uploaded_file($tmp,'../Image/'.$nom_final)) {
//Message indiquant que tout s'est bien passé
//Pour le test on affiche l'image
echo 'Votre fichier à bien été télechargé.';
echo '<br/>';
}
else {
//l'image ne peut être déplacée, on supprime le fichier temporaire
@ unlink ($tmp);
echo 'L'image n'a pu être déplacée !';
}

}
else {
//Le type mime, ou la taille ou le poids est incorrect
echo 'Votre image a été rejetée (poids, taille ou type incorrect)';
}
}
}
}
echo '<a href="javascript:history.back();">Retour</a>';
?>


PS moogli, qu'es que tu propose pour me protéger des .php.gif ou autre???
moogli
le 24/07/2006 à 01:54
moogli

PS moogli, qu'es que tu propose pour me protéger des .php.gif ou autre???

y a pas de solution miracle :) m'enfin le type mime et l'extension sont un bon compromis.

quand au reste utilise le wall, la tu faut le bordel sur le design et 4 km de code comme ça c'est chiant !
indente tn code que l'on puisse s'y retrouver.

tu aune erreur dans ton code : echo 'L'image n'a pu être déplacée !';

ça : //On récupère la taille de l'image
list($width,$height)=getimagesize($tmp);
tu le met seulement quand tu traite une image, cela n'a pas de sens pour un fichier autre !

à tu le bon type mime ?

a tu vérifier ce que retourne le formulaire ? ( var_dump($_FILES); ?

A priori ton script est fonctionnel !

smiley
Il en faut peu pour être heureux !!!!!
sparh
le 24/07/2006 à 16:32
sparh
Ca marche!
Un dernier truc mais pas des moindres!
Sur mon formulaire de départ il y a 3 champs upload (2 images facultatives et un fichier .swf obligatoire)
j'ai maintenan besoin de récupérer les 3 valeurs de
$nom_final (si 3 valeurs il y a?) pour les insérer
dans ma base de donnée?
Mon problème c que c une boucle, donc $nom_final change de valeure à chaque fois?
Voilà, si vous avez des idées?

Moogli:
l'erreur echo ou il manquait le c corrigé.

Je sais bien que récupérer la taille pour le swf c inutile mais je ne peut pas la récupérér à un autre moment à cause de la boucle (enfin je crois)???
sparh
le 24/07/2006 à 17:23
sparh
Bon j'ai un autre problème???
Ou placer ma requête pour que les données ne soient insérees que si les upload on fonctionnés??
Je met la page en wall avec 2-3 explications
Merci d'avance ;)
moogli
le 25/07/2006 à 13:42
moogli
salut,

comme il te faut requete ( je ne sais pas si mysql accept les requetes multiple comme ça, tu créée execute sous les echo 'votre fichier à été téléchargé';

si non il te faut mettre le nom du fichier dans un tableau, et pour pas te gourer utilise des index cohérent.
exemple
$tab['swf'] pour le flash et image1, image2 pour les image si elle existe.

pour la requete tu peut essayer de faire les trois insert en une seul fois mais il me semble que cela ne fonctionne pas :)

smiley
Il en faut peu pour être heureux !!!!!
Lefounard
le 25/07/2006 à 17:09
Lefounard
tu fais des fonctions :

sendFile(nomfichier) : elle envoit le fichier, et renvoit VRAI ou FAUX si ca reussit ou pas

deleteFile(nomfichier) : elle supprime un fichier sur le serveur.

Maintenant le petit algo


--Si fichier envoyé valide (taille respecté, extension,...)
----Si sendFile(nomfichier) reussi alors faire insertion
----Sinon deleteFile(nomfichier)
--Sinon afficher les erreurs (taille non respecté,...)


Le probleme c'est de mettre les testes des champs(type doc, taille, ...) avant sendFile(), comme ca , ca evite d'envoyer a chaque fois, supprimer, rebelotte, tant que le fichier envoyer sera pas valide.
Pour les requetes une suffit, sinon voir les transaction (tout ou rien).
Ciao,
I am singing in the rain , I am happy again !!
sparh
le 25/07/2006 à 20:46
sparh
Bon déja merci de vos réponses...mais c un peu compliqué pour moi!

Lefounard: si je comprends bien ta fonction envoi le fichier sur le serveur? Mais c déja fait!

Voilà ou j'en suis:
les upload marchent, la requête sql aussi
(sauf pour l'adresse des fichiers swf et gif)
Pour le fichier swf c facile, comme c le seul qui est obligatoire et qu'il ne peut en avoir qu'1, je met la requête qui permet d'insérer les données là (en changant $nom_final par $nom_jeux)
Comme ca, si il y un un fichier swf ok upload + enregistrement et sinon erreur.
Reste les 2 gif optionnels (si y en avait qu'1 une requête uptade aurait était ok!)
Donc j'suis là dessus et pour commencer je bloque sur comment placer la requête d'insertion.

voilà la requête:
@mysql_connect($serveur, $login, $password)or die ("impossible de se connecter"); 
mysql_select_db($base)or die ("impossible de se connecter a la base");

$enregistrement = "INSERT INTO `Jeux` (`jeux`, `image1`, `image2`, `texte`, `categorie1`, `categorie2`, `vote`, `date`, `adresse`, `pseudo`) VALUES ('$nom', 'im2', 'im1', '$texte', '$cat1', '$cat2', '', '$date', 'jeux/$nom_jeux', 'pseudo')";

mysql_query($enregistrement);
mysql_close();
echo 'Votre jeux $nom est maintenant disponible sur Sparh Prods';

Et voilà là ou (je crois) il faut la placer.
<?php 
//(...) recupération des données du post, début de la boucle(...)
if (move_uploaded_file($tmp,'../Jeux/jeux/'.$nom_final))
// c la qu il faut mettre la requete, dans la //condition
{
//Message indiquant que tout s'est bien passé
echo 'Votre fichier a bien été télechargé';
echo '<br/>';
}
else {
//l'image ne peut être déplacée, on supprime le fichier temporaire
@ unlink ($tmp);
echo 'Votre jeux n'a pu être déplacée !';
}
?>


voilà, merci d'avance pour la requête et dites moi si je pars en vrille ou précisez vos idées
++
sparh
le 27/07/2006 à 17:42
sparh
Bon si y'avait qqun pour m'aider ce serait cool car je touche presque le but mais j'y suis pas encore!
Donc pour faire plus simple j'ai décidé d'uploder qu'un swf et un gif.
Pas de problème les 2 sont uploadés avec succès et il n'est possible d'uploader que ce type de fichier.

J'ai réussis à placer la 1ère requête d'insertion (non sans mal) mais il reste la requête UPDATE pour le l'adresse du fichier gif.

J'ai fait la requête, elle marche quand je la teste sur une page vide, mais incorporée dans mon script elle marche plus!

Voilà, il y a un autre petit détail au sujet de la variable $nom qui a été perdue et que j'utilise pour localiser la ligne dans ma requête UPTDATE.

Merci d'avance
Le script
Répondre
LoadingChargement en cours