[JSScript] Vérif extension des pls fichiers

Statut
N'est pas ouverte pour d'autres réponses.

alan

Elite
le code sans boucle fonctionne nikel,
mais avec la boucle, ca ne fait rien
Code:
  echo "\n".'<script language="JavaScript">
    function checkFile(i) {//origin de Guslinux
for (j=1;j<=i;j++){
		var file = userfile + j;
		var fileName = document.form1.file.value;
		var ext = fileName.split('.')[fileName.split('.').length-1].toLowerCase();
			
		switch(ext){
			
case "jpg" : break;
case "jpeg" : break;
case "gif" : break;
case "png" : break;
			default : message = "- Le fichier " + j + " est un fichier invalide\n\n";
		}
    
    	if (message.length > 0) {
    		window.alert(message += "Veuillez vérifier les données entrées.");
			return false;
		}

}
    }
</script>
<form method="POST" ENCTYPE="multipart/form-data" action="'.$_SERVER['PHP_SELF'].'" name="form1" onSubmit="JavaScript:checkFile('.$_POST['nb_img'].');return false;">
  <input type="hidden" name="post" value="TRUE">';
  for ($i=1;$i<=$_POST['nb_img'];$i++)
  echo "\n".'<input type="file" name="userfile'.$i.'"> <font size="-2">(fichier '.$i.')</font><br>';
  echo "\n".'<input type="hidden" name="nb_img" value="'.$_POST['nb_img'].'">
  <input type="submit" value="Ajouter">
  </form>'."\n";
niveau syntaxe ca a m'a l'air bon ....
le problème est dans la boucle mais pas dans la vérification ;)
 

Smart

Touriste
Je ne comprend pas comment il peut vérifier ta variable $_POST à partir du moment ou, si le formulaire n'a pas été envoyé, le tableau superglobal n'a pas été crée et ne contient donc pas $_POST(nb_images).

Pour vérifier les valeurs d'un formulaire, tu dois lui donner un nom et y accéder par document.nomduformulaire.variable.value

Ta boucle for est donc théoriquement foireuse, et si ton environnement php est bien configuré en ERROR_REPORTING ALL (toujours travailler comme ca) tu devrais avoir un message d'erreur.

edit : j'ai remarqué une petite erreur de script en allant sur ton site pour les pme. C'est pas grave du tout mais c'est une petite subtilité : Je vois que tu évalues le temps de création de ta page, surement à l'aide de float microtime().
En effectuant la différence de deux nombres, tu dois t'assurer que le résultat est supérieur au nombre minimal de ton type de variable (sinon il le met en notation scientifique x.xxxx e-xx, donc 0.00008 devient 8.0000 e-5 qqchose du genre).
J'ai vu que la page avait été générée en 8 secondes, ce qui est surement faux.
if($difference < 0.0001)
$difference = '0.0000';

voila ^^

(c) Copyright 2004. Toute reproduction de ce site (partielle ou intégrale) est strictement interdite.
Conditions d'utilisation. Page générée en 9.799 secondes
edit2: faut quand meme pas un pro en info, donc prend ce que je dis avec des pincettes ^^, et sinon, si t'as un bouquin java (j'en ai pas :/), tu peux me dire si il y a moyen, en javascript, d'intervenir sur l'url de la fenetre ?
J'aimerais réécrire l'adresse de certaines pages (pour supprimer la paire session=????????????????????????? dans la barre d'adresse quand les visiteurs n'acceptent pas les cookies).
Mais tout ce que j'ai trouvé en inventant des noms javascripts c'est document.location.href qui ne se contente pas de changer l'adresse de la barre d'adresse mais qui charge carrément la nouvelle page...
 
1er
OP
alan

alan

Elite
alors pour ma variable $_POST, si elle existe ... elle vient de la page précédente ...

sinon yep lol pour le site pme ... mais c un projet comme ca que j'avais mais tt seul c'est chaud ... j'avais vu sinon pour le probleme d'execution ;) t'inkiete ...

et pour ton problème humm ... :-s
ptet en php avec un header('location: url'); mais pas teste et pense pas ..

sinon en javascript je c pas ...
crée ton thread ... t'auras plus de chances de réponses ;)
 

Smart

Touriste
Pardonne moi si je dis des conneries mais :

onSubmit="JavaScript:checkFile('.$_POST['nb_img'].');return false;

