probleme upload de fichier

Eléphant du PHP | 319 Messages

20 oct. 2007, 10:11

hello,

je tente d'uploader un fichier dans un repertoire et d'y faire des tests.
le fichier est uploade mais des tests ne sont pas effectues durant la procedure.

j'ai cette erreur:

Code : Tout sélectionner

Notice: Use of undefined constant extension - assumed 'extension' in C:\Program Files\EasyPHP 2.0b1\www\lottery\admin\upload2.php on line 18
sachant que la ligne 18 est:
$extension = $extension[extension];
dans:
$uploaddir = "../gifts/"; 

$allowed_ext = "jpg, gif, png, pdf"; 


$max_size = "50000"; 
$max_height = "300"; 
$max_width = "300"; 

// Check Entension

$extension = pathinfo($_FILES['file']['name']);

//test si $extension renvoi un nom
//print "$extension";
$extension = $extension[extension];

$allowed_paths = explode(", ", $allowed_ext);

for($i = 0; $i < count($allowed_paths); $i++) 
	{
	if ($allowed_paths[$i] == "$extension") 
	{
	$ok = "1";
	}
	}

je me dis que mon tableau ne charge donc pas la liste des extensions correctement mais je ne vois pas trop comment les charger differement... (j'ai tente un
$extension = $extension['extension']; sans plus de succes...)

votre avis m'interesse :)
merci


ps: comment est ce que je peux changer le nom du fichier pour un nom aleatoire?? (genre en utilisant le timestamp). je pense que je vais planter mon scirpt encore plus si je mets cette fonction mais ca me semble utile... (merci!)

ViPHP
ViPHP | 4039 Messages

20 oct. 2007, 10:40

Salut, prêt ?

Alors, tout d'abord je te conseillerais de lire la doc au sujet des tableaux, de la récuperation des variables, et d'apprendre à lire les messages d'erreur, sinon tu risque de perdre beaucoup de temps.

L'erreur:
Notice: Use of undefined constant extension - assumed 'extension' in C:\Program Files\EasyPHP 2.0b1\www\lottery\admin\upload2.php on line 18
Hé bien, à la ligne 18, qu'a t'on ?
$extension = $extension[extension];
Oh, la vilaine erreur. Si un veut récupérer une valeur d'un tableau associatif, le NOM de la clé doit se mettre entre APOSTROPHES.
=> $extension["extension"]
Y'a pas a essayer avec ou sans, c'est comme ça, la programmation requiert un minimum de syntaxe.

En plus, tu essaye de charger la valeur de ce tableau dans une chaine qui porte le même nom.. c'est osé. Laisse-la donc ou elle est, elle y est bien, inutile de récuperer la valeur dans une chaine, laisse-la dans le tableau.

Après, tu veux vérifier si l'extension fait partie d'un tableau ?

He ben, quid de ceci:
if (in_array($extension["extension"],$allowed_ext)) {
 $ok=1;
}
Et voilà, la beauté du php toute résumée.

Et pour vérifier si les "$extension" est bien retourné, fait
print_r($extension)
juste avant de vérifier sa présence dans ton tableau, alors le contenu du tableau s'affichera entièrement dans ta page.

voilà :merci:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 319 Messages

20 oct. 2007, 11:54

hello berze,

j'ai mis des " " dans $extension = $extension["extension"];

ca me deplace l'erreur plus loin dans le script...

j'ai aussi tente les lignes de code que tu m'as donne mais pareil: message d'erreur.

Code : Tout sélectionner

Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:\Program Files\EasyPHP 2.0b1\www\lottery\admin\upload2.php on line 29 Array
j'ai fait un print de $_FILES plus haut
l'extension me semble fausse.

Print_r ($_FILES); renvoit

Code : Tout sélectionner

Array ( [file] => Array ( [name] => spark.gif [type] => image/gif [tmp_name]
(cela dit ta version du code semble bcp plus rapide en utilisant la fonction in_array() !! :) )

ViPHP
AB
ViPHP | 5818 Messages

20 oct. 2007, 16:50

Bonjour,
hello berze,

j'ai mis des " " dans $extension = $extension["extension"];

ca me deplace l'erreur plus loin dans le script...
L'erreur n'est pas déplacée. Elle est corrigée mais il existe une autre erreur plus loin dans le script.
La lecture du code PHP s'arrête à la première erreur rencontrée :wink:

Pour le contrôle de l'extension et l'upload de fichiers, il existe un bon tuto ici
http://www.phpfrance.com/tutoriaux/inde ... e-fichiers

Eléphant du PHP | 319 Messages

20 oct. 2007, 22:28

ca marche maintenant!

avec ce code je fais un upload et je cree un nom de fichier aleatoire pour le fichier uploade :)

Code : Tout sélectionner

<?php require('../includes/functions.tpl.php'); $uploaddir = "../gifts/"; $allowed_ext = "jpg, gif, jpeg, png"; $max_size = "50000"; $max_height = "300"; $max_width = "300"; $upload = ''; //get the file's extension $ext = pathinfo($_FILES['file']['name']); $extension = $ext['extension']; //insert the authorized extensions in an array $allowed_paths = explode(", ", $allowed_ext); //compare uploaded file with authorized extensions if (in_array($extension,$allowed_paths)) { //check the file's size in kb if($_FILES['file']['size'] > $max_size) { print "File size is too big!"; $upload = false; } //check the file's dimension WxH if ($max_width && $max_height) { list($width, $height, $type, $w) = getimagesize($_FILES['file']['tmp_name']); if($width > $max_width || $height > $max_height) { print "<br>File height and/or width are too big!"; $upload = false; } //upload the file! else { if(empty($upload) && is_uploaded_file($_FILES['file']['tmp_name'])) { $name = random_string(); $uploadname = "$name.$extension"; move_uploaded_file($_FILES['file']['tmp_name'],$uploaddir.'/'.$uploadname); print "Your file has been uploaded successfully! Yay!"; } else { print "<br>failed uploading the file"; } } } } else { print "Incorrect file extension!"; } ?>