Limiter l'envoie de fichier à un seul php/sql
Fermé
Angel
-
5 mars 2011 à 23:08
MIDO-MIDO Messages postés 24 Date d'inscription dimanche 27 avril 2008 Statut Membre Dernière intervention 15 octobre 2014 - 7 mars 2011 à 11:27
MIDO-MIDO Messages postés 24 Date d'inscription dimanche 27 avril 2008 Statut Membre Dernière intervention 15 octobre 2014 - 7 mars 2011 à 11:27
A voir également:
- Limiter l'envoie de fichier à un seul php/sql
- Fichier rar - Guide
- Fichier host - Guide
- Fichier iso - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
8 réponses
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 5/03/2011 à 23:19
Modifié par JooS le 5/03/2011 à 23:19
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 ...
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 ...
cddu33
Messages postés
1269
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
8 septembre 2015
256
5 mars 2011 à 23:20
5 mars 2011 à 23:20
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
merci beaucouuuup pour votre aide
cddu33
Messages postés
1269
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
8 septembre 2015
256
5 mars 2011 à 23:27
5 mars 2011 à 23:27
tu cré d'abord un autre champ mysql (pareilque quand tu a cré tes autre table
puis dans une de tes requete par ex:
puis dans une de tes requete par ex:
$requete="INSERT INTO rapport (nomprop,prenomprop ,nomencadreur, sujet, duree, etablissement, rapport, specialite) VALUES ('$nomprop','$prenomprop' ,'$nomencadreur', '$sujet', '$duree', '$etablissement', '$rapport', '$specialite')";tu change pour
$requete="INSERT INTO rapport (nomprop,prenomprop ,nomencadreur, sujet, duree, etablissement, rapport, specialite, etat) VALUES ('$nomprop','$prenomprop' ,'$nomencadreur', '$sujet', '$duree', '$etablissement', '$rapport', '$specialite','1')";
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
5 mars 2011 à 23:52
5 mars 2011 à 23:52
a quoi bon ajouter un champ de vérification(de plus) alors qu'on peut tout simplement vérifier directement avec le nom du propriétaire ...!!!
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 6/03/2011 à 00:50
Modifié par JooS le 6/03/2011 à 00:50
Ben je croyais que le login etait le nom, vu que tu n'a pas citer de login plus haut ...
Supposons que le login de ton membre soit stocké dans la variable $login ...
Sinon, c'est a toi de voir, si tu utilise les session, alors tu peut recuperer son login via la session,
Voila ...Pour resumer ...
1 - On prépare une requête qui va chercher dans la table rapport un nom qui ressemble(est egale) au login
2 - On execute cette requette
3 - On classifie les resultat dans un tableau($resultat)
4 - Si il existe des resultats(logiquement au plus 1 seul resultat), ça voudrai dire qu'il existe un nom dans la table rapport qui ressemble au login, donc, que l'utilisateur a deja poster, alors on affiche un message d'excuse...
5 - Sinon, ça voudrai dire qu'il n y a aucun nom qui rssemble au login existant dans la table rapport, alors on affiche le formulaire...
Supposons que le login de ton membre soit stocké dans la variable $login ...
Sinon, c'est a toi de voir, si tu utilise les session, alors tu peut recuperer son login via la session,
$login = "Angel"; // par exemple, l'utilisateur c'est toi $existance = $bdd->prepare('SELECT nom FROM rapport WHERE nom = ?'); $existance->execute(array($login)); $resultat = $existance->fetch(); if(isset($resultat['nom']) { //Si le nom(=login) existe dans la table rapport echo "Désolé Mr/Mme, Vous avez deja poster un document"; } else { //On affiche Le formulaire }
Voila ...Pour resumer ...
1 - On prépare une requête qui va chercher dans la table rapport un nom qui ressemble(est egale) au login
2 - On execute cette requette
3 - On classifie les resultat dans un tableau($resultat)
4 - Si il existe des resultats(logiquement au plus 1 seul resultat), ça voudrai dire qu'il existe un nom dans la table rapport qui ressemble au login, donc, que l'utilisateur a deja poster, alors on affiche un message d'excuse...
5 - Sinon, ça voudrai dire qu'il n y a aucun nom qui rssemble au login existant dans la table rapport, alors on affiche le formulaire...
Bonjour, j'ai suivis votre aide et fait ceci mais ca génère une erreur
Erreur (la ligne 70 c'est celle de la requête
Notice: Undefined variable: bdd in C:\wamp\www\Site\site\cibleAjoutRapport.php on line 70
Call Stack
Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\Site\site\cibleAjoutRapport.php on line 70
$login = $_SESSION['login']; // on extrait le login de l'utilisateur connecté $existance = $bdd->prepare("SELECT mail FROM rapport WHERE mail = '".$_SESSION['login']."'"); $existance->execute(array($login)); $resultat = $existance->fetch(); if(isset($resultat['mail'])) { //Si le nom(=login) existe dans la table rapport echo "<a onclick=\"alert('Désolé Mr/Mme, Vous avez deja poster un document')\" class='blanc'><center><img src='images/trash.png'/></center></a>"; }
Erreur (la ligne 70 c'est celle de la requête
Notice: Undefined variable: bdd in C:\wamp\www\Site\site\cibleAjoutRapport.php on line 70
Call Stack
Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\Site\site\cibleAjoutRapport.php on line 70
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 ?
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 6/03/2011 à 13:19
Modifié par JooS le 6/03/2011 à 13:19
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)
$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)
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
6 mars 2011 à 13:30
6 mars 2011 à 13:30
ok, attend, je crée le formulaire pour essayer ...
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 6/03/2011 à 13:39
Modifié par JooS le 6/03/2011 à 13:39
Tu peut poster le code sql pour créer la table ??
Pour faire vite??
Pour faire vite??
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 ;
'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 ;
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
6 mars 2011 à 14:23
6 mars 2011 à 14:23
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; } } ?>
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 6/03/2011 à 15:00
Modifié par JooS le 6/03/2011 à 15:00
5000 = 5000 OCTET = 5ko
J'ai pas compris la première erreur ...
EDIT : Non, l'utilisateur ne pourra envoyer qu'un seul fichier, a condition qu'il ne peut pas changer son mail, si il peut, alors a chaque fois qu'il changera de mail, il pourra uploader de nouveau ...
J'ai pas compris la première erreur ...
EDIT : Non, l'utilisateur ne pourra envoyer qu'un seul fichier, a condition qu'il ne peut pas changer son mail, si il peut, alors a chaque fois qu'il changera de mail, il pourra uploader de nouveau ...
Pour la première erreur, si par exemple vous upalodé un fichier nomé xx.doc qui contient le mot salut et que apres vous voulez essayer d'uploader une deuxième fois avec un doc nommé xx.doc et contient le mot bye bye -- > vous pouvez le faire, et l'envoie de fichier de fichier se fait et vous aurez à la fin un fichier nommé xx.doc et qui contient bye bye
et dans la base deux lignes avec le meme nom
il y a eu ecrasement du premier fichier et l'envoie d'un deuxième ce que moi je veux eviter
càd apres le premier envoie on l'arrete
vous avez raison vous savez je deviens dingue avec cette page j'essaye de la regler depuis plus de 24h maintenant merci pour votre
et dans la base deux lignes avec le meme nom
il y a eu ecrasement du premier fichier et l'envoie d'un deuxième ce que moi je veux eviter
càd apres le premier envoie on l'arrete
vous avez raison vous savez je deviens dingue avec cette page j'essaye de la regler depuis plus de 24h maintenant merci pour votre
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 6/03/2011 à 15:09
Modifié par JooS le 6/03/2011 à 15:09
Non il ne sera pas ecraser, sauf si les deux utilisateurs ont le meme nom et prenom, parce que les fichiers sont stocké de la maniere que tu ma demander => nomPrenom.docx ...
Alors seulement dans le cas ou deux utilisateur qui ont le meme nom et prenom peuvent avoir ce probleme, tu peut y remedier en faisant ça ...
(ligne 62)
Puisque le mail est UNIQUE, alors tu n'aura pas affaire a ce problème ....
Alors seulement dans le cas ou deux utilisateur qui ont le meme nom et prenom peuvent avoir ce probleme, tu peut y remedier en faisant ça ...
(ligne 62)
$fichier = $_POST['nomprop'].$_POST['mail'].$extension;
Puisque le mail est UNIQUE, alors tu n'aura pas affaire a ce problème ....