5568 sujets

Sémantique web et HTML

Bonjour,

Je voudrai vous entretenir d'un détail, d'une chose établie qui n'a plus l'air de fonctionner avec certains butineurs ( safari pour ne pas le nommer )
Un petit code pour commencer...


<!-- appelons cette page formulaire.php //-->
...
<base href="url_du_site" />
...
<form action="" encotype="post/get">...</form>
...


Le sujet de cet entretien : lorsque je valide le formulaire, quel est la page appelée ?
http://www.google.fr/search?hl=fr&q=html+form+empty+action

Tous les butineurs appelent formulaire.php ( vérifié avec IE, opera, FF, Konqueror )... Tous ?
Non ! Car une société peuplée d'irrédutibles ( empecheurs de pensée en rond ) résiste encore et toujours aux faits établis. Et la vie n'est pas facile pour les simples codeurs que nous sommes...

En effet, safari appelle la page par défaut du site et non pas formulaire.php ( ce qui je l'avoue imblement est beaucoup plus logique )

Vous allez me dire : ton formulaire est valide MAIS aucun texte n'a prévu la façon qu'a un butineur de réagir
face à un attribut action vide... Je vous répondrai que c'est bien de s'efforcer de respecter l'acid test MAIS un teste basique me prouve à quel point il faut se méfier de ces affirmations "je suis le meilleur, je respecte les standards" : le fait de respecter les standards (la logique) ne doit pas faire oublier les habitudes, les recettes oh combien utiles de nos butineurs passés, présents et futures !

David
Hello,

C'est vrai que ce comportement est plutôt étrange...

Il n'empêche qu'il est préconisé de mettre, à la place d'un action vide :
<form action="<php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>"...
Ce qui règle la question. Smiley cligne
Modifié par Heyoan (19 Apr 2009 - 14:47)
Hello,

Déjà, appliquer ce type de convention je sais pas si c'est une très bonne idée. Comme le dit la spécification: «User agent behavior for a value other than an HTTP URI is undefined.»

Ensuie, en supposant qu'il y ait une convention non écrite que les navigateurs devraient suivre (ce que je comprends tout à fait quand on parle d'ergonomie, mais me semble un peu fumeux pour du développement...), le comportement de Safari me semble correct. Testé avec Safari 4 beta:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
	"http://www.w3.org/TR/html4/loose.dtd">

<html lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>Page de test</title>
</head>
<body>

<h1>Formulaires en vrac</h1>

<h2>Envoyés en <code>post</code></h2>

<form action="" method="post">
	<h3><code>action=""</code></h3>
	<input type="text" name="test1" />
	<input type="submit" value="Envoyer" />
</form>

<form action="#" method="post">
	<h3><code>action="#"</code></h3>
	<input type="text" name="test2" />
	<input type="submit" value="Envoyer" />
</form>

<form action="." method="post">
	<h3><code>action="."</code></h3>
	<input type="text" name="test3" />
	<input type="submit" value="Envoyer" />
</form>

<form action="." method="post">
	<h3><code>action="./"</code></h3>
	<input type="text" name="test4" />
	<input type="submit" value="Envoyer" />
</form>

<h2>Envoyés en <code>get</code></h2>

<form action="" method="get">
	<h3><code>action=""</code></h3>
	<input type="text" name="test5" />
	<input type="submit" value="Envoyer" />
</form>

<form action="#" method="get">
	<h3><code>action="#"</code></h3>
	<input type="text" name="test6" />
	<input type="submit" value="Envoyer" />
</form>

<form action="." method="get">
	<h3><code>action="."</code></h3>
	<input type="text" name="test7" />
	<input type="submit" value="Envoyer" />
</form>

<form action="." method="get">
	<h3><code>action="./"</code></h3>
	<input type="text" name="test8" />
	<input type="submit" value="Envoyer" />
</form>

</body>
</html>


Tout marche correctement de mon côté. Un problème avec Safari 3?

En passant, l'attribut encotype n'existe pas. L'attribut enctype existe, mais ne prend pas pour valeur "post/get", ou même "post" ou "get".

Ce sera le RTFM du jour:
http://www.w3.org/TR/REC-html40/interact/forms.html#adef-action
http://www.w3.org/TR/REC-html40/interact/forms.html#adef-enctype
Merci pour vos réponses,

Bien entendu, ce n'est pas encotype MAIS method que je voulais dire. Smiley cligne

Oui, je viens d'installer Safari beta 4 et tout semble être correcte comme vous l'avez souligné ( donc mea culpa pour la dernière version ), ce qui n'est pas le cas avec la version 3.xx
Donc Safari 4 va suivre cette convention non écrite ( bonne nouvelle ) MAIS j'avais déjà changé mon code de la même manière que me l'a indiqué Heyoan...

http://www.w3.org/TR/REC-html40/interact/forms.html#adef-action
a écrit :

This attribute specifies a form processing agent. User agent behavior for a value other than an HTTP URI is undefined.

et action="mailto:xxx@yyy.zz" non défini ? je viens de découvrir une nouvelle convention non écrite

De plus, pour ces conventions non écrites, action="" et action="#" ne font pas du tout la même chose

Je crois que le w3c a du pain sur la planche pour déjà définir l'existant avant de se lancer dans l'HTML 5

David
djaps a écrit :
Je crois que le w3c a du pain sur la planche pour déjà définir l'existant avant de se lancer dans l'HTML 5

Non, parce que en fait tout ça on s'en fout. Des action="", action="#", action="mailto:xxx@domain.tld"... si on code comme ça aujourd'hui*, il faut aller s'acheter une livre de professionnalisme fissa. Smiley lol

Il y a des usages non standards en HTML 4 qui sont plus sensibles, et qui sont justement réévalués dans le cadre de la rédaction d'HTML 5. Elle est pas belle, la vie?

---
* Ou même il y a neuf ans, tiens, la spec était publiée et la rigueur était déjà un concept inscrit dans le dictionnaire. Smiley smile
Salut,
le problème vient peut-être du fait que :

<!-- appelons cette page formulaire.php //-->
...
<base href="url_du_site" />
...
<form action="" encotype="post/get">...</form>
...

En fait, il aurait été meilleur d'indiquer :
<form action="" enctype="post/get">...</form>

(enctype au lieu de encotype ?)