Probleme sur un Script multi upload, Tableau

Eléphanteau du PHP | 18 Messages

08 janv. 2011, 22:04

Salut tout le monde , j'ai parcouru les tutos , le forum , j'essaye de comprendre , je commence a saisir la logique , je réussi à gérer les valeurs des tableaux , mais là on m'a filé un script de multi-upload , je l'ai déjà personnalisé pour entrer le nombre de fichiers à uploader , tout marche , SAUF , que mon but au final n'est pas le simple upload ( qui fonctionne très bien ) mais la récupération du nom des images envoyées , ainsi que le nom dynamique d'un formulaire hidden qui au final me donnera le nom de la table dans laquelle sera stockée mon image.

j'ai indiqué dans le script via de beaux ////// les lieux stratégiques pour moi

1/ Dans le premier cas , j'ai fait un input en hidden qui récupère la valeur $x de la boucle for qui permet d'afficher le nb de champs input file désiré , qui s'incrémente et qui me donne surtout un name égal au nom de la table ou sera stockée l'image , image_1 , image_2 etc ...


2/ Il s'agit de la zone d'affichage des fichiers , leur nom etc ... au final je voudrai les récupérer dans un input hidden avec un bouton pour injecter en base , pour cela il me faut récupérer la valeur du name="img[]"
Je réussi à afficher le tableau , mais la zone de résultat est prise dans un "foreach" et j'ai de gros pb d'affichage , si j'ai 6 images envoyées , j'ai les 6 lignes du tableau sous le nom de la premiere image , de la 2eme etc ...

Là je bloque depuis 2 jours , le pire c'est que je sens que je ne suis pas loin , mais j'y suis pas !

Donc mon but final ,
Avoir un ligne par fichier envoyé visible avec le nom de l'image envoyée , dessous en hidden un form avec 2 input , pour value , le nom de l'image , et la valeur "img[]" du form hidden que j'ai mentionné dans le paragraphe 1/

Merci déjà à ceux qui vont prendre de leur temps pour me venir en aide ;) , je ne vous demande pas de tout faire , j'ai envie de comprendre , si on pouvait me conseiller dans ce cas précis , j'aurai déjà matière a cramer le reste des neurones de mon cerveau !


