Formulaire d'envoi fichiers et texte
Posté : 07 juil. 2008, 15:25
Bonjour,
J'ai fais plusieurs script (enfin j'ai repris des bouts à gauche à droite), d'inscription, de login, de gestion de fichiers ....
Mais j'ai un petit problème un peu sur tous ....
Je vais commencer par le premier:
Mon formulaire d'envoi de "news" si je peux dire ... c'est un formulaire dans lequel on doit renseigner le champ PSEUDO et PASS pour que l'ajout en BDD soit accepté.
Dans ce form on peut joindre un fichier, on doit préciser le titre, un petit descriptif, etc ...
Voici le script du formulaire d'envoi:
Maintenant le soucis c'est pour l'injection en BDD Mysql ...
Voici le script pour ma BDD:
Après je sais que le script peut etre ameliorer mais si deja l'injection fonctionne ... ce serait super ...
Merci d'avance ...
J'ai fais plusieurs script (enfin j'ai repris des bouts à gauche à droite), d'inscription, de login, de gestion de fichiers ....
Mais j'ai un petit problème un peu sur tous ....
Je vais commencer par le premier:
Mon formulaire d'envoi de "news" si je peux dire ... c'est un formulaire dans lequel on doit renseigner le champ PSEUDO et PASS pour que l'ajout en BDD soit accepté.
Dans ce form on peut joindre un fichier, on doit préciser le titre, un petit descriptif, etc ...
Voici le script du 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="pseudo">Votre pseudo :</label><br />
<input type="text" name="pseudo" value="" id="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="pass">Votre mot de passe :</label><br />
<input type="password" name="pass" id="pass" /> </p>
</fieldset>
<p>
<fieldset>
<legend>POSTEZ VOTRE ARTICLE</legend> <!-- Titre du fieldset -->
<p> <label for="titre">Le titre de votre article :</label><br />
<input type="text" name="titre" id="titre"/> </p>
<p> <label for="rub_article">Dans quelle rubrique se situe votre article :</label><br />
<select name="rubrique" id="rub_article">
<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="commentaire">Commentaire relatif à l\'article :</label> <br />
<textarea name="message" rows="8" cols="45" id="commentaire">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="fichier">Sélectionnez votre fichier :</label><br />
<input type="file" name="fichier" id="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>
Voici le script du formulaire de reception et vérification:<link rel="stylesheet" media="screen" type="text/css" title="Envoi" href="envoi.css" />
<?php
mysql_connect("localhost", "root", ""); //Connexion à MySQL
mysql_select_db("abcfibromyalgie"); // Sélection de la base
$dossier = 'fichiers_upload/';
$fichier = basename($_FILES['fichier']['name']);
$taille_maxi = 10000000;
$taille = filesize($_FILES['fichier']['tmp_name']);
$extensions = array('.png', '.bmp', '.gif', '.jpg', '.jpeg', '.pdf', '.doc', '.xls', '.txt');
$extension = strrchr($_FILES['fichier']['name'], '.');
//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($taille>$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...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Transfert effectué avec succès !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec du transfert !';
}
}
else
{
echo $erreur;
}
?>
<p>Je sais comment tu t appelles. Tu t appelles <?php echo $_POST['pseudo']; ?> !</p>
<p>Je connais le titre de ton article, c'est <?php echo $_POST['titre']; ?> !</p>
<p>Je sais ce qu'il contient. Voici ton commentaire <?php echo $_POST['message']; ?> !</p>
<p>Je connais la rubrique dans laquelle tu l'as mis, c'est <?php echo $_POST['rubrique']; ?> !</p>
Bon les lignes que j'ai ajouté en bas, c'était juste pour moi pour vérifier que l'envoi des variables fonctionnait, et c'est le cas ... ouf ...Maintenant le soucis c'est pour l'injection en BDD Mysql ...
Voici le script pour ma BDD:
--
-- Structure de la table `fichier`
--
CREATE TABLE `fichier` (
`up_id` int(10) unsigned NOT NULL auto_increment,
`up_filename` varchar(20) character set utf8 collate utf8_bin default NULL,
`up_filesize` int(10) unsigned default '0',
`up_title` varchar(50) character set utf8 collate utf8_bin default 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,
`up_mid` int(5) default '0',
`login` varchar(64) character set utf8 collate utf8_bin NOT NULL,
PRIMARY KEY (`up_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Si vous avez une idée, elle serait la bienvenue ...Après je sais que le script peut etre ameliorer mais si deja l'injection fonctionne ... ce serait super ...
Merci d'avance ...