Page 1 sur 1

1seul champ upload

Posté : 16 avr. 2006, 18:22
par tilillois
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

re 1seul champ

Posté : 16 avr. 2006, 18:24
par tilillois
<?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>

Posté : 16 avr. 2006, 18:25
par Cyrano
Modération : tilillois, voudrais-tu jeter un coup d'oeil sur les règles du forum et en particulier l'article 3...

re 1seul champ

Posté : 16 avr. 2006, 18:30
par tilillois
dsl pour le script si c de ça que tu parle
j'ai fait un copier collé , ça a donné ça

Posté : 16 avr. 2006, 18:40
par Cyrano
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]

upload

Posté : 16 avr. 2006, 18:48
par tilillois
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:

re 1seul champ

Posté : 16 avr. 2006, 19:25
par tilillois
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

Posté : 16 avr. 2006, 19:33
par Truc
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>

re 1seul champ

Posté : 16 avr. 2006, 21:40
par tilillois
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

re 1seul champ

Posté : 16 avr. 2006, 22:07
par tilillois
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:

Re: re 1seul champ

Posté : 16 avr. 2006, 22:18
par Truc
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.

re 1seul champ

Posté : 16 avr. 2006, 23:05
par tilillois
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:

Posté : 17 avr. 2006, 00:44
par Truc
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"