Suite

Comment faire une boucle pour sélectionner par attribut?


J'essaie d'extraire un échantillon d'un fichier de géodatabase. J'ai 100800 échantillons et je dois sélectionner 28 enregistrements, essentiellement tous les 3600, je vais commencer par FID=0 et partir de là. Malheureusement, je n'ai pas réussi à le faire fonctionner. c'est ce que j'ai fait jusqu'à présent. n'importe qui peut me donner un indice, ça va être d'une grande aide.

import arcpy, sys, os Input=sys.argv[1] field=sys.argv[2] counts=sys.argv[3] output=sys.argv[4] def deleteMe(fc): si arcpy.Exists(fc ): arcpy.Delete_management(fc) return fc cursor =arcpy.da.SearchCursor(Input,field) pour la ligne dans le curseur: a=row[0] while row: x=a+3600 arcpy.MakeFeatureLayer_management(Input, deleteMe(" lyr")) arcpy.SelectLayerByAttribute_management ("lyr", "NEW_SELECTION",a) #arcpy.SelectLayerByAttribute_management ("lyr", "ADD_TO_SELECTION",x) arcpy.CopyFeatures_management ("lyr", deleteMe(output))

Que diriez-vous de simplement faire une liste des OBJECTID que vous voulez et d'en faire une requête ?

## commencer par la liste de tous les objectids all_oids = [row[0] pour la ligne dans arcpy.da.SearchCursor(Input,"OBJECTID")] ## faire la liste de chaque 3600ème objectid oids = [] pour index, oid dans énumérer( range(len(all_oids))): if index % 3600 == 0: oids.append(oid) ## make sql query qry = '"OBJECTID" IN ({0})'.format(".join(oids) ) ## traite les ensembles de données arcpy.MakeFeatureLayer_management(Input, deleteMe("lyr")) arcpy.SelectLayerByAttribute_management ("lyr", "NEW_SELECTION", qry) arcpy.CopyFeatures_management ("lyr", deleteMe(output))

Énumérer est une fonction super utile. Il itère une liste et renvoie également l'index de chaque élément. Vous l'utilisez ici pour parcourir la liste des OBJECTID et si l'index est un facteur de 3600, l'oid est ajouté à une liste. Utilisez ensuite cette liste pour créer une requête que vous pouvez appliquer à la couche d'entités.


Si aucune cible n'est spécifiée, le lien s'ouvrira dans le contexte actuel, sauf indication contraire de l'utilisateur ou du navigateur.

L'attribut cible spécifie où le document lié s'ouvrira lorsque le lien est cliqué. La valeur par défaut est la fenêtre actuelle. Si target="_blank" , le document lié s'ouvrira dans un nouvel onglet ou (sur les anciens navigateurs) une nouvelle fenêtre.

Pourquoi ouvrir dans un nouveau navigateur ?

La raison la plus courante d'utiliser `target=”_blank” est que les liens hors site s'ouvrent dans un onglet séparé. Cela permet à un utilisateur de cliquer sur une référence et d'y revenir plus tard sans quitter la page en cours. Il garde les visiteurs sur votre site plus longtemps et améliore la plupart de vos métriques : taux de rebond, conversion, pages visitées.

Ouvrir tous les liens externes dans un nouvel onglet avec JavaScript

Vous n'avez pas besoin d'ajouter manuellement target="_blank" à chaque lien de votre site. Si vous créez beaucoup de liens (ce que vous devriez faire), il est facile d'ajouter du code JavaScript à votre site et de transformer automatiquement tous les liens externes en liens _blank.

(Vous pouvez voir une forme légèrement modifiée de ce code en action sur chaque page de ce site Web.) Cette astuce nécessite jQuery, mais il y a de fortes chances que vous l'utilisiez déjà. Il est utilisé dans les frameworks et les systèmes de gestion de contenu les plus populaires, notamment WordPress, Drupal et Twitter Bootstrap. Si vous devez le faire sans jQuery, cela peut également être fait. Voici une version “plain JavaScript” :

En plus de faciliter les choses, cela nettoie considérablement votre balisage.

