Page 1 sur 2
[Résolu]Renommer des photos uploader
Posté : 18 mai 2010, 11:47
par cuoreconleali
Bonjour à tous,
voilà j'aimerai que lorsque l'on uploade une photo celle-ci soit automatiquement renommée par le login de la personne.
Qui peut m'aider ??
Merciiiiii
Code : Tout sélectionner
<HTML>
<HEAD>
<Title>Partie Administration</Title>
</HEAD>
<body bgcolor ="#3366FF">
<form method="POST" action="upload.php" enctype="multipart/form-data">
<!-- On limite le fichier à 500Ko -->
Veuillez nommer le fichier par votre nom.prénom SVP.
Ce pour plus de facilités et s’assurer que votre photo corresponde à votre nom.
Veuillez noter que si votre photo n'est pas nommée comme demandé ci-dessous, elle ne sera pas prise en compte.
Votre photo ne peut pas dépasser 500ko et doit avoir le format : .png,.gif,.jpg ou .jpeg et seulement ces formats, les autres formats ne sont pas acceptés.
<br>
En vous remerciant.
<br>
<br>
<input type="hidden" name="MAX_FILE_SIZE" value="500000">
Fichier : <input type="file" name="photo">
<br>
<br>
<input type="submit" name="envoyer" value="Envoyer le fichier">
</form>
<?php
if(isset($_FILES['photo']))
{
$dossier = 'upload/';
$fichier = basename($_FILES['photo']['name']);
$taille_maxi = 500000;
$taille = filesize($_FILES['photo']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['photo']['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 uploader un fichier de type png, gif, jpg, jpeg,...';
}
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['photo']['tmp_name'], $dossier ."$login.$pswd".$fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'UPLOAD EFFECTUE AVEC SUCCES !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'ECHEC DE L\'UPLOAD !';
}
}
else
{
echo $erreur;
}
}
?>
<br>
<br>
<a href="#" onclick="opener=self;self.close();">fermer</a>
</body>
</HTML>
Re: Renommer des photos uploader
Posté : 18 mai 2010, 12:16
par stopher
Salut ,
la réponse à ta question , réside dans cette fonction :
move_uploaded_file
Regarde le lien que je t'es donné , il te suffit de jouer avec le dernier paramètre , à savoir :
string $destination
Good luck ,
Ch.
Re: Renommer des photos uploader
Posté : 18 mai 2010, 12:20
par cuoreconleali
Merci pour ta réponse, je sais que je dois jouer avec cette variable mais je n'y arrive pas : je ne vois pas comment lui dire que le fichier doit porter comme nom $login
As tu une idée ?
Re: Renommer des photos uploader
Posté : 18 mai 2010, 12:25
par stopher
Tu écrits :
if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier ."$login.$pswd".$fichier)) ...
Heu .. là tu mets en destination :
$dossier .$login.$pswd.".$fichier
soit par exemple :
upload/TotoMotdepasseFichier.png
Bon , déjà je ne suis pas certains que mettre le mot de passe concaténé dans le nom du fichier soit conseillé ... apres , c'est toi qui vois !
mais tu peux trés bien mettre uniquement le login :
if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier .$login)) ...
Ce qui devrait donner :
upload/Toto.png
Bien entendu , la variable $login
doit être
saine , pour éviter toute injection de code !
htmlentities() et tout ce qui s'en suit pour que tu estimes être un login "valide".
Ch.
Evidemment $login ne doit pas être null !
Re: Renommer des photos uploader
Posté : 18 mai 2010, 12:30
par cuoreconleali
merci
Voila ce que je mets mais sa ne marche pas
Code : Tout sélectionner
if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier .$login.$fichier))
y vois tu une erreur ??
je voudrais arriver a ton exemple qui est dont upload\toto.jpg
Re: Renommer des photos uploader
Posté : 18 mai 2010, 12:38
par macgawel
Voila ce que je mets mais sa ne marche pas
Bonjour.
C'est un peu court...
- Message d'erreur ? Lequel ?
- Ca fonctionne, mais le résultat n'est pas conforme ? Quel est le résultat ?
- Autre (préciser) ?
Re: Renommer des photos uploader
Posté : 18 mai 2010, 12:45
par stopher
Quel est le resultat ?
quand tu dis ça ne fonctionne pas , le fichier ne s'upload pas ? le nom n'est pas correct ? ( dans ce cas vérifies tes variables )
Pourquoi tu rajoutes $fichier à la fin ? .. en fait il manque juste l'extension à ton fichier .. si elle est unique , tu peux la spécifier de façon statique
$login.'.jpeg'
Sinon , tu peux soit la récupérer du nom du fichier d'origine , soit la déduire du tyme mime , php5.3 offre une extension sympathique la dessus :
http://fr.php.net/manual/en/function.finfo-file.php
Ch.
Re: Renommer des photos uploader
Posté : 18 mai 2010, 14:03
par cuoreconleali
le résultat est que le fichier n'est pas renommé.
concernant l'extension je la récupère sans problème.
Re: Renommer des photos uploader
Posté : 18 mai 2010, 14:16
par cuoreconleali
à mon avis j'ai un problème avec la variable $login qui n'arrivent pas sur la page d'Upload comment je pourrais faire ??
Re: Renommer des photos uploader
Posté : 18 mai 2010, 14:34
par cuoreconleali
au fait j'ai deux pages
la première avec ceci :
Code : Tout sélectionner
<HTML>
<HEAD>
<Title>Accueil</Title>
</frameset>
</HEAD>
<body bgcolor ="#3366FF">
<b><center><u>Page réservée aux étudiants de Master 2 en sciences psychologiques et de l'éducation</b></center></u>
<BR>
<b>Veuillez entrer votre login et votre mot de passe, ceux-ci se trouvent dans le courrier que vous avez reçu, afin de pouvoir télécharger votre photo.</b>
<BR><b>Chaque étudiant de MA2, a reçu un login et un mot de passe, différent pour chacun!!</b>
<?
if (!isset($_POST["entre"]))
{
echo "<FORM method = \"POST\" action = \"index.php\">";
echo"<BR>";
echo "Login : "."<input type = \"text\" name = \"login\">";
echo"<BR>";
echo "<BR>"."Mot de Passe : "."<input type = \"password\" name = \"pswd\">";
echo"<BR>";
echo "<BR>"."<input type = \"submit\" name = \"entre\" value = \"Entrer\">";
echo "</FORM>";
}
else
{
//connexion à la base de donnée
require ("autorisation.php");
require ("branchement.php");
//lecture et mise en mémoire des valeurs entrées par l'utilisateur
$login = $_POST['login'];
$pswd = $_POST['pswd'];
//fonction de vérification par rapport à la bd
$sql = "SELECT pswd FROM etudiants WHERE nom ='$login'";
$result = mysql_query ($sql);
//si le mot de passe entré et celui de la db sont idem alors message de bienvenu admin
if (mysql_num_rows($result)> 0)
{
$pass_db = mysql_result($result,0);
if($pass_db == $pswd)
{
echo"<BR>";
echo"<br><b> pour acceder à votre page cliquer ici </b>";
echo"<BR>";
echo '<a href ="upload.php">Pour encoder votre photo, veuillez cliquer sur ce lien</a>';//lien hypertexte
$login = $_POST['login'];
$pswd = $_POST['pswd'];
}
//si non on dit que les données ne correspondent a celle de l admin
else
{
echo" <br><b> Les données que vous avez entrés ne correspondent pas à un étudiant</b>";
}
} else
{
// pas d'utlisateur de ce nom
echo" <br><b> Vous n'êtes pas autorisés dans cette partie </b>";
}
}
?>
</body>
</HTML>
et la deuxième avec l'UPLOAD
Code : Tout sélectionner
<HTML>
<HEAD>
<Title>Partie Administration</Title>
</HEAD>
<body bgcolor ="#3366FF">
<form method="POST" action="upload.php" enctype="multipart/form-data">
<!-- On limite le fichier à 500Ko -->
<b>Veuillez nommer le fichier par votre nom.prénom SVP. </b>
<BR><b>Ce pour plus de facilités et s’assurer que votre photo corresponde à votre nom. </b>
<BR><b> Veuillez noter que si votre photo n'est pas nommée comme demandé ci-dessous, elle ne sera pas prise en compte. </b>
<BR><b> Votre photo ne peut pas dépasser 500ko et doit avoir le format : .png,.gif,.jpg ou .jpeg et seulement ces formats, les autres formats ne sont pas acceptés.</b>
<br>
<BR><b> En vous remerciant. </b>
<br>
<br>
<input type="hidden" name="MAX_FILE_SIZE" value="500000">
Fichier : <input type="file" name="photo">
<br>
<br>
<input type="submit" name="envoyer" value="Envoyer le fichier">
</form>
<?php
if(isset($_FILES['photo']))
{
$dossier = 'upload/';
$fichier = basename($_FILES['photo']['name']);
$taille_maxi = 500000;
$taille = filesize($_FILES['photo']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['photo']['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 uploader un fichier de type png, gif, jpg, jpeg,...';
}
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['photo']['tmp_name'], $dossier.$fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo "<b> UPLOAD EFFECTUE AVEC SUCCES !</b>";
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'ECHEC DE L\'UPLOAD !';
}
}
else
{
echo $erreur;
}
}
?>
<br>
<br>
<a href="#" onclick="opener=self;self.close();">fermer</a>
</body>
</HTML>
Re: Renommer des photos uploader
Posté : 18 mai 2010, 14:45
par macgawel
Dans ton script, tu appelles la variable $login. Mais à aucun moment elle n'est renseignée.
En PHP les variables ne sont pas passées d'un script à l'autre, donc tu ne peux pas récupérer dans ta page upload.php la valeur $login récupérée dans la page accueil.php
Du coup, ton script fonctionne bien mais comme $login est vide...
Une solution :
les sessions...
[Edit] Fautes de frappe
Re: Renommer des photos uploader
Posté : 18 mai 2010, 14:50
par cuoreconleali
merci pour ta réponse mais étant très novice je ne vois pas comment faire avec les sessions.
As tu une idée pour pouvoir m'aider en gardant mes 2 pages et sans devoir modifier trop mes codes
Re: Renommer des photos uploader
Posté : 18 mai 2010, 14:57
par stopher
Fasons simple ..
L'utilisateur s'authentifie , tu enregistres son login dans une variable de session
ex : $_SESSION['login'] = $login;
Ensuite , n'importe ou dans ton code , tu peux récupérer le login de l'utilisateur , car une variable de session ( elle porte bien son nom ) est disponible pendant toute la durée de la "session" ( navigation ) de l'utilisateur , bref tant qu'il ne ferme pas son navigateur . ( bon , il y a des durées de vie ect .. mais pour le moment ne t'en préoccupe pas )
Donc , dans ta page d'upload , tu récupéres simplement le login , non plus directement avec $login qui dans cette page n'existe plus mais par $_SESSION['login']
NOTE: surtout n'oublie pas de mettre en premiere ligne , de tes script ( juste apres <?php ) session_start()
Sinon , ca ne fonctionnera pas ..
Je te conseil la documentation que t'a donné macgawel
Good luck ,
Ch
Re: Renommer des photos uploader
Posté : 18 mai 2010, 17:58
par cuoreconleali
merci pour ces précieux conseils je vais tester cela et vous reviens
Re: Renommer des photos uploader
Posté : 18 mai 2010, 18:10
par cuoreconleali
merci je viens d'essayer car trop envie d'y arriver mais voila l'erreur
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/promotions/index.php:13) in /var/www/promotions/index.php on line 15
Que dois je faire?