Comment forcer la taille d'une case "text" ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment forcer la taille d'une case "text" ?

par mikyvienne » 21 déc. 2006, 17:20

merci, je vais regarder ca de pres, mais la ca va etre les vacances...
Donc ne t'inquiete pas si je repond pas dessuite

par Cyrano » 21 déc. 2006, 14:30

Bon, on va partir d'un formulaire. Voici un exemple de formulaire un peu complexe, mais un seul et unique formulaire, enregistre ça et fais le afficher pour voir ce que ça donne. Rien n'est fonctionnel bien entendu, c'est juste pour te montrer une manière de procéder.

Ensuite, jette un coup d'oeil approfondi dans le code :
<?php
/* Code de récupération des valeurs */
date_default_timezone_set("Europe/Paris");
$datejour = date("d m Y");
$heurecourante = date("H : i");

echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Exemple de formulaire</title>
<style type="text/css">
/* <![CDATA[ */
#monform {
    border: 3px double #000;
    padding: 2em;
}
#monform fieldset {
    padding-bottom: 0.5em;
    border: 1px solid #000;
}
/* ]]> */
</style>
<script type="text/javascript">
/* <![CDATA[ */
function majlisteA2(valeur)
{
    /* code de la fonction pour mettre à jour la seconde 
       liste de la première paire de listes liées */
}

function majlisteB2(valeur)
{
    /* code de la fonction pour mettre à jour la seconde 
       liste de la deuxième paire de listes liées */
}
/* ]]> */
</script>
</head>
<body>
<p>Nous sommes le : <?php echo($datejour); ?><br />
Il est : <?php echo($heurecourante); ?><br />
.....</p>
<form action="#" method="post" id="monform">
  <fieldset>
    <legend>Choix de la première paire de listes</legend>
    <label for="listeA1">Sélectionnez un élément : </label>
    <select name="listeA1" id="listeA1" onchange="majlisteA2(this.value);">
      <option value="A1_choix1">A1_choix1</option>
      <option value="A1_choix2">A1_choix2</option>
      <option value="A1_choix3">A1_choix3</option>
      <option value="A1_choix4">A1_choix4</option>
    </select>
    <label for="listeA2">Choisissez un autre élément : </label>
    <select name="listeA2" id="listeA2">
      <option value="A2_vide">-----------</option>
    </select>
  </fieldset>
  <fieldset>
    <legend>Choix de la seconde paire de listes</legend>
    <label for="listeB1">Sélectionnez un élément : </label>
    <select name="listeB1" id="listeB1" onchange="majlisteB2(this.value);">
      <option value="B1_choix1">B1_choix1</option>
      <option value="B1_choix2">B1_choix2</option>
      <option value="B1_choix3">B1_choix3</option>
      <option value="B1_choix4">B1_choix4</option>
    </select>
    <label for="listeB2">Choisissez un autre élément : </label>
    <select name="listeB2" id="listeB2">
      <option value="B2_vide">-----------</option>
    </select>
  </fieldset>
  <fieldset>
    <legend>Autres valeurs</legend>
    <label for="champC1">Incrivez quelque chose : </label>
    <textarea name="champC1" id="champC1" rows="10" cols="50" /></textarea><br />
    <label for="champC2">Incrivez autre chose : </label>
    <input type="text" name="champC2" id="champC2" value="" />
  </fieldset>
  <p>
    <input type="submit" name="envoi" id="envoi" value="enregistrer" />
  </p>
</form>
</body>
</html>

par mikyvienne » 21 déc. 2006, 12:52

Que je melange, ca, ca ne m'etonnerai pas
Alors moi vouloir faire un truc comme ca :
Image

A la ligne : "selectionnez une societe" on a les 2 listes imbriquées:
Le choix de la societe donne la liste des user de cette societé.

Ensuit en dessous "precisez" la demande" permet de renseigner la futur demande d'intervention.
Ce sont des listes deroulantes de choix possible : pour la classification, le type, l'intervenantdont =>je recupere les données en interrogeant la BdD

le detail est un espace de texte a taper

Donc tout ca doit passer dans une requete sql pour alimenter une table,

De plus la date et l'heure en haut de page passe aussi en parametre
et reste a ajouter une date d'intervention a entrer a la main mais la faut que je regarde pour le formatage....

