Ma première question sur Donc, merci. :)
Je développe un système de journalisation d'un problème de soutien pour ma société et il doit permettre de télécharger des fichiers que tous les problèmes soumis à notre base de données. Il pourrait y avoir de 0 à 6 téléchargements différents pour vérifier, ainsi qu'un problème de support. J'ai réussi à obtenir une variable précise du nombre de fichiers dans le cadre d'un champ d'entrée caché (imgcount) qui met à jour via JS chaque fois qu'une image est sélectionnée via une entrée de type = "Fichier" ou supprimé du formulaire. p>
My [Type d'entrée = "Fichier"] Les noms sont image1, image2, etc. Comme je pensais que ce serait plus facile de cette façon de les boucler. p>
lorsque le formulaire est soumis le formulaire Le code suivant prend connaissance de voir s'il existe des fichiers et des chèques de type valide (GIF / JPEG / PNG), ils peuvent donc être téléchargés en toute sécurité. Je ne suis pas trop inquiet pour les virus que le système de soutien a une belle connexion sécurisée et nous faisons confiance à nos clients. P> mais cela ne semble pas être en boucle correctement, Tout le monde a obtenu des idées comment je peux l'obtenir de boucler et de retourner correctement? p> p>
7 Réponses :
Eh bien, votre logique booléenne est ambiguë et ne fait probablement pas ce que vous voulez. Cela fonctionnera probablement mieux:
$file = $_FILES['image' . $i]; $type = $file['type']; if(($type == 'image/gif' || $type == 'image/jpeg' || $type == 'image/png') && $file['size'] < 500000)
Ce n'est pas "ambigu", ce n'est tout simplement pas ce que l'auteur a voulu. Les règles de préséance de l'opérateur résolvent toute ambiguïté dans cette expression.
Mes excuses; La façon dont j'utilisais "ambigu" était ambiguë.
Cela semble faire le travail parfaitement.
Je pense que votre Ceci signifie correctement "si le fichier est une image de (gif ou jpeg ou png) et est moins que cette taille ". P> La façon dont vous l'avez eu avant n'était probablement probablement la logique que vous avez désirée. p> p> si code> conditionné est faux. Vous avez besoin de crochets autour du premier groupe de booléens qui sont, comme celui-ci:
Ce n'est pas une réponse directe à votre question, mais vous pouvez passer des valeurs de formulaire à PHP en tant que tableau qui devrait être plus facile à boucle. in_array () code>
est également utile pour vérifier qu'une valeur est dans une liste autorisée.
html: p> php: p>
the && opérateur a un Precedence que || , donc plutôt que vous pouvez utiliser des parenthèses Pour faire respecter l'évaluation que vous avez destinée. P> Cependant, quelque chose comme celui-ci pourrait être plus propre et plus facile à maintenir / lire: p> (a ou b ou c) et d code> comme vous le souhaitez, il est en fait
a ou b ou (c et d) code>
Merci Paul, très apprécié - je suis allé avec cela à la fin.
Comme d'autres personnes ont mentionné, la façon dont vous avez regroupé votre conditionnement était fausse. Cependant, plutôt que de simplement ajouter des parenthèses, je vous suggère de séparer complètement les deux conditions; Avoir cette séparation rend le code plus lisible et suggère la hiérarchie de condition plus facilement, plus Permet à vos messages d'erreur d'être plus significatif. C'est une bonne pratique pour séparer les déclarations conditionnelles de différents types, de sorte que tous les messages d'erreur restent utiles. Si votre code a jeté une erreur telle qu'elle est, l'utilisateur n'a aucun moyen de savoir (sans avoir à FAFF sur eux-mêmes) si leur image était trop grosse ou du mauvais type. P> P>
Vous pouvez combiner tout le ["type"] == x || ['Tapez'] == y dans un seul appel à in_array ($ _ fichiers [...] ["Type"], $ autorisé)> p>
$ _ fichiers [..] ['Type'] contient des données envoyées par le client qui n'est ni vérifiée ni assainie par PHP. Si le type du fichier est de toute pertinence ne s'appuyant pas sur $ _files [..] ['Type'] ou le suffixe de $ _files [..] ['Nom']. Seuls le contenu réel compte. Si nécessaire, vous pouvez tester cela avec L'extension FileInfo ou mime_content_type () (qui est marqué comme obsolète en faveur de FileInfo) P>
Je ne pense pas que vous avez vraiment besoin d'une variable mise à jour via JavaScript. Vous pouvez utiliser PHP pour savoir combien de fichiers ont été téléchargés par Vérification du code d'erreur . Vous pouvez également gérer les téléchargements de fichiers en cochant également l'extension de fichier, car différents navigateurs peuvent souvent envoyer différents types de mime. Voici un exemple de ce dont je parle:
$accepted_files = array( 'jpg', 'png', 'gif', 'jpeg' ); if ($_SERVER['REQUEST_METHOD'] == 'POST') { foreach($_FILES as $key => $upload) { if ($upload['error'] == 0) { $file_parts = explode ('.',$upload['name']); if (in_array($file_parts[sizeof($file_parts)-1], $accepted_files)) { // This type of file is a-ok } else { // Not an accepted file type } } } }
J'aime cette méthode, merci pour le conseil. Je vais certainement utiliser cela sur un autre projet sur lequel je travaille.
+1 pour ne pas utiliser JavaScript inutile, une solution moins complexe est meilleure