Ca veut dire que quand on appuie sur le bouton submit, le code se lance ? Et on appuie sur le bouton submit quand quand on veut envoyer les données, donc quand elles ne sont pas envoyées ?

Si ton code javascript, que tu implémentes dans le formulaire, teste les variables $_POST, franchement je vois pas l'intéret de le faire en javascript, il suffit de tester $_FILE[variable]['type'].

Le javascript, si il est activé sur le navigateur de l'internaute, permet ce genre de vérification coté client pour économiser de la bande passante (et donc empeche d'appuyer sur le bouton submit si la vérification coté client échoue, et de toute facon tu devras vérifier $_FILE coté server car il y a toujours moyen de percer le javascript).

Pour terminer, tu dis "si elle existe elle vient de la page précédente". Mais c'est pas bien de coder comme ca, tu dois vérifier isset($_POST), c'est plus propre et au moins on peut comprendre plus aisément la structure de ton code.
 
1er
OP
alan

alan

Elite
bon écoute smart je sais qd mem cibler mon probleme....

et pour ton info
je fais un test avant pour la BP et un test apres
un pdt la création de la miniature
un pdt l'affichage de l'image (non miniature)

alors si c'est pas sécure assez excuse moi mais ca me suffit

en plus le jscript ca peut etre utile si qqn choisi un fichier mais que la personne s'est trompée ... et mis un fichier doc pdf zip ou ke sais-je encore ...


Bref j'ai un probleme dans ma boucle elle meme
Code:
<script language="JavaScript">
    function checkFile(i) {

for (j=1;j<=i;j++){
		var file = userfile + j;
		var fileName = document.form1.file.value;
		var ext = fileName.split()[fileName.split().length-1].toLowerCase();
			
		switch(ext){
			
case "jpg" : break;
case "jpeg" : break;
case "gif" : break;
case "png" : break;
			default : message = "- Le fichier " + j + " est un fichier invalide\n\n";
		}
    
    	if (message.length > 0) {
    		window.alert(message += "Veuillez vérifier les données entrées.");
			return false;
		}

}
    }
</script>
<form method="POST" ENCTYPE="multipart/form-data" action="/gamerz.be/image.php" name="form1" onSubmit="JavaScript:checkFile(3);return false;">
  <input type="hidden" name="post" value="TRUE">
<input type="file" name="userfile1"> <font size="-2">(fichier 1)</font><br>
<input type="file" name="userfile2"> <font size="-2">(fichier 2)</font><br>

<input type="file" name="userfile3"> <font size="-2">(fichier 3)</font><br>
<input type="hidden" name="nb_img" value="3">
  <input type="submit" value="Ajouter">
  </form>
 

guslinux

Gamerz'ien
Smart a dit:
Pardonne moi si je dis des conneries mais :

onSubmit="JavaScript:checkFile('.$_POST['nb_img'].');return false;

Ca veut dire que quand on appuie sur le bouton submit, le code se lance ? Et on appuie sur le bouton submit quand quand on veut envoyer les données, donc quand elles ne sont pas envoyées ?

Si ton code javascript, que tu implémentes dans le formulaire, teste les variables $_POST, franchement je vois pas l'intéret de le faire en javascript, il suffit de tester $_FILE[variable]['type'].

Le javascript, si il est activé sur le navigateur de l'internaute, permet ce genre de vérification coté client pour économiser de la bande passante (et donc empeche d'appuyer sur le bouton submit si la vérification coté client échoue, et de toute facon tu devras vérifier $_FILE coté server car il y a toujours moyen de percer le javascript).

Pour terminer, tu dis "si elle existe elle vient de la page précédente". Mais c'est pas bien de coder comme ca, tu dois vérifier isset($_POST), c'est plus propre et au moins on peut comprendre plus aisément la structure de ton code.
Perso je vois completement l'intéret de ce script JS ... vu que à la base c le mien :D.

