Aller au contenu

Retirer une entrée dans un tableau


Sujets conseillés

Posté

Bonjour,

La question est dans le titre, je bute sur ce problème.

J'ai un tableau avec un nombre d'entrées connu (fichiers en upload), mais les valeurs de ces entrées peuvent être vides. Je souhaite donc retirer celles-ci de mon tableau. Comment cela peut-il s'effectuer, si c'est possible ?

for ($i = 0; $i < count($_FILES['my_field']['name']); $i++)
{
if ($_FILES['my_field']['name'][$i] == "") echo "entrée vide";
???
}

Merci de vos réponse,

xpatval

Posté

Tu devrais pouvoir le faire de cette manière :

<?php
foreach($_FILES['my_field']['name'] as $key => $value) {
if(empty($value))
unset($_FILES['my_field']['name'][$key]);
}
?>

Posté

Oui..mais non :rolleyes:

Donc, je me suis mal exprimé.

Le problème est alors à un niveau supérieur. Je souhaitais vérifier l'existence du nom d'un fichier à uploader, et, si celui-ci est vide, ne pas lancer la procédure d'upload.

Ce qui reviendrait à cela:

if ((empty($_FILES['my_field']['name'])) unset($_FILES['my_field']);

Est-ce d'ailleurs possible ?

Merci de ta réponse précédente.

xpatval

Posté

C'est ca :

if ((empty($_FILES['my_field']['name'])) unset($_FILES['my_field']);

voire dans ta première boucle :

if ((empty($_FILES['my_field']['name'][$i])) unset($_FILES['my_field']);

Posté

C'est là où je bloque. Car, selon mes tests, ça ne fonctionne pas.

dans la partie formulaire, j'autorise 3 upload max (j' ai dégrossi le code:

<form action="up_ins.php" method="post" enctype="multipart/form-data">
<input class="forme" type="file" name="my_field[]" />
<input class="forme" type="file" name="my_field[]" />
<input class="forme" type="file" name="my_field[]" />
</form>

Dans le fichier de récup des données du formulaire, j'effectue un test:

<?php
echo "count av = ". count($_FILES['my_field']['name']) ."<br />";
foreach($_FILES['my_field']['name'] as $key => $value)
{
if(empty($value))
unset($_FILES['my_field']['name'][$key]);
}
echo "count ap = ". count($_FILES['my_field']['name']) ."<br />";
?>

Dans le test ci-dessus, j'ai bien 3 entrées 'name', même si celles-ci sont vides, avant le UNSET.

Et je n'en ai plus qu'une, si 2 entrées 'name' sont vides, plus que 2 si l'une est vide, etc.

Maintenant, je teste différemment:

<?php
echo "count av = ". count($_FILES['my_field']) ."<br />";

Là, mon compteur est à 5. Autrement dit, dans ces entrées, doivent se retrouver le nom du fichier, sa taille, le path temporaire et le type. M'en manque un. Ah oui, le code erreur.

Et comme on ne mélange pas des choux et des carottes, si une entrée 'name' est vide, le UNSET ne marche pas.

						foreach($_FILES['my_field']['name'] as $key => $value) 
{
if(empty($value))
unset($_FILES['my_field'][$key]);
}
echo "count ap = ". count($_FILES['my_field']) ."<br />";

Count avant et après gardent la même valeur...

Bon, je teste autre chose....

xpatval

Posté

Bonjour,

Attention, ce que tu essayes d'effacer n'est pas ce que tu viens de lire.

As-tu essayé :

foreach($_FILES['my_field']['name'] as $key => $value)
{
if(empty($value))
unset($_FILES['my_field']['name'][$key]);
}

--lionel

Posté

Oui, j'ai essayé.

Mais le but premier était de retirer une entrée au tableau des fichiers téléchargeables ($_files['my_field']) si le nom du fichier ($_files['my_field']['name']) est à vide.

Si j'exécute le UNSET uniquement sur le name, l'entrée première $_files['my_field'] n'en est pas pour autant éliminé. Seule l'indice concernant le nom l'est.

xpatval

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...