Raisons de ne pas utiliser `target=”_blank”

Certaines personnes soutiennent que les utilisateurs ne préfèrent pas ouvrir des liens dans un nouveau contexte de navigation. Ils pensent que cela est similaire aux publicités contextuelles et à d'autres comportements ennuyeux. Avec l'essor de la navigation par onglets, cet argument a largement disparu. La plupart des utilisateurs préfèrent ouvrir les liens dans un nouvel onglet, car cela leur permet de mettre en file d'attente des liens référencés pour une lecture ultérieure sans perdre leur contexte de navigation actuel.


2 réponses 2

Bienvenue dans l'échange Blender Stack !

Votre problème ici est que vous travaillez avec deux objets distincts. Blender ne peut pas créer une nouvelle géométrie qui se connecte aux deux objets tout en les séparant.

Pour mieux comprendre cela, voyons ce que vous avez demandé à Blender de faire et ce que Blender est capable de faire.

Dans la version 2.80, une nouvelle fonctionnalité "multi edit" a été ajoutée qui vous permet de sélectionner deux objets en mode objet et d'éditer les maillages sous-jacents en même temps. La clé ici est que les objets sont séparés. Une fois que vous quittez le mode d'édition (de travailler sur les deux en même temps), ils doivent à nouveau être séparés et ne peuvent donc être joints en aucune façon.

Maintenant, ce que vous demandez à Blender lorsque vous utilisez l'outil Bridge Edge Loops, c'est de créer de nouvelles faces entre deux edge loops. Blender est parfaitement heureux de le faire dans presque tous les cas. Cependant, lorsque nous pensons à ce que j'ai mentionné précédemment, nous verrons d'où vient le problème. Lorsque vous demandez à Blender de connecter les boucles de bord, il connecte chaque nouvelle face aux deux boucles. Mais en même temps, vous dites à Blender qu'il doit être capable de séparer ces nouveaux visages en 2 objets séparés lorsque vous quittez le mode édition. Blender est bloqué ici, c'est pourquoi vous obtenez l'erreur (qui pourrait certainement être un peu plus claire), car il n'y a aucun moyen de séparer ces faces en deux objets. Soit chaque visage appartient complètement à un objet, soit complètement à l'autre.

Pour réparer tout cela, il vous suffit de faire de vos deux cylindres un seul objet. Blender les conservera toujours comme deux cylindres, mais les traitera comme une seule entité. Pour ce faire, utilisez Ctrl + J pour joindre les objets en mode objet. Maintenant, vous avez un seul objet avec lequel travailler et Blender se fera un plaisir de relier les deux boucles.


5 réponses 5

Supposons une liste de contacts qui contient un champ de recherche nommé Province

Une fois qu'une colonne de recherche est ajoutée à la liste, son ID devient automatiquement accessible via la ressource ListItem. Par exemple, lorsque le champ nommé est ajouté à la liste, sa valeur peut être définie ou obtenue via Id propriété de l'élément de liste.

La requête suivante montre comment filtrer les éléments de liste par Identifiant du champ de recherche ( Id de province dans notre cas) :

où <ProvinceId> est un identifiant de province

Afin de filtrer par valeur de recherche, la requête doit contenir l'option de requête $expand pour récupérer les champs projetés (comme Province Title ). L'exemple suivant montre comment filtrer par valeur du champ de recherche (par titre de province dans notre cas) :


Les boucles explicites sont souvent contre-productives dans Mathematica, prenant non seulement plus de frappes, mais aussi plus de temps d'exécution. Ils sont aussi, à mon avis, plus enclins aux erreurs.

Les meilleures façons sont d'utiliser Do, Scan ou Map.

Do et Scan sont (généralement) appropriés pour les opérations qui n'accumulent pas de liste de résultats, tandis que Map et Table (une variante de Do ) sont (généralement) utilisés pour celles qui le font. La troisième méthode utilise Map (forme courte : /@ ) et accumule une liste inutile de résultats pour cette raison, il est probable qu'elle soit moins efficace en mémoire que les deux premières.

Moment moyen, en utilisant PrimeQ à la place de Print pour 10^6 itérations :


Introduction à la pensée systémique

Système. Nous entendons et utilisons le mot tout le temps. "Il n'y a aucun sens à essayer de renverser le système", pourrions-nous dire. Ou, "Ce travail devient incontrôlable, je dois établir un système. Que vous en soyez conscient ou non, vous êtes membre de nombreux systèmes - une famille, une communauté, une église, une entreprise. Vous êtes vous-même un système biologique complexe comprenant de nombreux systèmes plus petits. Et chaque jour, vous interagissez probablement avec des dizaines de systèmes, tels que des automobiles, des magasins de détail, l'organisation pour laquelle vous travaillez, etc. Mais qu'est-ce qu'un système exactement ? Comment en connaîtrions-nous un si nous en voyions un, et pourquoi est-il important de comprendre les systèmes ? Plus important encore, comment pouvons-nous gérer nos organisations plus efficacement en comprenant les systèmes ?

Ce volume explore ces questions et présente les principes et la pratique d'un domaine en croissance tranquille : la pensée systémique. Enracinée dans des disciplines aussi variées que la biologie, la cybernétique et l'écologie, la pensée systémique offre un moyen d'examiner le fonctionnement du monde qui diffère sensiblement de la vision analytique et réductionniste traditionnelle. Pourquoi une perspective systémique est-elle un complément important à la pensée analytique ? L'une des raisons est que comprendre comment les systèmes fonctionnent – et comment nous y jouons un rôle – nous permet de fonctionner plus efficacement et de manière proactive en leur sein. Plus nous comprenons le comportement systémique, plus nous pouvons anticiper ce comportement et travailler avec les systèmes (plutôt que d'être contrôlés par eux) pour façonner la qualité de nos vies.

Il a été dit que la pensée systémique est l'une des compétences de gestion clés pour le 21e siècle. Alors que notre monde devient de plus en plus étroitement imbriqué à l'échelle mondiale et que le rythme du changement continue d'augmenter, nous devrons tous devenir de plus en plus « systémiques ». Ce volume vous donne le langage et les outils dont vous avez besoin pour commencer à appliquer la pensée systémique. principes et pratiques dans votre propre organisation.


Peut-être vous êtes-vous demandé comment des machines prévisibles comme les ordinateurs peuvent générer de l'aléatoire. En réalité, la plupart des nombres aléatoires utilisés dans les programmes informatiques sont pseudo-aléatoire, ce qui signifie qu'ils sont générés de manière prévisible à l'aide d'une formule mathématique. C'est bien à de nombreuses fins, mais ce n'est peut-être pas aléatoire comme vous le pensez si vous avez l'habitude des lancers de dés et des tirages de loterie.

Offres RANDOM.ORG vrai nombres aléatoires à n'importe qui sur Internet. Le caractère aléatoire provient du bruit atmosphérique, qui à de nombreuses fins est meilleur que les algorithmes de nombres pseudo-aléatoires généralement utilisés dans les programmes informatiques. Les gens utilisent RANDOM.ORG pour organiser des dessins, des loteries et des tirages au sort, pour diriger des jeux en ligne, pour des applications scientifiques et pour l'art et la musique. Le service existe depuis 1998 et a été créé par le Dr Mads Haahr de la School of Computer Science and Statistics du Trinity College de Dublin en Irlande. Aujourd'hui, RANDOM.ORG est exploité par Randomness and Integrity Services Ltd.

Jeux et loteries

Lottery Quick Pick est peut-être le plus populaire d'Internet avec plus de 280 loteries
Keno Quick Pick pour le jeu populaire joué dans de nombreux pays
Coin Flipper vous donnera pile ou face dans de nombreuses devises
Dice Roller fait exactement ce qu'il dit sur l'étain
Playing Card Shuffler tirera des cartes de plusieurs jeux mélangés
Birdie Fund Generator créera des trous d'oiseaux pour les terrains de golf

Dessins aléatoires

Q3.1 dans la FAQ explique comment choisir un gagnant pour votre cadeau GRATUITEMENT
Le service de tirage au sort tiers est la première solution pour organiser des tirages au sort en ligne
Le guide étape par étape explique comment conserver un dessin avec le service de dessin tiers
La vidéo étape par étape montre comment tenir un dessin avec le service de dessin tiers
Le calculateur de prix indique exactement combien coûtera votre dessin
La FAQ sur les dessins répond aux questions courantes sur la conservation des dessins
Public Records montre tous les dessins terminés remontant à cinq ans
Le widget de résultat de dessin peut être utilisé pour publier vos gagnants sur votre page Web
Service de cadeaux multi-tours pour des cadeaux vidéo vérifiés

Nombres

Integer Generator crée des nombres aléatoires dans des intervalles configurables
Sequence Generator va randomiser une séquence entière de votre choix
Integer Set Generator crée des ensembles d'entiers non répétitifs
Le générateur gaussien crée des nombres aléatoires pour s'adapter à une distribution normale
Le générateur de fractions décimales crée des nombres dans la plage [0,1] avec des décimales configurables
Les octets aléatoires bruts sont utiles à de nombreuses fins cryptographiques

Listes, chaînes et cartes, oh mon dieu !

List Randomizer va randomiser une liste de tout ce que vous avez (noms, numéros de téléphone, etc.)
String Generator crée des chaînes alphanumériques aléatoires
Password Generator crée des mots de passe sécurisés pour votre Wi-Fi ou ce compte Gmail supplémentaire
Clock Time Generator choisira des heures aléatoires de la journée
Calendar Date Generator choisira des jours aléatoires sur près de trois millénaires et demi
Le générateur de coordonnées géographiques choisira un endroit aléatoire sur la surface de notre planète
Bitmaps en noir et blanc
Le générateur de codes de couleurs hexadécimaux choisira des codes de couleurs, par exemple pour les utiliser comme couleurs Web
Les fichiers prégénérés contiennent de grandes quantités de bits aléatoires téléchargeables
Bruit audio blanc pur pour la composition ou simplement pour tester votre équipement audio
Jazz Scales pour pratiquer l'improvisation pour les étudiants en guitare jazz
La courte prose générée aléatoirement de Samuel Beckett
Randomiseur de séquence de protéines d'ADN (chez Bio-Web)

Outils Web et widgets pour vos pages

Integer Widget Wizard mettra un mini-RANDOM.ORG sur votre page Web ou votre blog
Draw Widget Wizard mettra le résultat d'un dessin payé sur votre page Web ou votre blog
API HTTP pour obtenir de vrais nombres aléatoires dans votre propre code
Les lignes directrices décrivent comment éviter d'avoir des ennuis
Listes d'hôtes bannis qui ne se sont pas comportés et qui ont été bloqués

En savoir plus sur le hasard

Introduction to Randomness explique ce que sont les vrais nombres aléatoires et pourquoi ils sont intéressants
L'histoire explique comment RANDOM.ORG a commencé et où il en est aujourd'hui
De nombreux témoignages de personnes qui ont trouvé des utilisations très créatives des nombres aléatoires
Remerciements à toutes les personnes généreuses qui ont aidé
Citations sur le hasard dans la science, les arts et dans la vie en général
La couverture médiatique et les citations scientifiques répertorient les mentions imprimées et scientifiques populaires du service
Des nouvelles des derniers ajouts au site

Statistiques

Les statistiques en temps réel montrent comment le générateur fonctionne en ce moment
L'analyse statistique explique comment vous testez le caractère aléatoire des nombres aléatoires
Bit Tally montre combien d'aléatoire a été généré depuis 1998 (indice : beaucoup !)
Votre quota indique combien de bits aléatoires il vous reste pour aujourd'hui

Contact et aide

FAQ contient des réponses aux questions fréquemment posées
La newsletter apparaît à intervalles aléatoires, mais inscrivez-vous
Coordonnées au cas où vous souhaiteriez entrer en contact


8 réponses 8

  • Effacez vos cookies (si une durée est autorisée, j'essaierais "tout")
  • Videz votre cache (si une durée est autorisée, j'essaierais "tout")
  • Assurez-vous que l'heure de votre système est correcte.
  • Si rien de tout cela ne fonctionne, essayez de vous connecter avec les ateliers désactivés : http://mail.google.com/mail/?labs=0

J'ai découvert que c'était la fonctionnalité Smart Labels disponible dans Labs qui provoquait la boucle de redirection infinie. Après avoir utilisé http://mail.google.com/mail/?labs=0 pour accéder à ma messagerie, j'ai désactivé cette fonctionnalité de laboratoire. Après cela, je pouvais à nouveau accéder au courrier électronique normalement. C'est dommage que cette réponse (spécifiquement pour utiliser l'URL labs=0) ne soit répertoriée nulle part sur le site d'aide de Google Apps.

J'ai commencé à ressentir la boucle infinie lors de la connexion après avoir ajouté https://mail.google.com à ma liste de sites de confiance dans IE11 (Outils &rarr Options Internet &rarr Sécurité &rarr Sites de confiance &rarr Sites &rarr Ajouter)

Une fois que j'ai supprimé https://mail.google.com de ma liste de sites de confiance, le problème s'est résolu.

On dirait que la suppression des cookies devrait l'aider, cependant ce serait ennuyeux à faire à chaque fois que vous voulez vous connecter à votre compte Gmail.

Je vous suggère donc soit de demander à votre femme d'utiliser le navigation privée/mode incognito de votre navigateur, ou que vous créez un profil de navigateur distinct pour chacun d'entre vous (avec Chrome, vous pouvez utiliser ChromeDeck : http://lifehacker.com/5549178/chromedeck-creates-and-manages-multiple-chrome-profiles).

Alternativement, si vous êtes heureux d'utiliser un client de bureau, tel que Thunderbird, cela devrait également résoudre vos problèmes, bien qu'indirectement.

J'ai dû activer les cookies tiers pour que le mien fonctionne. Après avoir tout nettoyé et connecté, les cookies que j'avais étaient : google-analytics.com googleusercontent.com gstatic.com youtube.com

C'est donc avec cela que google vous enregistre lors de la connexion.

J'ai le même problème : sur le bureau, basculer entre les profils fonctionne bien mais sur mobile, soit j'arrive toujours à la première page du compte, soit j'obtiens des redirections infinies entre deux comptes.

La solution de contournement qui fonctionne pour moi : activez l'option "Version PC" dans les paramètres (mais vous obtenez alors une vue sur le bureau de votre boîte de réception, bien sûr).

Je l'ai corrigé en désactivant l'extension Hola en chrome.

J'ai le même problème sur mon téléphone Android lorsque je me connecte à 9 comptes Gmail. Le dernier compte Gmail X que j'ai ajouté m'achemine toujours vers le premier compte Gmail Y. Après avoir lu ce fil, j'ai effacé tous mes cookies, puis je me suis d'abord reconnecté à X. Ça a marché! J'ai ensuite ajouté la plupart des autres comptes Gmail et tous ont bien fonctionné, mais c'est peut-être parce que je me connecte maintenant à 7 comptes Gmail au lieu de 9. Je n'ai pas eu le problème initial lorsque je me suis connecté à 8 comptes Gmail, donc peut-être que 8 est le nombre maximum de comptes Gmail auxquels vous pouvez vous connecter sur les téléphones Android.


Comment faire une boucle pour sélectionner par attribut? - Systèmes d'information géographique

Comment déterminez-vous quelles sont vos priorités ?

Comment structurez-vous votre organisation pour soutenir vos résultats commerciaux?

Comment votre culture organisationnelle soutient-elle les résultats de votre entreprise ?

Comment concevez-vous votre charge de travail pour comprendre son état ?

Comment réduire les défauts, faciliter la correction et améliorer le flux de production ?

Comment atténuez-vous les risques de déploiement ?

Comment savez-vous que vous êtes prêt à supporter une charge de travail ?

Comment appréhendez-vous la santé de votre charge de travail ?

Comment appréhendez-vous la santé de vos opérations ?

Comment gérez-vous la charge de travail et les événements opérationnels ?

Comment faites-vous évoluer les opérations ?

Comment gérez-vous votre charge de travail en toute sécurité ?

Comment gérez-vous les identités des personnes et des machines ?

Comment gérez-vous les autorisations pour les personnes et les machines ?

Comment détectez-vous et enquêtez-vous sur les événements de sécurité ?

Comment protégez-vous vos ressources réseau ?

Comment protégez-vous vos ressources de calcul ?

Comment classez-vous vos données ?

Comment protégez-vous vos données au repos ?

Comment protégez-vous vos données en transit ?

Comment anticipez-vous, réagissez-vous et récupérez-vous des incidents ?

Comment gérez-vous les quotas et les contraintes de service ?

Comment planifiez-vous la topologie de votre réseau ?

Comment concevez-vous votre architecture de service de charge de travail ?

Comment concevez-vous les interactions dans un système distribué pour éviter les défaillances ?

Comment concevez-vous les interactions dans un système distribué pour atténuer ou résister aux défaillances ?

Comment surveillez-vous les ressources de charge de travail ?

Comment concevez-vous votre charge de travail pour vous adapter à l'évolution de la demande ?

Comment implémentez-vous le changement ?

Comment utilisez-vous l'isolation des pannes pour protéger votre charge de travail ?

Comment concevez-vous votre charge de travail pour résister aux pannes de composants ?

Comment tester la fiabilité ?

Comment planifiez-vous la reprise après sinistre (DR) ?

Comment sélectionner l'architecture la plus performante ?

Comment sélectionnez-vous votre solution de calcul ?

Comment choisissez-vous votre solution de stockage ?

Comment sélectionnez-vous votre solution de base de données ?

Comment configurez-vous votre solution réseau ?

Comment faites-vous évoluer votre charge de travail pour tirer parti des nouvelles versions ?

Comment surveillez-vous vos ressources pour vous assurer qu'elles sont performantes ?

Comment utilisez-vous les compromis pour améliorer les performances ?

Comment implémentez-vous la gestion financière dans le cloud ?

Gestion financière cloud

Comment surveillez-vous l'utilisation et les coûts ?

Comment déclasser les ressources ?

Comment évaluez-vous le coût lorsque vous sélectionnez des services ?

Comment atteignez-vous les objectifs de coûts lorsque vous sélectionnez le type, la taille et le nombre de ressources ?


17.13 Soumission du formulaire

Les sections suivantes expliquent comment les agents utilisateurs soumettent des données de formulaire aux agents de traitement de formulaire.

17.13.1 Méthode de soumission du formulaire

L'attribut method de l'élément FORM spécifie la méthode HTTP utilisée pour envoyer le formulaire à l'agent de traitement. Cet attribut peut prendre deux valeurs :

  • get : Avec la méthode HTTP "get", l'ensemble de données du formulaire est ajouté à l'URI spécifié par l'attribut action (avec un point d'interrogation ("?") comme séparateur) et ce nouvel URI est envoyé à l'agent de traitement.
  • post : Avec la méthode HTTP "post", l'ensemble de données du formulaire est inclus dans le corps du formulaire et envoyé à l'agent de traitement.

La méthode "get" doit être utilisée lorsque la forme est idempotente (c'est-à-dire qu'elle ne provoque aucun effet secondaire). De nombreuses recherches dans les bases de données n'ont pas d'effets secondaires visibles et font des applications idéales pour la méthode "get".

Si le service associé au traitement d'un formulaire provoque des effets secondaires (par exemple, si le formulaire modifie une base de données ou un abonnement à un service), la méthode "post" doit être utilisée.

Noter. La méthode "get" limite les valeurs des ensembles de données de formulaire aux caractères ASCII. Seule la méthode "post" (avec enctype ="multipart/form-data") est spécifiée pour couvrir l'intégralité du jeu de caractères [ISO10646].

17.13.2 Contrôles réussis

A est « valide » pour la soumission. Chaque contrôle réussi a son nom de contrôle associé à sa valeur actuelle dans le cadre de l'ensemble de données de formulaire soumis. Un contrôle réussi doit être défini dans un élément FORM et doit avoir un nom de contrôle.

  • Les contrôles qui sont désactivés ne peuvent pas réussir.
  • Si un formulaire contient plus d'un bouton d'envoi, seul le bouton d'envoi activé est réussi.
  • Toutes les cases à cocher « on » peuvent être réussies.
  • Pour les boutons radio qui partagent la même valeur de l'attribut name, seul le bouton radio "on" peut réussir.
  • Pour les menus, le nom du contrôle est fourni par un élément SELECT et les valeurs sont fournies par des éléments OPTION. Seules les options sélectionnées peuvent réussir. Lorsqu'aucune option n'est sélectionnée, le contrôle échoue et ni le nom ni les valeurs ne sont soumis au serveur lors de la soumission du formulaire.
  • La valeur actuelle d'une sélection de fichier est une liste d'un ou plusieurs noms de fichiers. Lors de l'envoi du formulaire, le Contenu de chaque fichier sont soumis avec le reste des données du formulaire. Le contenu du fichier est conditionné en fonction du type de contenu du formulaire.
  • La valeur actuelle d'un contrôle d'objet est déterminée par l'implémentation de l'objet.

Si un contrôle n'a pas de valeur actuelle lorsque le formulaire est soumis, les agents utilisateurs ne sont pas tenus de le traiter comme un contrôle réussi.

De plus, les agents utilisateurs ne doivent pas considérer les contrôles suivants comme réussis :

Les contrôles masqués et les contrôles qui ne sont pas rendus en raison des paramètres de la feuille de style peuvent toujours réussir. Par exemple:

entraînera toujours l'association d'une valeur avec le nom "mot de passe invisible" et la soumission avec le formulaire.

17.13.3 Traitement des données de formulaire

Lorsque l'utilisateur soumet un formulaire (par exemple, en activant un bouton de soumission), l'agent utilisateur le traite comme suit.

Première étape : identifier les contrôles réussis

Deuxième étape : créer un ensemble de données de formulaire

Troisième étape : encoder l'ensemble de données du formulaire

L'ensemble de données de formulaire est ensuite codé selon le type de contenu spécifié par l'attribut enctype de l'élément FORM.

Quatrième étape : envoyer l'ensemble de données de formulaire codé

Enfin, les données codées sont envoyées à l'agent de traitement désigné par l'attribut action en utilisant le protocole spécifié par l'attribut method.

Cette spécification ne spécifie pas toutes les méthodes de soumission ou types de contenu valides qui peuvent être utilisés avec les formulaires. Cependant, les agents utilisateurs HTML 4 doivent prendre en charge les conventions établies dans les cas suivants :

  • Si la méthode est "get" et que l'action est un URI HTTP, l'agent utilisateur prend la valeur de action , ajoute un `?' à celui-ci, puis ajoute l'ensemble de données de formulaire, codé à l'aide du type de contenu "application/x-www-form-urlencoded". L'agent utilisateur parcourt ensuite le lien vers cet URI. Dans ce scénario, les données de formulaire sont limitées aux codes ASCII.
  • Si la méthode est "post" et que l'action est un URI HTTP, l'agent utilisateur effectue une transaction HTTP "post" en utilisant la valeur de l'attribut action et un message créé selon le type de contenu spécifié par l'attribut enctype.

