Limiter l'envoie de fichier à un seul php/sql

[Fermé]
Signaler
-
Messages postés
24
Date d'inscription
dimanche 27 avril 2008
Statut
Membre
Dernière intervention
15 octobre 2014
-
Bonsoir
J'ai une idée que j'ai essayer de réaliser mais j'ai pas trouver la solution !! en faite j'ai un utilisateur qui se connecte avec son login et mot de passe , ce dernier peut envoyer son document dans la base de données (une table spécifique au document qui contient nom,prenom, le titre, l'emplacement, la spécialité) . Je veux faire en sorte que si l'utilisateur envoie son document, il ne pourra plus avoir accéder à la page de l'envoie une autre fois (càd il ne peut pas envoyer deux fichier mais un seul envoie et après ca sera bloquer)

Merci de m'aider si c'est super important

<?php 
session_start();
if (!isset($_SESSION['login'], $_SESSION['motdepasse']))
{
    header('Location: index.php');
}
?>
<?php
include('connex.inc.php');
//si tous les données sont bien saisies
if( !empty($_POST['nomprop'])&& !empty($_POST['prenomprop'])&& !empty($_POST['nomencadreur'])&& !empty($_POST['sujet']) && !empty($_POST['duree']) && !empty($_POST['etablissement'])&& empty($_POST['rapport']) && !empty($_POST['specialite']) )
{
//récupération des données saisies dont des variables

  $dossier = 'upload/';
$fichier = basename($_FILES['avatar']['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['avatar']['tmp_name']);
$extensions = array('.docx', '.pdf', '.rar');
$extension = strrchr($_FILES['avatar']['name'], '.'); 
//Début des vérifications de sécurité...
if(file_exists($dossier . $fichier)){
	 $erreur = 'Veuillez renommer votre document en suivant cette exemple: PrenomNom';
}
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type doc, pdf 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['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Upload effectué avec succés !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
  $nomprop=mysql_escape_string($_POST['nomprop']);
  $prenomprop=mysql_escape_string($_POST['prenomprop']);
  $nomencadreur=mysql_escape_string($_POST['nomencadreur']);
  $sujet=mysql_escape_string($_POST['sujet']); 
  $duree=mysql_escape_string($_POST['duree']);
  $etablissement=mysql_escape_string($_POST['etablissement']);
  $rapport=$dossier . $fichier;
  $specialite=mysql_escape_string($_POST['specialite']);
    
  //Requête SQL
  $requete="INSERT INTO rapport (nomprop,prenomprop ,nomencadreur, sujet, duree, etablissement, rapport, specialite)
  VALUES ('$nomprop','$prenomprop' ,'$nomencadreur', '$sujet', '$duree', '$etablissement', '$rapport', '$specialite')";
  $requete2="INSERT INTO specialite(sujet,specialite,rapport) VALUES ('$sujet','$specialite','$rapport')";
  $idcom=connex('pfe','myparam');
  $idcom2=connex('pfe','myparam');
  $result=mysql_query($requete,$idcom);
  $result2=mysql_query($requete2,$idcom2);
  
  //si le résultat de la requête est:echoué 'erreur MYSQL
  if(!$result)
  {
    echo mysql_errno();
    echo mysql_error();
    echo "<script type=\"text/javascript\">
	alert('Erreur : ".mysql_error()."')</script>";
	
  }
  //sinon si résultat=succés
 else
 {
 echo "<br><br>";
 echo "Nom propritère : " .$nomprop. "<br><br>";
 echo "Prénom propritère :" .$prenomprop. "<br><br>";
 echo "Nom encadreur:" .$nomencadreur. "<br><br>" ;
 echo "Sujet :" .$sujet ."<br><br>";
 echo "Durée :" .$duree. "<br><br>" ;
 echo "Etablissement :" .$etablissement. "<br><br>" ;
 echo "Rapport :" .$rapport. "<br><br>" ;
 echo "Spécialité :" .$specialite. "<br><br>" ;
}
}
  //si l'administrateur ne saisie pas une des données dans le formulaire d'ajout de rapport
  
   else {
	   echo "<h5>Formulaire d'ajout de rapport incomplet, pour revenir cliquer <a class='blanc' href=\"formRapport.php\">içi</a>.</h5>"; 
   }
   
?>




8 réponses

Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
226
Salut ...
Euuux, j'ai pas eu le temps de lire tout le script, mais comme idée, tu peut tout simplement faire une requête avant l'affichage du formulaire d'envoi pour vérifier si le nom de l'utilisateur existe dans la table des documents...
Donc si c'est le cas, c'est qu'il a déjà envoyer un fichier, alors tu lui interdit tout accès au formulaire d'envoi, sinon, il pourra envoyer son fichier ...
Messages postés
1251
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
8 septembre 2015
260
le plus simple serai de rajouter une variable mysql que tu passe a 1 après le premier upload
comment je fais ceci svp
merci beaucouuuup pour votre aide
non disant que toi tu as envoyer un document nommé essai
moi je vais aujourd'hui envoyer mon document aussi et par hasard je l'ai nommé aussi essai
j'ai réaliser une condition qui empêche l'envoi tant que c'est le même nom et demande à l'utilisateur de renommer son document -> tout ca marche sauf que lors de l'envoie du formulaire le reste des champs (tel que le nom prenom,...) rempli par l'utilisateur sont ajouter dans la table

pouvez vous svp me corriger mon code pour règler ce problème
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
226
pourquoi pas renommer son fichier ...??
vous ne m'avez pas compris, je suis d'accord qu'il renomme, mais mon problème c'est que l'envoie du formulaire se fait meme si je lui fais echo
$erreur = 'Veuillez renommer votre document en suivant cette exemple: PrenomNom';
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
226
Ben c'est parce que le script d'insertion dans la table se trouve en dehors de la condition ...
Donc il insère dans tout les cas ...

Attend 1 seconde ...
ok je vous attends merci beaucoup
d'accord donc j'ajoute un champ dans la table
ensuite pouvez vous svp me montrer à quelle niveau je dois mettre if($etat=1)
et surtout comment savoir que ce 1 correspond a cette utilisateur,
parce que si l'utilisateur change l'orthographe de son nom ou prenom il pourra envoyer un deuxième fichier non ?
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
226
Alors voila, c'est du rapide, donc je suis pas sure du resultat ... Mais essaye pour voir...


<?php   
if(isset($_POST['nomprop']) AND isset($_POST['nomprop']) AND isset($_FILES['avatar'])) {   
       
    try {   
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;   
        $bdd = new PDO('mysql:host=localhost;dbname=ta_bdd', 'root', '', $pdo_options);   
    }   
    catch (Exception $e) {   
        die('Erreur : ' . $e->getMessage());   
    }   
       
    $login = $_SESSION['login'];   
    $existance = $bdd->prepare('SELECT mail, nom, prenom FROM rapport WHERE mail = ?');   
    $existance->execute(array($login));   
    $resultat = $existance->fetch();   
       
    if(isset($resultat['mail'])) {   
        echo "<a onclick=\"alert('Désolé Mr/Mme, Vous avez deja poster un document')\" class='blanc'><center><img src='images/trash.png'/></center></a>";   
    }   
       
    else {   
        $valid = true;   
        $dossier = 'upload/';   
        $fichier = basename($_FILES['avatar']['name']);   
           
        $taille_maxi = 100000;   
        $taille = filesize($_FILES['avatar']['tmp_name']);   
        $extensions = array('.docx', '.pdf', '.rar');   
        $extension = strrchr($_FILES['avatar']['name'], '.');   
           
           
        if(file_exists($dossier.$fichier)){   
            $valid = false;   
            $erreurnomfichier = 'Veuillez renommer votre document en suivant cette exemple: PrenomNom';   
        }   
           
        elseif(!in_array($extension, $extensions)){   
            $valid = false;   
            $erreurtypefichier = 'Vous devez uploader un fichier de type doc, pdf ou txt';   
        }   
           
        elseif($taille>$taille_maxi) {   
            $valid = false;   
            $erreurtaillefichier = 'Le fichier est trop gros...';   
        }   
           
        elseif($valid){   
            $fichier = $resultat['nom'].$resultat['prenom'].$extension;   
               
            if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)){   
                echo 'Upload effectué avec succés !';   
               
            $nomprop=mysql_escape_string($_POST['nomprop']);   
            $prenomprop=mysql_escape_string($_POST['prenomprop']);   
            $nomencadreur=mysql_escape_string($_POST['nomencadreur']);   
            $sujet=mysql_escape_string($_POST['sujet']);   
            $duree=mysql_escape_string($_POST['duree']);   
            $etablissement=mysql_escape_string($_POST['etablissement']);   
            $rapport=$dossier.$fichier;   
            $specialite=mysql_escape_string($_POST['specialite']);   
               
            $existance = $bdd->prepare('INSERT INTO rapport(nomprop,prenomprop ,nomencadreur, sujet, duree, etablissement, rapport, specialite) VALUES(:nomprop, :prenomprop, :nomencadreur, :sujet, :duree, :etablissement, :rapport, :specialite)');   
            $existance->execute(array('nomprop'=>$nomprop, 'prenomprop'=>$prenomprop, 'nomencadreur'=>$nomencadreur, 'sujet'=>$sujet, 'duree'=>$duree, 'etablissement'=>$etablissement, 'rapport'=>$rapport, 'specialite'=>$specialite));   
            $existance->closeCursor();   
               
            $affichage = $bdd->prepare('SELECT * FROM rapport WHERE mail = ?');   
            $affichage ->execute(array($login));   
            $resultat = $affichage ->fetch();   
               
             echo "<br><br>";   
             echo "Nom propritère : " .$resultat['nomprop']. "<br><br>";   
             echo "Prénom propritère :" .$resultat['prenomprop']. "<br><br>";   
             echo "Nom encadreur:" .$resultat['nomencadreur']. "<br><br>" ;   
             echo "Sujet :" .$resultat['sujet'] ."<br><br>";   
             echo "Durée :" .$resultat['duree']. "<br><br>" ;   
             echo "Etablissement :" .$resultat['etablissement']. "<br><br>" ;   
             echo "Rapport :" .$resultat['rapport']. "<br><br>" ;   
             echo "Spécialité :" .$resultat['specialite']. "<br><br>" ;   
            }   
               
            else{   
                echo 'Echec de l\'upload !';   
            }   
        }   
        else {   
            if(isset($erreurnomfichier)) echo $erreurnomfichier;   
            if(isset($erreurtypefichier)) echo $erreurtypefichier;   
            if(isset($erreurtaillefichier)) echo $erreurtaillefichier;    
        }   
    }   
}   
?>
maintenant il n y a ni affichage du message
$erreurnomfichier = 'Veuillez renommer votre document en suivant cette exemple: PrenomNom';

ni ajout dans la base

eDIT
Meme l'envoie d'un fichier (qui n'a pasun autre du meme nom ne se fait plus)
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
226
ok, attend, je crée le formulaire pour essayer ...
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
226
Tu peut poster le code sql pour créer la table ??

Pour faire vite??
--
-- Base de données: 'pfe'
CREATE TABLE IF NOT EXISTS 'rapport' (
'referencerapport' int(10) NOT NULL AUTO_INCREMENT,
'nomprop' varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
'prenomprop' varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
'mail' varchar(100) NOT NULL,
'nomencadreur' varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
'sujet' varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
'duree' int(10) NOT NULL,
'etablissement' varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
'rapport' varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
'specialite' varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY ('referencerapport')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=53 ;
Base de données: 'pfe'
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
226
Voila ...Normalement ...

<form method="post" action="ajout_fichier_bdd.php" enctype="multipart/form-data">
nomprop <input type="text" name="nomprop" /><br /> 
prenomprop <input type="text" name="prenomprop" /><br />
mail <input type="text" name="mail" /><br /> 
nomencadreur <input type="text" name="nomencadreur" /><br /> 
sujet <input type="text" name="sujet" /><br /> 
duree <input type="text" name="duree" /><br /> 
etablissement <input type="text" name="etablissement" /><br /> 
rapport <input type="text" name="rapport" /><br /> 
specialite <input type="text" name="specialite" /><br /> 
<input type="file" name="avatar" /><br /> 
<input type="submit" value="ENVOYER" />
</form>

<?php
if(isset($_POST['nomprop']) AND isset($_POST['prenomprop']) AND isset($_FILES['avatar'])) {
    
    try {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
    }
    catch (Exception $e) {
        die('Erreur : ' . $e->getMessage());
    }
    
    $login = $_SESSION['login'];
    $existance = $bdd->prepare('SELECT mail, nomprop, prenomprop FROM rapport WHERE mail = ?');
    $existance->execute(array($login));
    $resultat = $existance->fetch();
    
    if(isset($resultat['mail'])) {
        echo "<a onclick=\"alert('Désolé Mr/Mme, Vous avez deja poster un document')\" class='blanc'><center><img src='images/trash.png'/></center></a>";
    }
    
    else {
        $valid = true;
        $dossier = 'upload/';
        $fichier = basename($_FILES['avatar']['name']);
        
        $taille_maxi = 10000;
        $taille = filesize($_FILES['avatar']['tmp_name']);
        $extensions = array('.docx', '.pdf', '.rar', '.txt');
        $extension = strrchr($_FILES['avatar']['name'], '.');
        
        
        if(file_exists($dossier.$fichier)){
            $valid = false;
            $erreurnomfichier = 'Veuillez renommer votre document en suivant cette exemple: PrenomNom';
        }
        
        elseif(!in_array($extension, $extensions)){
            $valid = false;
            $erreurtypefichier = 'Vous devez uploader un fichier de type doc, pdf ou txt';
        }
        
        elseif($taille>$taille_maxi) {
            $valid = false;
            $erreurtaillefichier = 'Le fichier est trop gros...';
        }
        
        elseif($valid){
            $fichier = $_POST['nomprop'].$_POST['prenomprop'].$extension;
            
            if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)){
                echo 'Upload effectué avec succés !';
            
            $nomprop=htmlentities($_POST['nomprop']);
            $prenomprop=htmlentities($_POST['prenomprop']);
            $nomencadreur=htmlentities($_POST['nomencadreur']);
            $sujet=htmlentities($_POST['sujet']);
            $duree=htmlentities($_POST['duree']);
            $mail=htmlentities($_POST['mail']);
            $etablissement=htmlentities($_POST['etablissement']);
            $rapport=$dossier.$fichier;
            $specialite=htmlentities($_POST['specialite']);
            
            $existance = $bdd->prepare('INSERT INTO rapport(nomprop,prenomprop, mail,nomencadreur, sujet, duree, etablissement, rapport, specialite) VALUES(:nomprop, :prenomprop, :mail, :nomencadreur, :sujet, :duree, :etablissement, :rapport, :specialite)');
            $existance->execute(array('nomprop'=>$nomprop, 'prenomprop'=>$prenomprop, 'mail'=>$mail, 'nomencadreur'=>$nomencadreur, 'sujet'=>$sujet, 'duree'=>$duree, 'etablissement'=>$etablissement, 'rapport'=>$rapport, 'specialite'=>$specialite));
            $existance->closeCursor();
            
            $existance = $bdd->prepare('SELECT * FROM rapport WHERE mail = ?');
            $existance->execute(array($login));
            $resultat = $existance->fetch();
            
             echo "<br><br>";
             echo "Nom propritère : " .$resultat['nomprop']. "<br><br>";
             echo "Prénom propritère :" .$resultat['prenomprop']. "<br><br>";
             echo "Nom encadreur:" .$resultat['nomencadreur']. "<br><br>" ;
             echo "Sujet :" .$resultat['sujet'] ."<br><br>";
             echo "Durée :" .$resultat['duree']. "<br><br>" ;
             echo "Etablissement :" .$resultat['etablissement']. "<br><br>" ;
             echo "Rapport :" .$resultat['rapport']. "<br><br>" ;
             echo "Spécialité :" .$resultat['specialite']. "<br><br>" ;
            }
            
            else{
                echo 'Echec de l\'upload !';
            }
        }
        
            if(isset($erreurnomfichier)) echo $erreurnomfichier;
            if(isset($erreurtypefichier)) echo $erreurtypefichier;
            if(isset($erreurtaillefichier)) echo $erreurtaillefichier; 
        
    }
}
?>
Lors de l'envoi du foemulaire j'ai fait en sorte qu'il soit ajouter dans deux tables car sur la deuxieme je fais ma recherche.chokran
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
226
c'est pas comme ça qu'on fait normalement ...
tu ne fera que consommer ton espace disque(même si que ça prend pas beaucoup de mémoire), plus tu mélangera les tables et les requêtes, plus tu te perdra et t'aura de plus en plus d'erreurs ...
La meilleur solution que je fais quoi ?
Moi ce que je fais c'est l'insertion grace au formulaire dans une deuxieme table (qui ne contient que 3champs de la table rapport) et j'ai realiser une page ou peut chercher un rapport suite au mot clé entrer
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
226
C'est effectivement une solution, mais ce n'est pas la meilleur ...

Moi j'aurai fait une requête directement vers la table rapport, en sélectionnant que les champs qui m'intéresse ...
Messages postés
24
Date d'inscription
dimanche 27 avril 2008
Statut
Membre
Dernière intervention
15 octobre 2014

oui mais c'est le prof qui dirige malheureusement, MErci