par
Korben » 19 juil. 2007, 19:18
o_O
Les voies du PHP sont impénétrables. J'ai finalement réussi à renommer mes fichiers uploadés grâce à un input hidden dans le formulaire, mais un nouveau problème se pose : le fichier renommé ne comporte qu'une seule et unique lettre (la première lettre du nom en fait

), ce qui me donne des fichiers "a.jpg", "b.jpg" etc.
Je n'ai pourtant nullement défini de nombres de caractères maximaux ou autres choses du genre !
A toute fin utile, je vous donne les éléments concernés de ma page.
Mes nouvelles constantes
// Constantes pour l'upload des imgaes
$folder = '../images/'; // Repertoire cible
$extension = '.jpg'; // Extension du fichier
$max_size = 100000; // Taille max en octets du fichier
$width_max = 120; // Largeur max de l'image en pixels
$height_max = 180; // Hauteur max de l'image en pixels
$nom_final = strtolower(str_replace(array('.', ',', '?', '!', ':', '_', ' ', '.'), '_',$_POST['final']['name']));
$nom_file = $_FILES['fichier']['name'];
$taille = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];
Mon nouveau formulaire
<form enctype="multipart/form-data" action="" method="post">
<table class="categories" align="center" cellpadding="3" style="font-size:11px">
<tr style="color:<?php echo $stylecol_titre; ?>;background-color:<?php echo $cadre_bgc_titre; ?>"><td align="center" colspan="3" style="font-size:12px">Gestion des photos (<strong><?php echo (isset($row['nom']) ? $row['nom'] : '?'); ?></strong>)</td></tr>
<tr><td align="right">Fichier :</td><td><input type="file" name="fichier" /></td>
<td rowspan="2" width="70%">L'upload est uniquement valable avec des fichiers ayant une extension <strong>*.jpg</strong>, tous les autres formats (*.bmp, *.png, *.gif et même *.jpeg) d'image seront systématiquent refusés !
<input type="hidden" name="final" value="<?php echo (isset($row['nom']) ? $row['nom'] : '?'); ?>" />
<br /><br />Limitations d'upload : <strong>Taille :</strong> <?php echo $max_size/1000; ?>Ko maximum - <strong>Dimensions :</strong> <?php echo $width_max; ?> (L) par <?php echo $height_max; ?> (H).
<br /><br />Par ailleurs, veillez à bien sélectionner un nom dans la liste ci-dessus avant d'envoyer le fichier !</td></tr>
<tr><td align="center" colspan="2" width="30%"><input type="submit" name="action" value="Go go go !" style="width:100px" /></td></tr>
</table>
</form>
Mon nouveau script (je ne le poste pas dans son intégralité

)
else if(isset($_POST['action']) and $_POST['action'] == "Go go go !") {
extract($_POST);
// On vérifie si le champ est rempli
if(!empty($_FILES['fichier']['name'])) {
// On vérifie l'extension du fichier
if(substr($nom_file, -4) == $extension) {
// On récupère les dimensions du fichier
$infos_img = getimagesize($_FILES['fichier']['tmp_name']);
// On vérifie les dimensions et taille de l'image
if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size)) {
// Si c'est OK, on teste l'upload
if(move_uploaded_file($tmp , $folder . $nom_final . $extension)) {
// Si upload OK alors on affiche le message de réussite
echo '<b>Image uploadée avec succès !</b>';
echo '<hr />';
echo '<b>Fichier :</b> ', $_FILES['fichier']['name'], '<br />';
echo '<b>Renommé :</b> ', $nom_final . $extension, '<br />';
echo '<b>Taille :</b> ', $_FILES['fichier']['size'], ' octets<br />';
echo '<b>Largeur :</b> ', $infos_img[0], ' px<br />';
echo '<b>Hauteur :</b> ', $infos_img[1], ' px<br />';
echo '<hr />';
echo '<br /><br />';
}
D'après vous, qu'est-ce qui pêche dans mon code ? Je sèche vraiment sur ce coup là

o_O
Les voies du PHP sont impénétrables. J'ai finalement réussi à renommer mes fichiers uploadés grâce à un input hidden dans le formulaire, mais un nouveau problème se pose : le fichier renommé ne comporte qu'une seule et unique lettre (la première lettre du nom en fait ;) ), ce qui me donne des fichiers "a.jpg", "b.jpg" etc.
Je n'ai pourtant nullement défini de nombres de caractères maximaux ou autres choses du genre !
A toute fin utile, je vous donne les éléments concernés de ma page.
Mes nouvelles constantes
[php]// Constantes pour l'upload des imgaes
$folder = '../images/'; // Repertoire cible
$extension = '.jpg'; // Extension du fichier
$max_size = 100000; // Taille max en octets du fichier
$width_max = 120; // Largeur max de l'image en pixels
$height_max = 180; // Hauteur max de l'image en pixels
$nom_final = strtolower(str_replace(array('.', ',', '?', '!', ':', '_', ' ', '.'), '_',$_POST['final']['name']));
$nom_file = $_FILES['fichier']['name'];
$taille = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];[/php]
Mon nouveau formulaire
[php] <form enctype="multipart/form-data" action="" method="post">
<table class="categories" align="center" cellpadding="3" style="font-size:11px">
<tr style="color:<?php echo $stylecol_titre; ?>;background-color:<?php echo $cadre_bgc_titre; ?>"><td align="center" colspan="3" style="font-size:12px">Gestion des photos (<strong><?php echo (isset($row['nom']) ? $row['nom'] : '?'); ?></strong>)</td></tr>
<tr><td align="right">Fichier :</td><td><input type="file" name="fichier" /></td>
<td rowspan="2" width="70%">L'upload est uniquement valable avec des fichiers ayant une extension <strong>*.jpg</strong>, tous les autres formats (*.bmp, *.png, *.gif et même *.jpeg) d'image seront systématiquent refusés !
<input type="hidden" name="final" value="<?php echo (isset($row['nom']) ? $row['nom'] : '?'); ?>" />
<br /><br />Limitations d'upload : <strong>Taille :</strong> <?php echo $max_size/1000; ?>Ko maximum - <strong>Dimensions :</strong> <?php echo $width_max; ?> (L) par <?php echo $height_max; ?> (H).
<br /><br />Par ailleurs, veillez à bien sélectionner un nom dans la liste ci-dessus avant d'envoyer le fichier !</td></tr>
<tr><td align="center" colspan="2" width="30%"><input type="submit" name="action" value="Go go go !" style="width:100px" /></td></tr>
</table>
</form>[/php]
Mon nouveau script (je ne le poste pas dans son intégralité :wink: )
[php] else if(isset($_POST['action']) and $_POST['action'] == "Go go go !") {
extract($_POST);
// On vérifie si le champ est rempli
if(!empty($_FILES['fichier']['name'])) {
// On vérifie l'extension du fichier
if(substr($nom_file, -4) == $extension) {
// On récupère les dimensions du fichier
$infos_img = getimagesize($_FILES['fichier']['tmp_name']);
// On vérifie les dimensions et taille de l'image
if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size)) {
// Si c'est OK, on teste l'upload
if(move_uploaded_file($tmp , $folder . $nom_final . $extension)) {
// Si upload OK alors on affiche le message de réussite
echo '<b>Image uploadée avec succès !</b>';
echo '<hr />';
echo '<b>Fichier :</b> ', $_FILES['fichier']['name'], '<br />';
echo '<b>Renommé :</b> ', $nom_final . $extension, '<br />';
echo '<b>Taille :</b> ', $_FILES['fichier']['size'], ' octets<br />';
echo '<b>Largeur :</b> ', $infos_img[0], ' px<br />';
echo '<b>Hauteur :</b> ', $infos_img[1], ' px<br />';
echo '<hr />';
echo '<br /><br />';
}[/php]
D'après vous, qu'est-ce qui pêche dans mon code ? Je sèche vraiment sur ce coup là :?