Voici mon code :
<?php
function FILE_UPLOADER($file_types_array=array('jpg','gif','png','bmp','jpeg'),

$max_file_size=1048576, $upload_dir="../../upload/")
									{
$num_of_uploads=$_POST['nombre'];
  if(!is_numeric($max_file_size)){
    $max_file_size = 1048576;
  }
  $max_file_size_Mo = $max_file_size/1048576;
  if(!isset($_POST['submitted'])){
    $form = '<center><form action="" method="post" enctype="multipart/form-data">
    Telechargement de fichier:<br /><br /><input type="hidden" name="submitted" value="TRUE" id="'.time().'">
                              <input type="hidden" name="MAX_FILE_SIZE" value="'.$max_file_size.'">';
    for($x=0;$x<$num_of_uploads;$x++){
          $form .= '<input type="file" name="file[]"><font color="red">*</font><br /><br />
///////////////////////////////////////////////////////////////////////////////////////
// Mon input Hidden qui recupère la valeur $x de la boucle for 
           	        <input type="texte" name="img[]" value="image_'.($x+1).'"><br /><br />';	  
///////////////////////////////////////////////////////////////////////////////////////
    }
    $form .= '<input type="submit" value="Telecharger"><br /><font color="red">*</font>
               Type(s) de fichiers autorisés: ';
    $y=count($file_types_array);
  for($x=0;$x<$y;$x++){
      if($x<$y-1){
        $form .= $file_types_array[$x].', ';
      }else{
        $form .= $file_types_array[$x].'.';
      }
    }
    $form .= '</form></center>';
    echo($form);
  }else{
    foreach($_FILES['file']['error'] as $key => $value){
      if($_FILES['file']['name'][$key]!=""){
        if($value==UPLOAD_ERR_OK){
          $origfilename = $_FILES['file']['name'][$key];
          $filename = explode('.', $_FILES['file']['name'][$key]);
          $filenameext = $filename[count($filename)-1];
          unset($filename[count($filename)-1]);
          $filename = implode('.', $filename);
          $filename = substr($filename, 0, 15).'.'.$filenameext;
          $file_ext_allow = FALSE;//par mesure de securité on suppose l'extenion du fichier fausse
      //verifions si notre fichier fait partie des types autorisés
      if(false !== ($iClef = array_search($filenameext, $file_types_array))) {
 $file_ext_allow = TRUE;
}
         if($file_ext_allow){
            if($_FILES['file']['size'][$key]<$max_file_size){
              if(move_uploaded_file($_FILES['file']['tmp_name'][$key], $upload_dir.$filename))
{
///////////////////////////////////////////////////////////////////////////////////////
//// Voila les 2 lignes qui permettent d'afficher le nom des fichiers avec hyperlien , 
echo ('Transfert de fichier effectué avec succès. 
<a href="'.$upload_dir.$filename.'" target="_blank">'.$filename.'</a><br />');
///////////////////////////////////////////////////////////////////////////////////////


 
                      /*evidemment plutot que d'afficher ici le lien vers le fichier uploader
			  sur le serveur vous pouvez proceder à une redirection vers une autre page*/
              }else{
 echo('Une erreur est survenue lors du transfert de '.'<strong>'.$origfilename.'</strong><br />');
              }
            }else{
 echo('La taille du fichier '.''.$origfilename.''.' excède les '.$max_file_size_Mo.' Mo autorisé(s)');
            }
          }else{
 echo('Le fichier '.''.$origfilename.''.'  a une extension invalide, ERREUR DE TRANSFERT !<br />');
          }
        }else{
          echo('Une erreur est survenue lors du transfert de '.'<strong>'.$origfilename.'</strong>');
        }
      }
    }

  }
}
       // on affiche le formulaire
     echo '<FORM METHOD="post">'; 
      // on affiche tous les champs du formulaire
     echo 'Combien d\'image voulez vous uploader: <INPUT TYPE="text" name="nombre"><br />'; 
 
     echo '<INPUT TYPE="submit" NAME="submit" VALUE="Envoyer">'; 
     echo '</FORM>'; 
// execution de la fonction
FILE_UPLOADER();
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 janv. 2011, 23:02

salut,

je n'ai pas compris ce que tu souhaite faire.

si c'est afficher un formulaire c'est relativement simple il suffit de le déclarer avant le foreach (<form ...>) et plutot que d'afficher le lien tu met les input hidden comment tu le souhaite. après le foreach tu clos de la fomulaire.

Par contre je te déconseil fortement d'utiliser un nom de table dans un formulaire (d'ailleur je vois pas pourquoi avoir une table différente par image, je pense que tu confond, base, table et tuple).
La base contient plusieurs tables
une table contient des tuples (ou ligne, ou enregistrement ou surement autre chose ;))


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 18 Messages

09 janv. 2011, 00:29

a l heure actuelle une fois les fichiers uploadés j'ai ce resultat :
Transfert de fichier effectué avec succès. comingsoona.png
Transfert de fichier effectué avec succès. participants.png
Je voudrai pouvoir , pour chacune de ces ligne , afficher le value du formulaire caché en tout début qui est comme ça
           	        <input type="texte" name="img[]" value="image_'.($x+1).'"><br /><br />';	  
ce qui donnerait au final

Transfert de fichier effectué avec succès. comingsoona.png , cette image ira dans la colonne image_1
Transfert de fichier effectué avec succès. participants.png , cette image ira dans la colonne image_2
Là dans l'immédiat l'affichage de la colonne ( et pas la table , tu as raison ) , m'indique que je recupere bien la variable me permettant de constituer son nom , ainsi je peux apres la mettre dans form hidden avec a la fin un submit pour saisir les noms des images dans la bdd grace au nom du fichier et au nom de ma colonne concernée !!

Eléphanteau du PHP | 18 Messages

09 janv. 2011, 02:34

c'est bon j'ai réussi , comme tu l'as conseillé, j'ai mis un input dans le foreach , le 2eme probleme c'est que j'effectué une boucle for avec une variable dont je n'avais plus la valeur , j'ai donc fait un form hidden au tout debut , qui me poste cette donnée , ensuite j'ai eu un autre probleme , mais la c'est réglé , la valeur de départ de ma boucle for , devait être juste avant le foreach , ça parait tjr logique apres coup , mais pendant , heuuuu :D

merci en tout cas !! :)