Bonjour à tous,

J'ai une soucis sur une boucle qui contient une balise
<form>
.
Impossible de retrouver la variable
$_FILES du champ 'liendoc0'.


Voici la boucle en question:

$vide = 0;
             while (($tab + $vide) < 6)
                {
                    echo "[#red]<form method='post'  enctype='multipart/form-data' id='form$vide'>[/#]<tr>
                        <td>
                            [#blue]<input size='50px' type='file' name=[b]'liendoc$vide'[/b] class='lienfichier' required/>[/#]</td>
                        <td>
                            <input type='text' name='dateajtdoc$vide' required></td>
                        <td>
                            <input type='text' name='origineajtdoc$vide' required></td>
                        <td>
                            <input type='text' name='typeajtdoc$vide' required></td>
                        <td>
                            <input type='submit' value='Ajouter' class='tabajtfichier' name='ajtdoc$vide' ></td></tr></form>";
                    $vide++;

                }
            echo "</table>";


Après avoir cliqué sur mon submit, je teste toutes les variable $_POST avec
var_dump($_POST)
et je retrouve la variable générée:

'liendoc0' => string 'Penguins.jpg' (length=12)


Mais, si je teste avec
var_dump($_FILES)
, la variable est vide, pourtant, j'ai bien mon enctype dans la balise <form>.
Voila le resultat du var_dump:

array (size=0)
  empty


Sauriez-vous me dire ou j'ai fait une erreur?

Merci beaucoup!
Modifié par GnZ (24 Jul 2013 - 15:59)
Bonjour,

Peux tu nous afficher ton code pour ton input "file" et ton "form" ? Car pour le moment je ne vois que "<form>"...
Dans la boucle présentée dans le premier post.
Le form:

<form method='post'  enctype='multipart/form-data' id='form$vide'>


Et l'input file:

<input size='50px' type='file' name=[b]'liendoc$vide'[/b] class='lienfichier' required/>


Merci!
Non, enfin pas pour le moment, tu penses que ça joue?
Là je lui demande simplement d'afficher 'OK' si la variable $_FILES est définie.

Le code fonctionne, vu qu'une variable $_POST existe. Ce que je pige pas c'est pourquoi il me fait une POST a partir d'un formulaire FILE, alors que mon enctype est bon.

Surtout que dans certains formulaire d'autres pages, je n'ai eu aucun soucis!
C'est normal POST et FILES ne sont pas incompatibles et existent tous les 2 quand tu utilises un formulaire d'upload de fichier avec la méthode "POST". Ton problème ne vient pas de là. Perso je pense plus à un problème de taille de fichier et de limitation de cette même taille dans ta config PHP.

EDIT : ou alors c'est juste ce nom de champs bizarre pour ton input "liendoc$vide". Pourquoi tu as un signe $ au milieu ?
Modifié par jb_gfx (24 Jul 2013 - 16:58)
liendoc$vide ést dans une boucle.

En fait, je génère une fiche candidat pour un logiciel de recrutement.
Sur cette fiche, il y'a une tableau reprenant les différents documents qui lui sont associés avec un max de 6 fichiers.

Si la fiche ne contient que 2 fichiers par exemple, mon script génère automatiquement 4 ligne de plus vide, qui permettent l'ajout directement depuis cette fiche.

Voilà le tableau:
http://img4.hostingpics.net/pics/417435ScreenShot068.png

Donc, une fois incrémenté, la variable liendoc$vide devient liendoc0, liendoc1, liendoc2, liendoc3,etc...

Etant donné que la variable files est considérée comme vide, je n'arrive pas à executer le script associé.

Un problème de poids me parait bizarre, étant donné que je n'ai même pas le temps d'executer le script d'upload. De plus, j'ai bien fait les modifications dans mon php.ini Smiley ohwell
Modifié par GnZ (24 Jul 2013 - 17:07)
GnZ a écrit :

Un problème de poids me parait bizarre, étant donné que je n'ai même pas le temps d'executer le script d'upload. De plus, j'ai bien fait les modifications dans mon php.ini Smiley ohwell


Et tu as fais quoi comme changement ?

Le temps d’exécution en local n'a pas d'importance, quelle taille fait ton fichier ?
Dans mon php.ini j'ai:

; Whether to allow HTTP file uploads.
;  http://php.net/file-uploads
 
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;  http://php.net/upload-tmp-dir
 
upload_tmp_dir = "c:/wamp/tmp"

; Maximum allowed size for uploaded files.
;  http://php.net/upload-max-filesize
 
upload_max_filesize = 5M


Mon fichier pèse 826ko, j'ai pris une image standard des paysages windows pour le test^^
Mon dossier tmp est vide aussi.

Merci du coup de main en tout cas Smiley cligne
Modifié par GnZ (24 Jul 2013 - 17:16)
Attend... pourquoi tu génères 5 formulaires ? Il te faut un formulaire contenant 5 fois ta série de champs, mais pas 5 formulaires différents.
Tu veux dire faire ça:

 <form method='post'  action='' enctype='multipart/form-data' id='form$vide'>
            <?php
            
             while (($tab + $vide) < 6)
                {
               echo "<tr>
                        <td>
                            <input size='50px' type='file' name='liendoc$vide' class='lienfichier' required/>
                        </td>
                        <td>
                            <input type='text' name='dateajtdoc$vide' required>
                        </td>
                        <td>
                            <input type='text' name='origineajtdoc$vide' required>
                        </td>
                        <td>
                            <input type='text' name='typeajtdoc$vide' required>
                        </td>
                        <td>
                            <input type='submit' value='Ajouter' class='tabajtfichier' name='ajtdoc$vide' >
                        </td>
                     </tr>";
                    $vide++;

                }
            echo "</form></table>";



Si je fais ça, les submit prennent en compte tous les champs, Or je ne veux que les champs d'une seule ligne du tableau.

Tiens une capture ce qui se passe avec l'attribut 'required' de mon html après avoir cliquer sur un 'ajouter'
http://img4.hostingpics.net/pics/967250ScreenShot069.png
Modifié par GnZ (24 Jul 2013 - 17:29)
Je ne sais absoluement pas pour quelles raisons, mais d'un coup, ça fonctionne avec:

$vide = 0;
 
            
             while (($tab + $vide) < 6)
                {
                    echo "<form method='post'  action='' enctype='multipart/form-data' id='form$vide'>
                        <tr>
                        <td>
                            <input size='50px' type='file' name='liendoc$vide' class='lienfichier' required/>
                        </td>
                        <td>
                            <input type='text' name='dateajtdoc$vide' required>
                        </td>
                        <td>
                            <input type='text' name='origineajtdoc$vide' required>
                        </td>
                        <td>
                            <input type='text' name='typeajtdoc$vide' required>
                        </td>
                        <td>
                            <input type='submit' value='Ajouter' class='tabajtfichier' name='ajtdoc$vide' >
                           </td></tr></form>";
                    $vide++;



En testant les variables avec:

if (isset($_POST['ajtdoc0']))
            {
                var_dump($_FILES);
                var_dump($_POST);
                if (($_FILES['liendoc0']['name'] != '')) {
                
                echo 'OUIIIII';    
                    
                
                }


J'ai bien un resultat:

array (size=1)
  'liendoc0' => 
    array (size=5)
      'name' => string 'Jellyfish.jpg' (length=13)
      'type' => string 'image/jpeg' (length=10)
      'tmp_name' => string 'C:\wamp\tmp\php40D7.tmp' (length=23)
      'error' => int 0
      'size' => int 775702

array (size=4)
  'dateajtdoc0' => string 'qsdf' (length=4)
  'origineajtdoc0' => string 'qsfd' (length=4)
  'typeajtdoc0' => string 'qsdf' (length=4)
  'ajtdoc0' => string 'Ajouter' (length=7)

OUIIIII 



Merci de m'avoir accordé de votre temps, au final, je vous l'ai fait perdre pour rien^^

Mais si des gens veulent encore m'aider, j'ai un soucis avec une requête dans la section 'côté serveur'
==> http://forum.alsacreations.com/topic-20-68331-1-MySqlPhP-Probleme-de-requete.html
héhé!

Merci beaucoup
Modifié par GnZ (24 Jul 2013 - 17:50)
En fait, non, je ne sais pas ce qu'il s'est passé, ça marchait hier encore, et aujourd'hui plus moyen.

Je me demande si le cache de mon navigateur ne me pose pas quelques soucis!

Mini-truc, avec ou sans "action='...'", ça ne fonctionne plus. Je n'y comprend rien!

J'ai beau chercher sur la toile, les quelques manips qui sont censées reglée le problème ne fonctionne pas.

Ô joie du dev!
Bonjour,
Je viens me mêler de ce sujet car tu semble ignorer les fondamentaux !
POST est un array caque valeur contient UN résultat par INPUT, SELECT etc...
FILES est un array qui contient TOUT les éléments d'un fichier, taille poids emplacement etc ..
Voici un petit PHP qui devrait t'aider a mieux comprendre cela
appelles le "a.php" et testes

<?php
$message="";
$Limg="";
if (isset($_FILES['fichier'])) $LeFic=trim($_FILES['fichier']['name']);
    else $LeFic="";
if(  $LeFic!="" )
 {
  $destination="fichier_desti/";
  $extensions_ok = array ( ".jpg",".rar",".gif",".png");
  if (in_array(strtolower(substr($LeFic, -4)),$extensions_ok))
   {
   //========= bonne  extention on copie =====
      copy($_FILES['fichier']['tmp_name'],$destination.$LeFic);
   }
 }
?>
<html><body><br /><p align=center>
<br />
<form name="formulaire" method="POST"  action="a.php"  enctype="multipart/form-data" >
 <input id="fichier1"  name="fichier" type="file"  />
 <input value="Valider" name="submit" type="submit" />
</form><br />
</p>
</body></html>