Je m'explique, je prends le cas d'une personne quelquonque, qui sait juste comment on fait pour écouter des mp3, prendre les photos sur son appareil numérique top gamme etc 6Mp et naviguer (péniblement je le reconnais) dans les répertoires pou ... au bout de 20minutes se planter en cliquer sur l'anim avi juste à coté de son image de superbe couché de soleil à miami ... disons que l'image fait 8Mo (la limité étant à 8Mo) ... le mec envoies, ca charge (rien ne se passe à l'écran mais ca charge), il en a marre (128kbps c pas si rapide quand meme, surtout avec kazaa sur la ligne !) donc, il va se chercher un p'tit café histoire d'attendre le temps qu'il reste ...

30 minutes apres il revient et, horreur ! c pas un fichier valide, mais notre homme est pourtant sur, meme certain d'avoir envoyé un fichier valide jpg ou jpeg comme il était marqué. Il dit merde et il ferme tout, tempis pour son couché de Soleil.

Cas numéro 2, avec mon script JS : le mec a réussi à mettre son image (il c tjs planté il a mis la vidéo), il envoie et là un p'tit popup vient, "Veuillez vérifier le fichier à envoyer, il n'est pas grerer par le systeme. Fichier : tutu.avi" Vite fait le mec clique sur parcourir, il reprend la bonne image ... et c parti !

JavaScript = "Live"
PHP = need upload !

=> Différence flagrante de vitesse ...

ps : ce truc était prévu pour l'upload de gros fichiers !, mais pour les petits c le meme probleme ... perte de temps, de bande passante etc ...
 

null

ose();
Oui mais après la validation JS et l'upload, le script PHP re-vérifie ?
 

La Poubelle

Pou'r allé Danché
null a dit:
Oui mais après la validation JS et l'upload, le script PHP re-vérifie ?
Obligatoire, sinon un petit malin passera au dessus . Par exemple, en créant un jeu de Frame qui annule le script et délimite la taille des fichiers et des extentions ... ce n'est que théorique, jamais je n'aurais eu l'idée de faire une chose pareil :xmas:
 

Smart

Touriste
Je sais encore à quoi sert javascript merci,

Smart a dit:
Le javascript, si il est activé sur le navigateur de l'internaute, permet ce genre de vérification coté client pour économiser de la bande passante (et donc empeche d'appuyer sur le bouton submit si la vérification coté client échoue, et de toute facon tu devras vérifier $_FILE coté server car il y a toujours moyen de percer le javascript).
je disais juste que le java ne devrait pas vérifier les $_POST stou, c'est contraire au "live" comme tu dis. Je ne parlais pas du script java en lui meme, mais bien de son formulaire avec utilisation de la fct java.

Il me semble que j'écris bien en francais, et que ce que je dis est structuré.

Le script de guslinux vérifie une à une les valeurs des input de type FILE (et donc pas $_POST) lorsqu'ils possèdent des noms de la sorte : userfile(numéro).

Dans ton premier script j'ai attiré ton attention sur le fait que la fonction javascript ne peut pas accepter de variable de type $_POST, ce qui me semble logique, sinon autant vérifier les variables $_FILE après réception et autant ne pas le faire en javascript.

On passe en paramètre le nombre d'input files qu'il y a dans le formulaire donc l'input de type hidden ne sert à rien.

ps : guslinux, tu pourrais meme améliorer en n'affichant pas "j" mais la variable filename que tu as créée.
 

guslinux

Gamerz'ien
Smart a dit:
Je sais encore à quoi sert javascript merci,

Smart a dit:
Le javascript, si il est activé sur le navigateur de l'internaute, permet ce genre de vérification coté client pour économiser de la bande passante (et donc empeche d'appuyer sur le bouton submit si la vérification coté client échoue, et de toute facon tu devras vérifier $_FILE coté server car il y a toujours moyen de percer le javascript).
je disais juste que le java ne devrait pas vérifier les $_POST stou, c'est contraire au "live" comme tu dis. Je ne parlais pas du script java en lui meme, mais bien de son formulaire avec utilisation de la fct java.

Il me semble que j'écris bien en francais, et que ce que je dis est structuré.

Le script de guslinux vérifie une à une les valeurs des input de type FILE (et donc pas $_POST) lorsqu'ils possèdent des noms de la sorte : userfile(numéro).

Dans ton premier script j'ai attiré ton attention sur le fait que la fonction javascript ne peut pas accepter de variable de type $_POST, ce qui me semble logique, sinon autant vérifier les variables $_FILE après réception et autant ne pas le faire en javascript.

On passe en paramètre le nombre d'input files qu'il y a dans le formulaire donc l'input de type hidden ne sert à rien.

ps : guslinux, tu pourrais meme améliorer en n'affichant pas "j" mais la variable filename que tu as créée.
mon scipt ne permet de tester un seul fichier à la base.

