Utiliser un champ de type file pour la suppression

Eléphanteau du PHP | 17 Messages

22 août 2005, 15:16

Bonjour,

Voilà j'utilise un formulaire avec différents champs, et en particulier avec un champ file pour l'upload d'un fichier. Ce formulaire est utilisé aussi bien pour l'insertion que la modification d'une entrée dans une table.

Le problème se situe dans le cas de la modification. Je voudrais qu'en indiquant le chiffre '0' dans le champ file, le fichier envoyé lors d'une insertion précédente soit supprimé (donc son lien dans la base + suppression physique). Evidemment, ce champ de type file sert aussi à mettre à jour le fichier.

Les champs utilisés en insertion ou modification doivent être identiques (sinon il m'aurait suffit dans le cas de la modification de mettre une case à cocher en plus pour proposer la suppression du fichier envoyé).

Le problème c'est que du fait du type de champ file, je ne peux récupérer '0' en utilisant les clefs name, tmp_name ou error...

Quelqu'un a une idée à me proposer ?

Merci.

Mammouth du PHP | 19672 Messages

22 août 2005, 15:36

Le champ file ne prend qu'une adresse vers un fichier.
Utilise une case à cocher avec un label "Supprimer l'image existante" et tu récupères cette case si elle est cochée et qu'aucune adresse de fichier n'a été envoyée via le champ file. Donc dans le champ de type file, tu peux rajouter un évènement onchange pour désactiver la case à cocher et inversement.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 17 Messages

22 août 2005, 16:00

Peux-tu me donner une idée du code à insérer pour activer/désactiver un champ case à cocher depuis le champ file ?
onchange=" ...

Sinon je peux bricoler avec la taille et dire que tout document 0 octet (c'est ce que ça donne si je mets '0' ou n'importe quoi...) entraîne la suppression du fichier.

Merci.

Mammouth du PHP | 19672 Messages

22 août 2005, 16:09

Si tu ne cliques pas sur le bouton [Parcourir], la variable $_FILES ne sera pas initialisée : là, tu as deux interprétations possibiles: soit on veut laisser l'image actuelle, soit on veut supprimer l'image actuelle (S,il y en a une bien entendu)

Donc dans la partie traitement, tu testes si $_FILES existe et contient quelque chose avec if(isset($_FILES)). à partir de là, tu pourrais tester la case à cocher suggérée, appelons-la suppression:
if(!isset($_FILES) && isset($_POST['suppression']))
{
    // Pas de fichier choisi et case à cochér sélectionnée : on supprime l'image existante;
}
elseif(!isset($_FILES) && !isset($_POST['suppression']))
{
    // Pas de fichier choisi et case à cocher non sélectionnée : on laisse en l'état;
}
elseif(etc...)
Est-ce que tu saisis le principe ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

22 août 2005, 17:35

Oui je vois le principe...

Par contre je vais rester sur ma méthode (suppression si le fichier fait 0 octet). C'est certes moins élégant mais ça me convient tout à fait.

Merci à toi.