la societe, l'user, l'intervenant sont des FK pour cette table

est-ce plus clair ?

par Cyrano » 20 déc. 2006, 19:44

Je crois que tu mélanges pas mal de choses : le fait d'avoir tes listes dynamiques dans le même formulaire que les autres champs ne t'oblige absolument pas à utiliser toutes les données saisies pour faire la mise à jour de la seconde liste. J'ai un peu de mal à visualiser ce que tu essayes de faire :-k

par mikyvienne » 20 déc. 2006, 19:23

la version AJAX me fait l'effet d'une usine a gaz, mais efectivement si on plein de liste a consulter et a lier sur une page c'est surement LA solution

Pour mon truc, la ou ca coince c'est le passage de tout les parametre recuperer dans la page a une requete SQL
On est bien obligé d'avoir un formulaire pour recharger la page pour que la 2eme liste puisse "exister" ? sinon le fait de selectionne un "truc" dans la premiere ne fera pas apparaitre la 2nd
apres comment je fait pour que les parametre selectionné dans les autre liste PLUS ceux selectionné dans les 2 liste imbriqué passent TOUS dans une requette sql ? me faut bien un second formulaire non ?
ou alors ok mais faut me dire comment et ou je place la requette sql

par Cyrano » 20 déc. 2006, 18:44

Ce que je ne comprends pas, c'est cette obligation que tu as de faire deux formulaires ? Même si tu as des listes liées dans une partie, tu pourrais tout avoir dans un seul formulaire.

Le principe de fonctionnement avec AJAX : Tu as une page coté client, avec un JavaScript, toujours coté client et un script PHP coté serveur :
- dans la page coté client, tu sélectionnes un élément de la première liste :
- La balise <select> contient un gestionnaire d'évènement qui va appeler une fonction du JavaScript mentionné plus haut;
- cette fonction va récupérer la valeur sélectionnée dans la première liste : si elle est valide, elle va appeler une autre fonction qui va créer un objet XmlHTTPRequest;
- Cet objet XHR va permettre à JavaScript d'envoyer une requête vers le serveur sans recharger la page. Cette requête va être envoyée vers le script PHP mentionné plus haut comme si on appelait une page php avec des paramètres;
- le Script PHP va récupérer ces paramètres, exécuter une requête SQL, récupérer le retour et le renvoyer vers le client à l'objet XHR;
- l'objet XHR va recevoir les données retournées et quand tout sera bien reçu, il y aura appel d'une fonction JavaScript pour mettre à jour la seconde liste en utilisant innerHTML.

Alors tout ça ne prend que quelques fractions de secondes selon la vitesse du réseau, mais schématiquement, c'est le déroulement avec AJAX.

par mikyvienne » 20 déc. 2006, 18:03

pour l'AJAX, non ai pas bien compris
pour l'histoire des formulaire..
donc moi m'en faut 2 dans la meme page, le premier de tes listes imbriqué et le 2eme de mes liste de choix
Mais que devienne les données du premier formulaire ?
comment les passer au 2eme formulaire pour qu'en fait a la fin en cliquant sur envoyé ca passe les données des 2 formulaire a une autre page (ou a la base)
N'ayant pas non plus des liste phenomenale, je ne pense pas que l'AJAX m'apporte bcp, et puis comme je le comprend pas bien c'est peut etre pas une bonne idée de le mettre en place pour le moment si je peu faire ca plus simplement

par Cyrano » 19 déc. 2006, 14:45

-1- En mettant <?php echo($_SERVER['PHP_SELF']); ?>, on a pas besoin de mettre l'url de la page courante, donc on peut éventuellement déménager le formulaire de place, ça marchera toujours mais effectivement, ça va recharger la page puisque l'url est celle de la page en cours. Tu peux mettre l'url en dur si tu préfères, vers la page elle-même ou une autre page.

-2- On peut parfaitement avoir plusieurs formulaires dans une même page : ce qui est interdit, c'est de les imbriquer. Ce que je t'ai expliqué, c'est que chaque formulaire est indépendant des autres. Donc envoyer les données en cliquant sur le bouton d'un des formulaire va expédier les données de ce formulaire uniquement, pas celles des autres formulaires éventuellement présents dans la page.

