Test if (isset())

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 : Test if (isset())

par sadeq » 29 mars 2007, 13:09

J'ai édité mon post entre temps :wink:

Mais j'en profite pour insister sur le fait de ne pas faire l'amalgame entre javascript et php

Quand tu parles d'échange de données mère/fille tu parles de ton formulaire HTML et le popup que tu ouvres, cela ne concerne pas php et donc pas le postage (le ISSET ici est obsolète)

En l'occurence, n'espère pas qu'un éventuel ISSET placé dans la page "pageFille.php" puisse attraper quelque POST que se soit. Car son appel a été effectué par javascript par un window.Open en tant que popup ; Et non en passant par un submit de formulaire.

Un popup ne reçoit pas le post. Mais en revanche il peut accèder quand il est "Open" aux champs du parent.

Re

par AbdL » 29 mars 2007, 13:03

En réalité, le test du isset que je fais est le suivant:
if (isset($_POST['load'])
Cen 'est donc ppas la présence du champ que je teste, mais j'arrive bien à échanger des infos entre mère et fille.
Je veux au fait refaire le teste après modification du champ.
Merci pour ta réponse.

par sadeq » 29 mars 2007, 12:48

Parlons d'abord du problème de ISSET.

Je tiens à appuyer la réponse de Ryle en rappelant que ISSET ne fait que vérifier qu'un champ est bien présent dans le formulaire HTML et donc dans le POST.
ISSET ne vérifie pas s'il a une valeur ou pas.

Ton code php est alors mal formulé puisque le champ "Load" existe dans tous les cas "avec value ou sans"
C'est pourquoi tu auras toujours un ISSET true. Pour expoiter ISSET il faut alors spécifier une valeur au champ (value) et ce moment là on peut vérifier la valeur du champ quand il est ISSET on disant:
if (ISSET($_POST["Load"]) && $_POST["Load"] == "valeur1" ) {
   //je prends une décision
}
else { 
  //je décide autre chose
}
sachant que le champ Load doit avoir les valeurs escomptées mais comme il est hidden le "value" devient obligatoire :
Si on place la "valeur1" le test retourne true

Code : Tout sélectionner

<input type="hidden" value="valeur1">
Sinon, si pas de valeur ou autres que "valeur1", le test retourne false

Code : Tout sélectionner

<input type="hidden">
ou

Code : Tout sélectionner

<input type="hidden" value="autres que valeur1">
Par contre ton popup ne saura accèder à ce champ par postage puisqu'il ne le reçoit pas. Ton formulaire a comme destinataire (action) la page "CettePage.php" qui reçoit le postage et non le popup qui est ouvert par javascript (window.Open) dans une instance imbriquée.

Le popup peut accèder via javascript au "parent" qui est la page qui l'appelle et ainsi accèder en local à ses champs (c'est ce que tu fais d'ailleurs dans "mafonction" attachée au bouton X.

Mais en fait, tu n'as pas besoin d'un postage vers le popup puisque ce dernier une fois ouvert en tantque "popup" (fenêtre fille) peut accèder aux champ de son parent et utiliser ou mettre à jour les valeurs.

re

par AbdL » 29 mars 2007, 12:18

Bonjour, et déja merci pour vos réponses. Et voici une partie de mon code:
-Dans la page parent(e):
...
<form name="id" action="cettePage.php" method="post">
...
<a href="" onclick="window.open('PageFille.php','_blank';return(false)"> [Liste]</a>
<input type="hidden" name="load">
...
<?php
if (isset($_POST['load']){ echo "Pas de valeur";}
else {echo "Valeur présente";}
?>
...

-Dans la popup "PageFille.php":
...
<form name="id" action="LithoElec.php" method="post">
...
<input type="button" value="X" onclick="maFonction">
...

//Lorsque je clique sur le bouton X de la page fille, j'ai une fonction qui modifie la value du champp 'load' de la page parente.
J'ai testé, le test du isset de la page parente m'indique bien qu'il n'y a "pas de valeur". Quand je clique sur le bouton X de la page fille je modifie bien la valeur du champ load (Je le vois bien derrière mon popup). Mais le test du isset n'est pas refait.
Je voudrais en fait executer les instructions maintenant que j'ai une valeur dans le champ.
Merci encore.

par Ryle » 29 mars 2007, 10:08

Ca me parait un peu bizare cette histoire de champ vide pour lequel isSet renvoi false : vide n'est pas null, isSet() n'est pas isEmpty().

Si j'ai un champ dans un formulaire et que ce dernier est soumis, isSet() retournera vrai quelque soit la valeur du champ. Il ne retournera faux que si le champ n'existe pas ou n'est pas envoyé (dans le cas d'une case ou d'un bouton radio non cochés qui ne sont pas envoyés)

Je suis curieux également de voir à quoi peut ressembler ton code...

par Ultim4T0m » 29 mars 2007, 07:54

Bonjour,

Montre nous le code, on pourra plus facilement t'aider.

Enfin, il suffit que l'attribut "action" de ton formulaire pointe vers la même page, qui contient ce test, et qui renverra alors true.

Test if (isset())

par AbdL » 28 mars 2007, 20:18

bonsoir,
j'ai un formulaire dans lequel il y a une zone de texte initialement vide. Le test du isset renvoie donc false.
A partir d'une autre fenetre, je remplis la zone de texte, et je voudrais ainsi refaire le test du isset qui me renverrais cette fois ci true.
Quelqu'un pourrait-il me dire comment je dois procéder?
Merci.