Un script PHP pour uploader des fichiers sur le serveur

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 nov. 2005, 00:28

la redirection est placée dans le cas d'une erreur !!

déplace le code apres l'accolade qui suit :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 355 Messages

22 nov. 2005, 00:32

J'ai fait come vous m'avez dit:
<?php 
if(isset($_FILES['photo'])){ 
    // 
    // Paramètres globaux 
    // 
    unset($erreur); 
    $extensions_ok = array('png', 'gif', 'jpg', 'jpeg'); 
    $taille_max_photo = 500000; 
    $taille_max_logo = 100000; 
    $dest_dossier = '*'; 
    // 
    // Vérifications pour le logo 
    // 
    // Extension : 
    if( !in_array( strtolower(substr(strrchr($_FILES['logo']['name'], '.'), 1), $extensions_ok )) ) 
    { 
        $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';    
    } 
    // Taille max : 
    elseif( file_exists($_FILES['logo']['tmp_name']) 
          and filesize($_FILES['logo']['tmp_name']) > $taille_max_logo) 
    { 
        $erreur = 'Votre fichier doit faire moins de '.$taille_max_logo.' octets !'; 
    } 
    elseif(file_exists($_FILES['logo']['tmp_name'])){ 
      
        // Définition de la longueur et de la largeur max 
        $longueur_logo_max = "80"; 
        $largeur_logo_max = "80"; 

        $size_logo = getimagesize($_FILES['logo']['tmp_name']); 

        if(($size_logo[0] > $largeur_logo_max) || ($size_logo[1] > $longueur_logo_max)){ 
            $erreur .= 'Les dimensions du logo sont trop grandes !'; 
            $erreur .= 'Taille de votre photo : '.$size_logo[1].'x'.$size_logo[0].'<br />'; 
            $erreur .= 'Taille maximale autorisée :'.$longueur_logo_max.'x'.$largeur_logo_max.'<br />'; 
        } 

    } 
    // 
    // Fin des vérifications 
    // 
    // 
    // Copie des fichiers 
    // 
    if(!isset($erreur))     
    { 
        // 
        // Copie de la photo. 
        // 
        $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-1]+)/i', '_', $dest_fichier); 
        // copie du fichier 
        move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier); 
         
        // 
        // Copie du logo. 
        // 
        $dest_fichier = basename($_FILES['logo']['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-1]+)/i', '_', $dest_fichier); 
        // copie du fichier 
        move_uploaded_file($_FILES['logo']['tmp_name'], $dest_dossier . $dest_fichier); 
     	
    } 
	// On redirige vers le fichier suivant:	 
    echo "<script type='text/javascript'>window.location.replace('index.php');</script>";
	//header("Location: index.php");
} 

?> 
<html> 
<body> 
<!-- Erreur ? --> 
<?php 
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>Uploader vos images</legend> 
<!-- champs d'envoi de fichier, de type file --> 
<p><label for="logo">Uploader votre logo : </label><input type="file" name="logo" /></p> 
<!-- bouton d'envoi --> 
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p> 
</legend> 
</fieldset> 
</form>
Mais cela ne change rien :cry:

Eléphant du PHP | 82 Messages

22 nov. 2005, 00:41

J'utilise ca sur mon site de temps en temps :

Code : Tout sélectionner

<script> function redirect(){ window.location.replace("mod_basses.php"); } setTimeout("redirect();", 5000); </script>
A adapater dans ton cas.
Sébastien.

Eléphant du PHP | 355 Messages

22 nov. 2005, 00:45

Bonjour s3b54sk8 et merci :wink:

Mais s'est pas le code qui marche pas s'est qu'il est mal placer, en plus le votre ne passera pas, par que je dois le mettre entre les balise php.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 nov. 2005, 00:54

autant pour moi, la rediretion était bien a sa place

remplace le javascript par:
header("location: ./index.php");
a savoir aussi que le chemin ne doit pas etre bon si ca ne marche pas, le chemin dépend de la profondeur dans l'arborescence du fichier d'upload par rapport a l'index.php .

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 355 Messages

22 nov. 2005, 01:03

J'ai déja esayer avec header cela ne change rien.

Le fichier index.php et dans le même répertoire que celui ou se trouve la redirection.

Eléphant du PHP | 82 Messages

22 nov. 2005, 08:03

Mais s'est pas le code qui marche pas s'est qu'il est mal placer, en plus le votre ne passera pas, par que je dois le mettre entre les balise php.
Il marche très bien dans mon code en php, il suffit juste de l'adapter comme je vous ai dit.

Genre :
	// On redirige si l'enregistrement s'est déroulé avec succès :
	$redirect .= "<script>";
	$redirect .= "function redirect(){";
    $redirect .= "window.location.replace("mod_basses.php");";
	$redirect .= "}";
	$redirect .= "setTimeout("redirect();", 5000);";
	$redirect .= "</script>";
	$redirect .= "<font face="verdana" size="2">Ajout effectué avec succès, redirection en cours.";

	echo ($redirect);
Sébastien.

Eléphant du PHP | 355 Messages

22 nov. 2005, 13:35

J'ai essayer ceci:
// On redirige si l'enregistrement s'est déroulé avec succès : 
    $redirect .= "<script>"; 
    $redirect .= "function redirect(){"; 
    $redirect .= "window.location.replace(\"index.php\");"; 
    $redirect .= "}"; 
    $redirect .= "setTimeout(\"redirect();\", 5000);"; 
    $redirect .= "</script>"; 
    $redirect .= "<font face=\"verdana\" size=\"2\">Ajout effectué avec succès, redirection en cours."; 

    echo ($redirect); 
Mias cela ne fonctionne toujours pas.
Vous dite que la redirection eura lieu si le scritp avent a bien fonctioner, mais je n'arrive pas à uploder l'image, peut être que cela vien de la ?

ViPHP
ViPHP | 2144 Messages

22 nov. 2005, 13:40

Sois logique, tu as une portion de code qui est exécutée si l'upload fonctionne correctement, si ton upload ne fonctionne pas, la portion de code n'est pas exécutée, et le code provoquant la redirection, n'étant pas appelée, tu n'es pas redirigé.
Avant de vouloir inclure des raffinements de redirection, il serait judicieux de réaliser un upload qui fonctionne et de comprendre pourquoi il fonctionne.
Repiquer des codes c'est une chose, les comprendre pour pouvoir les integrer et les adapter en est une autre.

Eléphant du PHP | 355 Messages

22 nov. 2005, 15:36

Bonjour iclo et merci beaucoup :wink:

Pouriez vous m'aider à mieux comprendre ce code ?

ViPHP
ViPHP | 2144 Messages

22 nov. 2005, 19:31

Franchement non, avant de vouloir se lancer dans un upload tu dois apprendre les bases de l'algorithmique et les instructions élémentaire en php, sans ça, comme d'autres personnes te l'ont déja dis sur ce forum, tu vas directement dans le mur. Donc ça ne servirait à rien de te dépanner en corrigeant ton script.
Prends le temps de lire les tutoriaux ou achète un bouquin.
Bonne continuation