-3- Sur la méthode Ajax, vas-y une étape à la fois : qu'est-ce que tu ne comprends pas ? As-tu compris le fonctionnement général du système ?

par mikyvienne » 19 déc. 2006, 14:39

:twisted:
Bon alors deja je compren pas bien la method ajax ca me depasse de bsp
Et ensuite je n'y arrive decidement pas et ca me GONFLE violement
le fait de faire un :

Code : Tout sélectionner

<?php echo($_SERVER['PHP_SELF']); ?>
dans un form, c'est ca qui fait que la page se recharge toute seule ?
Alors que de mettre un "pagemachin.php" enverra les donnée vers une autre page, on est d'accord ?
De plus il ne peu y avoir qu'un seul formulaire dans une page ?
Si oui, je ne vois pas comment faire
En plus je n'arrive pas a inserer au bon endroit la requette vers la base pour la remplir (Insert into )
Oui je sais je suis un manche mais j'en suis conscient, ceci dis ca m'aide pas |*()

par mikyvienne » 18 déc. 2006, 18:25

Ok merci je vais aller voir
je te dirai apres si c'est bon ;)

par Cyrano » 18 déc. 2006, 17:02

Mais tu ne fais qu'un seul formulaire et même s'il a 250 champs, tu pourrais n'avoir qu'une seule liste dynamique qui se rechargerait sans que ça affecte le reste du formulaire., donc tous tes champs doivent se trouver entre un seul <form> et un seul </form>

J'ai mis à jour le tuto sur les listes dynamiques liées : j'y ai ajouté une méthode AJAX qui conviendrait peut-être mieux à ton système parce que plus simple et sans rechargement de page. Jettes-y un coup d'oeil, ça résoudra peut-être bien ton problème :-k

par mikyvienne » 18 déc. 2006, 11:42

Bon ca j'avais cru comprendre
Mais je vois pas bien comment faire
C'est pas le type de formulaire pour les liste dependante et les autres
il faut bien garder le formulaire de recharge de page pour qu'apres avoir choisit dans la premiere liste la 2eme apparaisse?
Et donc si je n'agit pas sur le bouton envoyé, ces données sont toujours en memoire ?
Mais apres mes autre liste, je ne parviant pas a stocker leur données
C'est pas simple a expliquer parceque je ne sais pas ou ca plante
c'est soit le formulaire qui ne gere pas les autre liste, soit le bouton qui n'envoie que les 2 premier parametre
parceque dans l'etat actuel des chose
les 2 liste interdependante marchent bien, apres je choisit dans mes autre listes, et quand je clic sur le bouton envoyé, ca e a"zero" mes autre liste, ca ne touche pas au 2 premiere et ca n'envoie rien
Ca me laisse penser en fait que le bouton n'agit pas sur l'ensemble du formulaire

par Cyrano » 18 déc. 2006, 10:57

On ne peut envoyer qu'un seul formulaire à la fois, donc si tu as plusieurs formulaires sur la même page, c'est celui dont tu cliqueras le bouton qui enverra des données, celles des autres formulaires resteront là.

CQFD : il faut regrouper tes formulaires en un seul et unique formulaire si tu veux TOUT envoyer.

par mikyvienne » 18 déc. 2006, 10:00

heuuuuu
Sans vouloir te vexer j'ai pas tout compris là
J'ai effectivement une page qui se recharge sur elle meme comme dans TON tuto des liste deroulante liees, mais apres avec le reste de mes listes qui ne sont pas liées ????
que la selection dans la premiere liste recharge la page et affiche la 2eme liste ok, c'est parfait ca
Mais si je ferme le <form> a ce moment la, les variable qui sont dedans resteraont dans la page ?
Elle ne seraont pas envoyé vers une autre pages meme si j'ai un autre form post apres ?
si ?

par Cyrano » 17 déc. 2006, 22:04

Si ta page se recharge sur elle même : comment gères-tu ce qui est affiché ? En testant ce qui a été envoyé et ce qui ne l'a pas été. Donc si au rechargement tu as une valeur spécifique, tu as une instruction qui va faire ou non telle action comme par exemple une manipulation de données avec MySQL : ça ne te semble pas clair ?