Formulaire d'envoi de fichier + commentaires

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Formulaire d'envoi de fichier + commentaires

par Jackisback » 01 oct. 2008, 10:44

Bon pour ça j'ai trouvé la solution ...

Merci encore à tout ceux qui ont réfléchi sur le problème.

par Jackisback » 23 sept. 2008, 08:22

Bonjour,

Dans mon script d'envoi de fichiers, comment puis-je faire pour mémoriser dans ma bdd dans la colonne up_lien un lien pointant vers le fichiers qui à été envoyé ???

D'avance merci.

par Jackisback » 10 juil. 2008, 15:56

D'ou l'interet de ma colonne "up_finalname" dans ma BDD ...

par Ryle » 10 juil. 2008, 15:55

Pour l'authentification, il te suffit simplement de faire une requête pour vérifier que l'utilisateur est bien présent dans ta base de données (Ex : SELECT COUNT(*) ... avec les login/pass et s'il te retourne 1 c'est que l'utilisateur est inscrit), et en fonction du résultat traiter le fichier et les données ou pas.

Pour les doublons, tu peux vérifier de la même manière si un fichier portant ce nom existe déjà en base ou sur le serveur (file_exists()) et effectivement le renommer automatiquement avec un "2" (si ce nom n'est pas déjà pris) ou avec un timestamp date et heure du jour. (Nota : si tu renommes le fichier, pense à mettre en base le nouveau nom ;))

par Jackisback » 10 juil. 2008, 15:55

Ok pour tout ca je vais regarder par contre je suis pas trop pour enregistrer les fichiers comme tu dis car par la suite ces fichiers pourront etre recuperes par les membres autorisés ... donc autant que les fichiers garde le plus possible leur vrais noms ... tu vois ???

par guilt92 » 10 juil. 2008, 15:51

Je pense qu'effectivement le plus simple est de le faire sans rien demander à l'utilisateur.
Il faut par exemple renommer le fichier en "Nom-Date-Heure-Minute-Seconde.jpg" comme ca tu risques rien (sauf si y a deux uploads a la meme seconde avec le meme nom mais la c vraiment pas de chance ;))...

Regardes ce topic dont tu pourras largement t inspirer (en rajoutant les secondes par contre)

Pour ta premiere question c'est assez simple : tu demandes dans un formulaire a un utilisateur d'entrer son login et son mot de passe.
Dans la page de traitement des données tu regardes si tu as un enregistrement dans ta base avec LOGIN = login_saisi ET MOT_DE_PASSE = mot_de_passe_saisi ... Si tu as un enregistrement qui correspond à cela (mysql_num_rows()) alors c'est bon, sinon c'est pas un vrai membre...

Regarde aussi du coté de la fonction md5() pour encoder les mots de passe, tu les stockes encodés dans la base et tu compares non pas la valeur du champ password mais la valeur encodée du password, c pareil et + sécurisé....

par Jackisback » 10 juil. 2008, 15:33

C'est bon j'ai modifié le script et toutes les informations s'enregistre parfaitement ...

Par contre comment puis-je faire pour vérifier que le pseudo / pass sont valide (je veux dire par la présent dans la BDD et donc que l'utilisateur est autorisé à poster son message / fichier) ????

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Par contre maintenant le soucis est pour les doublons ...

Comment je peux faire pour éviter qu'un fichier en écrase un autre .... ???

Je dois le renommer en xxxx-2 ou je demande à l'utilisateur de le renommer d'abord ..(ca risque d'etre vite chiant si il ecris 36 noms differents qui sont déjà pris ) ....

Je pense que le mieux est de ne rien dire à l'utilisateur et de le faire en auto ...

Qu'en pensez-vous ???

par Ryle » 10 juil. 2008, 15:21

D'une manière générale, utilise la fonction print_r() ou var_dump() sur ta variable $_POST pour débugger et vérifier quelles informations sont réellement envoyées par ton formulaire :)
Tu peux également afficher la requête sql générée pour vérifier les valeur qu'elle va insérer.

D'une manière plus particulière, tu verras que $_POST ne contient pas d'index 'up_filename' ou 'up_filesize'. En effet, comme l'indique les commentaires de ton code, ces informations se trouvent respectivement dans $_FILES['up_fichier']['name'] (// Le nom du fichier original sur la machine source (ex : image.gif)) et $_FILES['up_fichier']['size'] (// La taille du fichier envoyé, en octets (ex : 2543))

Récupères ces valeurs et utilises les dans ta requêtes, ça fonctionnera tout de suite bien mieux :)

Formulaire d'envoi de fichier + commentaires

par Jackisback » 10 juil. 2008, 10:17

Bonjour,

Je reviens avec mon script d'envoi de fichier + commentaires.

Il y a des variables qui ne sont pas déclarées dans mon formulaire de reception donc du coup l'insertion en BDD mysql est incomplète ..

Voici le formulaire d'envoi:
<link rel="stylesheet" media="screen" type="text/css" title="Envoi" href="envoi.css" />

<form method="POST" action="reception.php" enctype="multipart/form-data">

<fieldset>
       <legend>LOGIN</legend> <!-- Titre du fieldset -->		
	<p> <label for="inscr_pseudo">Votre pseudo :</label><br />
	<input type="text" name="inscr_pseudo" value="" id="inscr_pseudo"/> </p>
	<!-- 	Essayez de cliquer sur le texte "Votre pseudo" : vous allez voir que le curseur se place automatiquement dans la zone de texte correspondante.
		On a "lié" le label avec sa zone de texte pour qu'on sache à quoi il correspond. -->
		
	<p> <label for="inscr_pass">Votre mot de passe :</label><br />
	<input type="password" name="inscr_pass" id="inscr_pass" /> </p>
</fieldset>
<p>
<fieldset>
       <legend>POSTEZ VOTRE ARTICLE</legend> <!-- Titre du fieldset -->
	<p> <label for="up_titre_article">Le titre de votre article :</label><br />
	<input type="text" name="up_titre_article" id="up_titre_article"/> </p>
	
	<p> <label for="up_rubrique">Dans quelle rubrique se situe votre article :</label><br />
       <select name="up_rubrique" id="up_rubrique">
           <option value="aluminium">Aluminium</option>
		   <option value="appel_temoin">Appel à témoins</option>
		   <option value="association">Association</option>
           <option value="demarches">Démarches</option>
		   <option value="fibro">Fibromyalgie</option>
		   <option value="metaux">Métaux</option>
           <option value="methodes_bienf">Méthodes bienfaisantes</option>
		   <option value="reconnaissance">Reconnaissance de la Fibro</option>
           <option value="temoignage">Témoignages</option>
           <option value="vaccination">Vaccination</option>		    	   
       </select>
   </p>
	
	<label for="up_description">Commentaire relatif à l\'article :</label> <br />
	<textarea name="message" rows="8" cols="45" id="up_description">ICI</textarea>

<p>
<!--   	<form method="POST" action="reception.php" enctype="multipart/form-data">        -->
		<!-- On limite le fichier à 10 000Ko -->
		<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
		<label for="up_fichier">Sélectionnez votre fichier :</label><br />
		<input type="file" name="up_fichier" id="up_fichier">
	
	<p><input type="submit" name="envoyer" value="Poster le message / fichier"></p>
	<p><input type="reset" value="Effacer les champs" /></p>
	</form>
</p>
</fieldset></p>
Ce formulaire fonctionne bien (apparement).

Et voici le script de reception.php:
<link rel="stylesheet" media="screen" type="text/css" title="Envoi" href="envoi.css" />

	<?php
	mysql_connect("localhost", "root", ""); //Connexion à MySQL
	mysql_select_db("maBDD"); // Sélection de la base

$dossier = 'fichiers_upload/';
// $dossier = '/home/monsite/photos/'; (Dossier sur le serveur par exemple)
$up_filename = basename($_FILES['up_fichier']['name']);
$taille_maxi = 10000000;
// $up_filesize = filesize($_FILES['up_fichier']['size']);
// $up_filesize = filesize($_FILES['up_fichier']['tmp_name']);
$extensions = array('.png', '.bmp', '.gif', '.jpg', '.jpeg', '.pdf', '.doc', '.xls', '.txt');
$extension = strrchr($_FILES['up_fichier']['name'], '.');

// $_FILES['userfile']['name']
// Le nom du fichier original sur la machine source (ex : image.gif).

// $_FILES['userfile']['type']
// Le type MIME du fichier, si le navigateur a fourni cette information (ex : image/gif).

// $_FILES['userfile']['size']
// La taille du fichier envoyé, en octets (ex : 2543).

// $_FILES['userfile']['tmp_name']
// Le nom temporaire du fichier qui sera chargé sur la machine serveur (ex : /home/uploads/FHGJKYUGTDFR). 

//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez envoyer un fichier de type png, bmp, gif, jpg, jpeg, pdf, doc xls ou txt...';
}
if($up_filesize>$taille_maxi)
{
$erreur = 'Le fichier est trop gros ...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{

//On formate le nom du fichier ici...
$up_filename = strtr($up_filename,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$up_filename = preg_replace('/([^.a-z0-9]+)/i', '-', $up_filename);
if(move_uploaded_file($_FILES['up_fichier']['tmp_name'], $dossier . $up_filename)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Transfert effectu&eacute avec succ&egraves !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec du transfert !';
}
}
else
{
echo $erreur;
}

// on écrit la requête sql
$sql = "INSERT INTO upload_fichier(	up_id, 
									inscr_pseudo,
									up_filename,
									up_filesize,
									up_titre_article,
									up_rubrique,
									up_description,
									up_finalname,
									up_filedate )

		VALUES(	'".$_POST['up_id']."',
				'".$_POST['inscr_pseudo']."',
				'".$_POST['up_filename']."',
				'".$_POST['up_filesize']."',
				'".$_POST['up_titre_article']."',
				'".$_POST['up_rubrique']."',
				'".$_POST['up_description']."',
				'".$_POST['up_finalname']."',
				'".$_POST['up_filedate']."'
				)"; 

// on insère les informations du formulaire dans la table 
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
?>
C'est la que ca se gate .... et je n'arrive plus à m'en sortir ...

Voici le script de ma BDD:
CREATE TABLE `upload_fichier` (
  `up_id` int(10) unsigned NOT NULL auto_increment,
  `inscr_pseudo` varchar(255) NOT NULL,
  `up_filename` varchar(20) character set utf8 collate utf8_bin default NULL,
  `up_filesize` int(30) unsigned default '0',
  `up_titre_article` varchar(50) character set utf8 collate utf8_bin default NULL,
  `up_rubrique` varchar(30) NOT NULL,
  `up_description` varchar(255) character set utf8 collate utf8_bin default NULL,
  `up_finalname` varchar(50) character set utf8 collate utf8_bin default NULL,
  `up_filedate` datetime default NULL,
  PRIMARY KEY  (`up_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ;
Il arrive a m'enregistrer les informations suivantes mais pas le reste:

up_id
inscr_pseudo
up_titre_article
up_rubrique

Si quelqu'un pouvait me donner un petit coup de main, je l'en remercierait beaucoup ....