Pour toute autre valeur de action ou method , le comportement n'est pas spécifié.

Les agents utilisateurs doivent rendre la réponse des transactions HTTP "get" et "post".

17.13.4 Types de contenu de formulaire

L'attribut enctype de l'élément FORM spécifie le type de contenu utilisé pour coder l'ensemble de données de formulaire à soumettre au serveur. Les agents utilisateurs doivent prendre en charge les types de contenu répertoriés ci-dessous. Le comportement des autres types de contenu n'est pas spécifié.

Application/x-www-form-urlencoded

Il s'agit du type de contenu par défaut. Les formulaires soumis avec ce type de contenu doivent être encodés comme suit :

  1. Les noms et les valeurs de contrôle sont échappés. Les espaces sont remplacés par « + », puis les caractères réservés sont échappés comme décrit dans la [RFC1738], section 2.2 : les caractères non alphanumériques sont remplacés par « %HH », un signe de pourcentage et deux chiffres hexadécimaux représentant le code ASCII du personnage. Les sauts de ligne sont représentés par des paires "CR LF" (c'est-à-dire, '%0D%0A' ).
  2. Les noms/valeurs de contrôle sont répertoriés dans l'ordre dans lequel ils apparaissent dans le document. Le nom est séparé de la valeur par `=' et les paires nom/valeur sont séparées l'une de l'autre par `&' .

Multipart/form-data

Noter. Veuillez consulter la [RFC2388] pour plus d'informations sur les téléchargements de fichiers, y compris les problèmes de compatibilité descendante, la relation entre "multipart/form-data" et d'autres types de contenu, les problèmes de performances, etc.

Veuillez consulter l'annexe pour plus d'informations sur les problèmes de sécurité des formulaires.

Le type de contenu "application/x-www-form-urlencoded" est inefficace pour envoyer de grandes quantités de données binaires ou de texte contenant des caractères non ASCII. Le type de contenu « multipart/form-data » doit être utilisé pour soumettre des formulaires contenant des fichiers, des données non ASCII et des données binaires.

Le contenu "multipart/form-data" suit les règles de tous les flux de données MIME multipart comme indiqué dans la [RFC2045]. La définition de "multipart/form-data" est disponible dans le registre [IANA].

Un message "multipart/form-data" contient une série de parties, chacune représentant un contrôle réussi. Les pièces sont envoyées à l'agent de traitement dans le même ordre que les contrôles correspondants apparaissent dans le flux de documents. Les limites des parties ne doivent apparaître dans aucune des données. La façon dont cela est fait ne relève pas du domaine d'application de cette spécification.

Comme pour tous les types MIME en plusieurs parties, chaque partie a un en-tête "Content-Type" facultatif qui est par défaut "text/plain". Les agents utilisateurs doivent fournir l'en-tête "Content-Type", accompagné d'un paramètre "charset".

Chaque partie devrait contenir :

  1. un en-tête "Content-Disposition" dont la valeur est "form-data".
  2. un attribut name spécifiant le nom de contrôle du contrôle correspondant. Les noms de contrôle codés à l'origine dans des jeux de caractères non ASCII peuvent être codés en utilisant la méthode décrite dans la [RFC2045].

Ainsi, par exemple, pour un champ nommé "mycontrol", la partie correspondante serait précisée :

Comme pour toutes les transmissions MIME, "CR LF" (c'est-à-dire '%0D%0A' ) est utilisé pour séparer les lignes de données.

Chaque partie peut être encodée et l'en-tête "Content-Transfer-Encoding" fourni si la valeur de cette partie n'est pas conforme à l'encodage par défaut (7BIT) (voir [RFC2045], section 6)

Si le contenu d'un fichier est soumis avec un formulaire, l'entrée du fichier doit être identifiée par le type de contenu approprié (par exemple, "application/octet-stream"). Si plusieurs fichiers doivent être renvoyés à la suite d'une seule entrée de formulaire, ils doivent être renvoyés en tant que « multipart/mixed » intégré dans le « multipart/form-data ».

L'agent utilisateur doit tenter de fournir un nom de fichier pour chaque fichier soumis. Le nom du fichier peut être spécifié avec le paramètre "filename" de l'en-tête 'Content-Disposition: form-data', ou, dans le cas de plusieurs fichiers, dans un en-tête 'Content-Disposition: file' de la sous-partie. Si le nom de fichier du système d'exploitation du client n'est pas en US-ASCII, le nom de fichier peut être approximé ou codé en utilisant la méthode de [RFC2045]. Ceci est pratique pour les cas où, par exemple, les fichiers téléchargés peuvent contenir des références les uns aux autres (par exemple, un fichier TeX et sa description de style auxiliaire ".sty").

L'exemple suivant illustre l'encodage "multipart/form-data". Supposons que nous ayons la forme suivante :

Si l'utilisateur saisit "Larry" dans la saisie de texte et sélectionne le fichier texte "fichier1.txt", l'agent utilisateur peut renvoyer les données suivantes :

Si l'utilisateur a sélectionné un deuxième fichier (image) "file2.gif", l'agent utilisateur peut construire les pièces comme suit :