upload images

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : upload images

par sasuke » 06 juil. 2005, 11:47

J'ai le même problème, et ca fait plusieurs jours que je ne trouve pas la solution :cry:

Si l'image ne remplit pas l'un des critère (taille, format) ou que le repertoire de destination est mauvais, il m'affiche bien l'erreur etc.
Le problème c'est justement quand tout est ok, l'image ne s'upload pas :s
<?php
if(isset($_FILES['image']))
{
// paramètres
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg', 'JPG');
$taille_max = 200000;
$dest_dossier = '../images/dessins/pics/';
// utilisez également des slashes sous windows : $dest_dossier = 'd:/damien/photos/';
$taille = $_FILES['image']['size'];
// vérifications
if( !in_array( substr(strrchr($_FILES['image']['name'], '.'), 1), $extensions_ok ) )
{
$erreur = 'Veuillez sélectionner une image de type png, gif, jpg, jpeg ou JPG ;)';
}
elseif (!is_dir($dest_dossier)) {
     $erreur = 'Veuillez indiquer un r&eacute;pertoire destination correct !';
   } 
elseif (!is_writeable($dest_dossier)) {
     $erreur = 'Veuillez spécifier des droits en écriture pour le r&eacute;pertoire destination !';     
   }
elseif ($taille > $taille_max) {
    $erreur = 'Votre image doit faire moins de 200Ko !';
   }
// copie du fichier
if(!isset($erreur))
{
$dest_fichier = basename($_FILES['image']['name']);
// formatage nom fichier
// enlever les accents
$dest_fichier = strtr($dest_fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
// copie du fichier et verification
if (is_uploaded_file($_FILES['fichier']['tmp_name'])) {
$upload = move_uploaded_file($_FILES['image']['tmp_name'], '$dest_dossier' . ']dest_fichier');
$reussi = 'L\'image a été uploadée avec succes'; }
elseif (!is_uploaded_file($_FILES['fichier']['tmp_name'])) {
$erreur = 'L\'image n\'a pas été uploadée';
}
}
}
 
?>
<!-- Erreur ? -->

<div class="en-tete"><div class="img_en-tete"></div>
<?php
if(isset($erreur)){
echo $erreur ;
}
elseif(isset($reussi)){
echo $reussi ;
}
else{
?>
Avant d'ajouter une image, tenez compte des conditions suivantes :<br />
- Le nom de l'image, et le nom de la miniature doivent être identiques, ainsi que leurs extensions (attention aux majuscules).<br />
- L'image peut être en portrait ou paysage, peut être de n'importe quelle taille, mais DOIT être inférieure à 200ko.<br />
- La miniature DOIT être en paysage (plus jolie), peut-etre de n'importe quelle taille (elle sera automatiquement générée à la bonne taille), et DOIT être inférieure à 200ko.<br />
<br />
ps: Si l'image est en paysage, alors vous pouvez la rajouter en tant que miniature ;)
<?php } ?>
</div><br />
<!-- Formulaire -->
<!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" -->
<form method="POST" action="index.php?page=ajout_image" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 200Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="200000" />
<fieldset>
<legend>Envoi d'une image et de sa miniature^^</legend>
<!-- champs d'envoi de fichier, de type file -->
<p><label for="image">Image :</label><input type="file" name="image" /></p>
<p><label for="miniature">Miniature :</label><input type="file" name="miniature" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>
Si tout est bon, alors j'ai l'erreur "l'image n'a pas été uploadée".
Donc l'image n'est pas copié dans le repertoire de destination, car elle ne remplit pas la condition d'avoir été uploadée dans le fichier temporaire? (je demande car jsuis pas un pro --"). Je ne sais plus quoi essayer
Plz aidez moi :cry:

par Cyrano » 09 juin 2005, 07:26

OUi,
Problème 1: tu testes si l'un ou l'autre conditions est fausse: il n'est pas possible que le fichier aie les deux extensions à la fois, donc en faisant comme ça la condition ne sera jamais remplie: donc c'est
if ($verif_extension != "gif" && $verif_extension != "jpg")
Ensuite, pour mesurer la taille, au lieu d'utiliser filesize(), récupère la taille dans:
$taille = $_FILES['photo']['size'];
Ça devrait régler ton problème.

par Invité » 09 juin 2005, 03:14

en fait ça commence à venir

voici mon script:
<?php 
$pseudo = 'test';


if(isset($_FILES['photo']))
{ 
$taille_max = 500000; 
$dest_dossier = '/home/mon_site/www/photos/'; 
$nomPhoto = $_FILES["photo"]["name"];
$extension = strrchr($_FILES['photo']['name'], '.');
$verif_extension = substr($extension, 1);
$taille = filesize($_FILES['photo']['tmp_name']);

if ($verif_extension!=gif or $verif_extension!=jpg)  
{    
echo 'Veuillez sélectionner un fichier de type gif ou jpg !';    
} 
if ($taille > $taille_max)  
{    
$erreur = 'Votre fichier doit faire moins de 500Ko !';  
}  
if(!isset($erreur))  
{
$cheminPhoto = $pseudo . "_photo" . $extension;
rename($_FILES["photo"]["tmp_name"], $dest_dossier.$cheminPhoto);
}
} 


?> 
<!-- Formulaire --><!-- Attention, ne de ne pas oublier le  enctype="multipart/form-data" -->
<form method="POST" action="test_25.php" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 500Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="500000" /> 
<fieldset><legend>Envoi de fichiers</legend>
<!-- champs d'envoi de fichier, de type file -->
<p><label for="photo">Photo :</label>
<input type="file" name="photo" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p></legend></fieldset></form> 
il subsiste juste deux problemes:

1. que j'envoie un fichier jpg ou gif j'ai un message qui me dit que ce format n'est pas accepté.

2. si j'envoie un fichier plus gros que 500 ko je n'ai aucun message d'ereur concernant la taille.

quelq'un aurais il une idée du probleme ?

par Invité » 08 juin 2005, 20:45

en fait c'est mon programme ftp qui déconne et non le script.

par contre comment est ce que je peux faire pour modifier le nom de l'image avant sa sauvegarde et en même temps sauvegarder son url dans ma base de donnée ?

Re: upload images

par Cyrano » 08 juin 2005, 20:19

Essaye en remplaçant cette ligne
move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
Par ceci:
        if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier))
        {
            echo("<p>Transfert complété</p>\n");
        }
        else
        {
            echo("<p>ERREUR : le transfert a échoué</p>\n");
        }

