1seul champ upload

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 : 1seul champ upload

par Truc » 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"

re 1seul champ

par tilillois » 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:

Re: re 1seul champ

par Truc » 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.

re 1seul champ

par tilillois » 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:

re 1seul champ

par tilillois » 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

par Truc » 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>

re 1seul champ

par tilillois » 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

upload

par tilillois » 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:

par Cyrano » 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]

re 1seul champ

par tilillois » 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

par Cyrano » 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...

re 1seul champ

par tilillois » 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>

1seul champ upload

par tilillois » 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