sur une page, j'ai:
if (!empty($_FILES['logo']['name'])) {
$dossier = 'upload/';
$fichier = basename($_FILES['logo']['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['logo']['tmp_name']);
$extensions = array('.png', '.jpg', '.jpeg');
$extension = strrchr($_FILES['logo']['name'], '.');
if(!in_array($extension, $extensions)) {
$erreur = 'ERROR you must upload the right type';
}
if($taille>$taille_maxi) {
$erreur = 'too heavy';
}
if(!empty($erreur)) {
// ...
}
}
Le problème est que si les utilisateurs veulent éditer des informations SANS télécharger un LOGO, cela soulève une erreur: 'erreur, vous devez télécharger le bon type'
Donc, si un utilisateur n'a rien mis dans la boîte de saisie pour le télécharger, je ne veux pas entrer dans ces conditions.
j'ai testé: if (!empty($_FILES['logo']['name'])
et if (isset($_FILES['logo']['name'])
mais les deux ne semblent pas fonctionner.
Des idées?
edit: peut-être que je n'étais pas si clair, je ne veux pas tester s'il a téléchargé un logo, je veux tester SI il a sélectionné un fichier à télécharger, parce que maintenant, s'il ne sélectionne pas un fichier à télécharger, php soulève une erreur indiquant qu'il doit télécharger avec le bon format.
merci.
Vous pouvez vérifier cela avec:
if (empty($_FILES['logo']['name'])) {
// No file was selected for upload, your (re)action goes here
}
Ou vous pouvez utiliser une construction javascript qui active uniquement le bouton de téléchargement/soumission chaque fois que le champ de téléchargement a une valeur autre qu'une chaîne vide ("") pour éviter la soumission du formulaire sans aucun téléchargement.
Il y a une section dans la documentation php sur gestion des fichiers . Vous allez trouver que vous pouvez vérifier diverses erreurs et l'une d'elles est
UPLOAD_ERR_OK
Value: 0; There is no error, the file uploaded with success.
<...>
UPLOAD_ERR_NO_FILE
Value: 4; No file was uploaded.
Dans votre cas, vous avez besoin d'un code comme
if ($_FILES['logo']['error'] == UPLOAD_ERR_OK) { ... }
ou
if ($_FILES['logo']['error'] != UPLOAD_ERR_NO_FILE) { ... }
Vous devriez également envisager de vérifier (et probablement de fournir une réponse appropriée à un utilisateur) d'autres erreurs diverses.
Vous devez utiliser is_uploaded_file ($ _ FILES ['logo'] ['tmp_name']) pour vous assurer que le fichier a bien été téléchargé via un POST.
Je testerais if (file_exists($_FILES['logo']['tmp_name']))
et verrais si cela fonctionne.
Ou, de façon plus appropriée (merci Baloo): if (is_uploaded_file($_FILES['logo']['tmp_name']))