url et longueur

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 : url et longueur

par Cyrano » 28 juil. 2005, 14:57

Je vais essayer de délabyrinther...
<?php
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>Formulaire</title>
</head>
<body>
<?php
if (isset($_POST['envoi']) || isset($_POST['manip']))
{
    echo("<pre>");
    var_dump($_POST);
    echo("</pre>");
    $manip = $_POST['manip'];
    $commentaires = trim($_POST['commentaires']);
    if($manip == "mise_a_jour")
    {
        /* La valur envoyée par le champ caché est "mise_a_jour, on ne traite pas les 
           données, on se contente de réafficher le formulaire avec les valeurs saisies */
        $liste = $_POST['liste'];
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="formulaire1">
<select name="liste" onchange="window.document.forms['formulaire1'].elements['manip'].value='mise_a_jour'; window.document.forms['formulaire1'].submit();">
  <option value="-1"<?php echo($liste == "-1"?" selected=\"selected\"":null); ?>></option>
  <option value="valeur1"<?php echo($liste == "valeur1"?" selected=\"selected\"":null); ?>>Valeur 1</option>
  <option value="valeur2"<?php echo($liste == "valeur2"?" selected=\"selected\"":null); ?>>Valeur 2</option>
  <option value="valeur3"<?php echo($liste == "valeur3"?" selected=\"selected\"":null); ?>>Valeur 3</option>
</select><br />
<textarea name="commentaires" cols="35" rows="10"><?php echo($commentaires); ?></textarea>
<input type="hidden" name="manip" value="traitement"><br />
<input type="submit" name="envoi" value="Envoyer" />
</form>
<?php
    }
    elseif($manip == "traitement")
    {
        /* La valeur envoyée est "traitement" : on traite les données */
    }
}
else
{
    ?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="formulaire1">
<select name="liste" onchange="window.document.forms['formulaire1'].elements['manip'].value='mise_a_jour'; window.document.forms['formulaire1'].submit();">
  <option value="-1"></option>
  <option value="valeur1">Valeur 1</option>
  <option value="valeur2">Valeur 2</option>
  <option value="valeur3">Valeur 3</option>
</select><br />
<textarea name="commentaires" cols="35" rows="10"></textarea>
<input type="hidden" name="manip" value="traitement"><br />
<input type="submit" name="envoi" value="Envoyer" />
</form>
    <?php
}
?>
</body>
</html>
Exécute ça pour comprendre et décortique puis récupère ce dont tu as besoin pour adapter ton propre code.

par donny » 28 juil. 2005, 14:13

j ai pas trop saisi le principe,
en faite le submit sa ne fonctionnera pas je pense, y me semble que j avais tester, au depart je voulais recuperer directement les valeur dans des variable de session comme ceci
$_SESSION['id']=$_GET['id'] mais sa ne fonctionnai pas car quand je clique sur la liste je recharge la page et je ne fait pas un submit.

par Cyrano » 28 juil. 2005, 10:34

Ben justement, utilises la méthode POST : tu ajoutes simplement un champ caché avec deux valeurs possibles : "traitement" ou "mise_a_jour". Au rechargement via submit() (automatique avec le onchange), tu testes la valeur du champ caché et tu ré-inscris les valeurs saisies dans leurs cases respectives. En les envoyant via le submit, tes valeurs sont dans $_POST.

Ce que tu fais, c'est que l'évènement onchange doit modifier la valeur du champ caché dynamiquement en mettant une des deux valeurs suggérées.

Ou sinon, plus simple, pas de changement de valeur, tu laisses "mise_a_jour" par défaut dans le champ caché, mais dans le bouton submit, tu mets aussi un onchange et tu modifies la valeur du champ caché en "traitement".

Est-ce que tu saisis le principe ?

par donny » 28 juil. 2005, 09:43

ce qui se passe ce n est pas que je dois remplir tout les champs
je vais donner un exemple
si je rentre un numero de serie dnas un champs texte et qu ensuite je choisi la marque de l objet dans une liste deroulante, la liste va recharger la page et le numero de serie s effacera du champs texte.
moi ce que je veux c est pouvoir toujours garder le numero de serie meme si la page se recharge en choisissant un element dans la liste

par Cyrano » 28 juil. 2005, 09:23

Selon les navigateurs, tu pourras aller jusqu'à 5 ou 600 caractères
la longueur maximale n'est-elle pas plutôt 255 caractères, et ce tous navigateurs confondus ?
En théorie oui, dans la pratique, j'ai déjà réussi avec IE à envoyer un peu plus de 700 caractères, mais ça varie d'un navigateur à l'autre

donny => je te suggère plutôt d'alimenter des champs cachés dans ton formulaire au lieu de recharger la page, ou alors tu recharges en ajoutant un this.submit();, mais si tout le formulaire n'est pas complet, tu ajoutes encore un autre champ caché avec une valeur à tester en début de page: si cette valeur vaut "x", tu ré-affiches simplement avec les valeurs des champs cachés, si elle vaut "y", tu traites le formulaire normalement.

par donny » 28 juil. 2005, 09:22

je veux recuperer les donnée de mes zone texte ainsi
<select name="fam"  onChange="location.href='<?php echo  $_SERVER['PHP_SELF'] ; ?>?fams=' + this.value + '&mod=' + document.creation.mod.value + '&ma1=' + document.creation.ma1.value + '&p1=' + document.creation.p1s.value + '&p2=' + document.creation.p2s.value + '&p3=' + document.creation.p3s.value + '&p4=' + document.creation.p4s.value + '&p5=' + document.creation.p5s.value + '&p6=' + document.creation.p6s.value + '&p7=' + document.creation.p7s.value + '&p8=' + document.creation.p8s.value + '&p9=' + document.creation.p9s.value + '&p10=' + document.creation.p10s.value"> 
comme cela meme si la personne choisi un element dans une liste deroulante et que sa recharge la page, j aurai stocker mes valeur dans des variable de session et dans la value des zone texte j affiche la variable de session.

par ouckileou » 28 juil. 2005, 09:12

Selon les navigateurs, tu pourras aller jusqu'à 5 ou 600 caractères
la longueur maximale n'est-elle pas plutôt 255 caractères, et ce tous navigateurs confondus ?

par Cyrano » 28 juil. 2005, 09:08

Utiliser la méthode get peut présenter des dangers selon le type de données envoyées et l'utilisation qui en est faire. Rien de plus facile en effet que de modifier manuellement une url dans le navigateur pour envoyer de fausses données dans un but éventuellement malveillant.

Ça, c'est le premier problème. Le second, c'est une question de longueur en effet. Selon les navigateurs, tu pourras aller jusqu'à 5 ou 600 caractères, mais il y a danger de voir ton url tronquée sans avertissement, ce qui voudrait dire que certaines données n'arriveront jamais.

Si tu nous mettais un bout de code, on verrait peut-être mieux ce que tu veux faire en plus de tes explication pour te suggérer une méthode plus appropriée au besoin.

url et longueur

par donny » 28 juil. 2005, 09:02

salut,

J ai un formulaire dans lequel j ai des liste deroulante qui possede un evenement on change.
Sur ce formulaire j ai des zone texte et le truc c est que quand je rentre des valeur dans ces zone t exte et qu ensuite je choisi un element dans la liste deroulante à ce moment la , les valeurs contenu dans les zone texte s efface.
Je pense avoir trouver une solution,
sur l evenement onchange,je passe toute mes variables dans l url et à l aide d un get je les stocke dans des variables de session pour pouvoir ensuite les afficher dans les zone textes.
Est ce trop lourd ?
Ou on passer plusieurs parametre dans l url sans probleme ?

Merci