Mais la variable $_POST passée en argument au onLoad et une bariable passé par le formulaire précédent. Il aurait tres pu etre défini dans le code source, et non passé comme argument à la fonction...
 

guslinux

Gamerz'ien
Code:
<script language="JavaScript">
function checkFile() {
	var UserFiles = document.form1.UserFiles;
	var message = "";
	for (j=0;j<UserFiles.length;j++){
        if(checkExt(UserFiles[j].value)==false){
			id = j+1;
			message += "- Le fichier " + id + " est un fichier invalide\n";
		}
	}        
	
	if (message.length > 0) {
		window.alert(message + "\nVeuillez vérifier les données entrées.");
		return false;
	}
	else {
		alert("Ok");
	}
}
	
function checkExt(file){
	var fileName = file;
	if(fileName.length>1){
		var ext = fileName.split('.')[fileName.split('.').length-1].toLowerCase();	
		switch(ext){
			case "jpg" 	: return true;
			case "jpeg" : return true;
			case "gif" 	: return true;
			case "png" 	: return true;
			default 	: return false;
		}
	}
	else
		return false;
}
</script>
<form method="POST" ENCTYPE="multipart/form-data" action="/gamerz.be/image.php" name="form1" onSubmit="JavaScript:checkFile();return false;">
  <input type="hidden" name="post" value="TRUE">
<input type="file" id="UserFiles" name="UserFiles[0]"> <font size="-2">(fichier 1)</font><br>
<input type="file" id="UserFiles" name="UserFiles[1]"> <font size="-2">(fichier 2)</font><br>
<input type="file" id="UserFiles" name="UserFiles[2]"> <font size="-2">(fichier 3)</font><br>
<input type="file" id="UserFiles" name="UserFiles[3]"> <font size="-2">(fichier 4)</font><br>
<input type="file" id="UserFiles" name="UserFiles[4]"> <font size="-2">(fichier 5)</font><br>
  <input type="submit" value="Ajouter">
  </form>
Ce code ci fonctionne nikel ... pour récuperer les fichiers en php, il suffit de faire :
Code:
for($i=0;$i<count($UserFiles);$i++){
...
}
 
1er
OP
alan

alan

Elite
nikel gus ... merci ;)
keske je ferai ss toi!!!
 
1er
OP
alan

alan

Elite
Smart a dit:
edit : j'ai remarqué une petite erreur de script en allant sur ton site pour les pme. C'est pas grave du tout mais c'est une petite subtilité : Je vois que tu évalues le temps de création de ta page, surement à l'aide de float microtime().
En effectuant la différence de deux nombres, tu dois t'assurer que le résultat est supérieur au nombre minimal de ton type de variable (sinon il le met en notation scientifique x.xxxx e-xx, donc 0.00008 devient 8.0000 e-5 qqchose du genre).
J'ai vu que la page avait été générée en 8 secondes, ce qui est surement faux.
if($difference < 0.0001)
$difference = '0.0000';
humm yep c'est vraiment bizzard en fait!!
Code:
<?php $time_end = getmicrotime(); 
$exec = substr($time_end - $time_start,0,5); $msg=($exec<(0.0001))?'moins de 0.0001':$exec;
echo $msg;
?> secondes.
edit : ok c'est bon ct juste mon substr mal mis ;) fin ca le faisait encore en le mettant apres mais bon :-s en milisecondes c bien aussi et la pas de problèmes ....
Code:
<?php $time_end = getmicrotime(); 
	  $exec = ($time_end - $time_start)*1000; 
	  $msg=($exec<=(0.0001))?'moins de 0.0001':substr($exec,0,5);
	  echo $msg; 
	  echo($exec<=1)?' miliseconde':' milisecondes';?>
jvais meme faire miliseconde et secondes .... ;)


edit 2 :
Code:
<?php $time_end = getmicrotime(); 
	  $exec = $time_end - $time_start; 
	  switch ($exec) {
	    case ($exec*1000<0.001) : $msg = 'moins de 0.001 m'; break;
		case ($exec*1000<1)     : $msg = round($exec*1000,3).' m'; break;
		case ($exec>=1)         : $msg = round($exec,3).' '; break;
	  }
	  echo $msg;
	  ?>sec.
voila jpense que la ... c'est pas mal :)
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut