1seul champ upload

Eléphant du PHP | 124 Messages

16 avr. 2006, 18:22

bonjour
apres plusieur manip j'ai quand meme reussi a faire fonctionné mn script upload
maintenant 2 petit probleme reste encore a resoudre

1: sur les deux champs un seul est pri en compte
2: apres avoir upload je m'aperçois que le nom du fichier et tronqué

ex : photo1.jpeg donne photo1.jpeg
photo2.jpeg donne photo_.jpeg
je place le script si qlq1 a une idée

merci

Eléphant du PHP | 124 Messages

16 avr. 2006, 18:24

<?php

if(isset($_FILES['photo']))
{
  // params
  unset($erreur);
  $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
  $taille_max = 100000;
  $dest_dossier = '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-1]+)/i', '_', $dest_fichier);
    // copie du fichier
    move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
  }
}

?>
<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="30.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>
<p><label for="photo_2">Photo 2 :</label><input type="file" name="photo_2" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>
</body>
</html>
Modifié en dernier par tilillois le 16 avr. 2006, 18:53, modifié 3 fois.

Mammouth du PHP | 19672 Messages

16 avr. 2006, 18:25

Modération : tilillois, voudrais-tu jeter un coup d'oeil sur les règles du forum et en particulier l'article 3...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 124 Messages

16 avr. 2006, 18:30

dsl pour le script si c de ça que tu parle
j'ai fait un copier collé , ça a donné ça

Mammouth du PHP | 19672 Messages

16 avr. 2006, 18:40

Non, c'est pas de ça que je parle : édite ton message et encadre le code avec des balises : sélectionne la partie code et ensuite, clique sur le bouton [php] ou [code]
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 124 Messages

16 avr. 2006, 18:48

viens de voir comment on faisait , je savais pas , si ya moyen que je le suprime et le refaire je fais ça de suite
:wink:

Eléphant du PHP | 124 Messages

16 avr. 2006, 19:25

bon ben pour le tronquage des non de fichier j'ai suprimer quelques lignes
$dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier);
je vois pas d'autre solution pour le moment
si qlq1 a une solution
merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 avr. 2006, 19:33

pour le tronquage c'est cette ligne la responsable :
$dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier);
Pour le 2ème champ effectu ce test d'affichage tu comprendra par toi même:
<pre>
Champ 1
<? var_dump($_FILES['photo']); ?>
</pre>

<pre>
Champ 2
<? var_dump($_FILES['photo_2']); ?>
</pre>

/!\ 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 | 124 Messages

16 avr. 2006, 21:40

bon voila g mis ton sript et ça me donne ça
Champ 1 
array(5) {
  ["name"]=>
  string(12) "Photo 44.jpg"
  ["type"]=>
  string(11) "image/pjpeg"
  ["tmp_name"]=>
  string(14) "/tmp/phpaiR2VY"
  ["error"]=>
  int(0)
  ["size"]=>
  int(40775)
}
 

 
Champ 2 
array(5) {
  ["name"]=>
  string(12) "Photo 59.jpg"
  ["type"]=>
  string(11) "image/pjpeg"
  ["tmp_name"]=>
  string(14) "/tmp/phpNFldVV"
  ["error"]=>
  int(0)
  ["size"]=>
  int(52096)
}
comme je l'avais deja dit dans un autre msg je debute en php donc pas trop evident tous ça
mais je pense que mon script dorigine si desous ne designe qu'un seule label input, alors je me dmeande si en le doublan avec photo2 ça pourrai marché
if(isset($_FILES['photo']))
{
  // params
  unset($erreur);
  $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
  $taille_max = 100000;
  $dest_dossier = '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-z]+)/i', '', $dest_fichier);
    // copie du fichier
    move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
je sais pas si je me suis bien exprimé ,en attendan je fais des essai on vera bien
pour le tronquage je me doutaique ct ça , pour ça que je l'ai suprimé mais je fait des esai aussi en modifian la ligne car ya qlque chose qui me turlupine

la premiere photo n'est pas tronqué juste les suivante sauf si c pas une photo avec un chiffre
photo1.jpeg normal
photo2.jpeg =photo_.jepg
et si j'upload photo3.jpeg ça me remplace la photo2
a n'y rien comprendre mais je persite suis tetu :wink:
encore merci

Eléphant du PHP | 124 Messages

16 avr. 2006, 22:07

pour le tronquage c bon g trouvé

fallait faire
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '', $dest_fichier);
au lieu de
$dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '', $dest_fichier);
ya des moments c vraiment trop con
:lol:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 avr. 2006, 22:18

mais je pense que mon script dorigine si desous ne designe qu'un seule label input, alors je me dmeande si en le doublan avec photo2 ça pourrai marché
Voilà c'est bien ça que j'ai voulu te faire remarquer.

boucle sur ton code 2 fois en remplaçant:
les attributs name par "photo1" pour le 1er champ et "photo2" pour le 2ème.
Puis remplace dans le code:
$_FILES['photo'] 
par
$photo = 'photo'.$i;
$_FILES[$photo]
avec la boucle:
for($i=0;$i<3;$i++)
devrait fonctionner.

/!\ 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 | 124 Messages

16 avr. 2006, 23:05

j'ai bien essayé t code mai j'ai a chaque fois un message d'erreur avec la boucle
g donc doblé tous le code pour voir et la ça marche mais ça fait un peu cafouy je vais quand meme réessayé avec ton code en diffrente façon vais bien finir par trouvé

pour ce que j'ai fait voila ce que ça donne
<?php

if(isset($_FILES['photo']))

{
  // params
  unset($erreur);
  $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
  $taille_max = 100000;
  $dest_dossier = '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 ? -->
<?php 
if(isset($erreur)){
  echo '<p>', $erreur ,'</p>';
}
?>
<?php

if(isset($_FILES['photo1']))

{
  // params
  unset($erreur);
  $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
  $taille_max = 100000;
  $dest_dossier = 'photos/';
  // vérifications
  if( !in_array( substr(strrchr($_FILES['photo1']['name'], '.'), 1), $extensions_ok ) )
  {
    $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';  
  }
  elseif( file_exists($_FILES['photo1']['tmp_name']) 
          and filesize($_FILES['photo1']['tmp_name']) > $taille_max)
  {
    $erreur = 'Votre fichier doit faire moins de 500Ko !';
  }
  // copie du fichier
  if(!isset($erreur))
  {
    $dest_fichier = basename($_FILES['photo1']['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['photo1']['tmp_name'], $dest_dossier . $dest_fichier);
  }
}


?>
<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="30.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="photo1">Photo :</label><input type="file" name="photo1" /></p>
<p><label for="photo">Photo 2 :</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>
je sais c pas joli joli ,men voulai pas suis debutant

:wink:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 avr. 2006, 00:44

C'est aussi bien, c'est fonctionnel :lol:

Mais je pensais plus à un truc du style:
for($i=1;$i<3;$i++)
{
	$photo = "photo".$i;
	if(isset($_FILES[$photo]))
	
	{
	  // params
	  unset($erreur);
	  $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
	  $taille_max = 100000;
	  $dest_dossier = 'photos/';
	  // vérifications
	  if( !in_array( substr(strrchr($_FILES[$photo]['name'], '.'), 1), $extensions_ok ) )
	  { 
	  	...
	  	
	  	    // copie du fichier
	    move_uploaded_file($_FILES[$photo]['tmp_name'], $dest_dossier . $dest_fichier);
	  }
	} 
}
Pour 2 champs file "photo1" et "photo2"

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