par Invité » 08 juin 2005, 20:13

non aucun message d'erreur tout à l'air de fonctionner normalement mais quand je regarde dans mon repertoire photos, il n'y a rien, il est vide

par Cyrano » 08 juin 2005, 20:11

As-tu un quelconque message d'erreur ou un retour qui ne reflète pas la réalité ?

upload images

par Invité » 08 juin 2005, 20:02

bonjour,

j'essaie d'uploader des images mais ça ne fonctionne pas mon repertoire photos reste vide

voici mon code:
<?
if(isset($_FILES['photo']))
{
// params
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
$taille_max = 10000000;
$dest_dossier = '/home/mon_site/www/photos/';
// utilisez également des slashes sous windows : $dest_dossier = 'd:/damien/photos/';
// vérifications
if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
{
$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !'; 
}
elseif( file_exists($_FILES['photo']['tmp_name']) 
and filesize($_FILES['photo']['tmp_name']) > $taille_max)
{
$erreur = 'Votre fichier doit faire moins de 500Ko !';
}
// copie du fichier
if(!isset($erreur))
{
$dest_fichier = basename($_FILES['photo']['name']);
// formatage nom fichier
// enlever les accents
$dest_fichier = strtr($dest_fichier, 
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
}
}
?>
<html>
<body>
<!-- Erreur ? -->
<? 
if(isset($erreur)){
echo '<p>', $erreur ,'</p>';
}
?>
<!-- Formulaire -->
<!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" -->
<form method="POST" action="upload.php" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 500Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="500000" /> 
<fieldset>
<legend>Envoi de fichiers</legend>
<!-- champs d'envoi de fichier, de type file -->
<p><label for="photo">Photo :</label><input type="file" name="photo" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>
</body>
</html>