Chercher dans les parametres d'un tableau

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 : Chercher dans les parametres d'un tableau

Re: Chercher dans les parametres d'un tableau

par rimie1 » 10 mai 2011, 03:36

salut,

a chaque addInput tu écrase le contenu de $InputOptions et de $InputOptionsArray donc tu ne pourra avoir qu'un seul champ (le dernier utilisant addInput).

il faut utiliser la notation tableau (par exemple InputOptions[]) ou la fonction array_push pour alimenter un tableau.
public final function addInput($type, $name='', $value='', $InputOptions[]=array()){
// code
}
et ca donne une erreur:
Parse error: syntax error, unexpected '[', expecting ')' in form2.php on line 82
de plus ton code me semble trop léger pour ne pas avoir d'erreur.
je n'ai pas encore terminer tout le code, je fais partie par partie
Je pense que le plus simple est un seul tableau qui contient des tableaux avec toute les infos de l'input
$input[] = array (name, type, option1, option2, option3 etc);
avec en clef du second tableau le nom de l'option afin de t'y retrouver facilement (avec foreach sa roule tous seul pour l'ajouter ;)
est ce que vous avez un exemple, pour le moment je n'ai pas encore mis fin a mon formulaire, jusqu'a ce que trouver la bonne methode et bien la comprendre.
Attention il te faut prévoir les cas "barbares" comme les listes (checkbox), textarea et surtout les inputs radio (voir checkbox) qui ont le même nom.
@+
<?php
case 'radio':
							if($checked)
							{
					echo '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" '.$checked.' />';	
							}
							else
							{
								
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" value="'.$fieldValue.'" />';
							}
					break;
					
					case 'checkbox':
							if($checked)
							{
					echo '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" '.$checked.' />';	
							}
							else
							{
								
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" value="'.$fieldValue.'" />';
							}
					break;?>

Re: Chercher dans les parametres d'un tableau

par Mazarini » 09 mai 2011, 15:10

Edit : oops, j'ai répondu au dernier message de la page 1...

Re: Chercher dans les parametres d'un tableau

par moogli » 09 mai 2011, 12:14

salut,

a chaque addInput tu écrase le contenu de $InputOptions et de $InputOptionsArray donc tu ne pourra avoir qu'un seul champ (le dernier utilisant addInput).

il faut utiliser la notation tableau (par exemple InputOptions[]) ou la fonction array_push pour alimenter un tableau.

de plus ton code me semble trop léger pour ne pas avoir d'erreur.

Je pense que le plus simple est un seul tableau qui contient des tableaux avec toute les infos de l'input
$input[] = array (name, type, option1, option2, option3 etc);
avec en clef du second tableau le nom de l'option afin de t'y retrouver facilement (avec foreach sa roule tous seul pour l'ajouter ;)

Attention il te faut prévoir les cas "barbares" comme les listes (checkbox), textarea et surtout les inputs radio (voir checkbox) qui ont le même nom.

@+

Re: Chercher dans les parametres d'un tableau

par rimie1 » 09 mai 2011, 03:16

desole j'ai oublie de mettre les tag PHP

Re: Chercher dans les parametres d'un tableau

par rimie1 » 08 mai 2011, 03:01

merci Ryle et xTG, je vais la changer.

je voudrais ajouter un truc de plus, j'ai voulu mettre la meme chose pour un autre champs (addInput), mais ca marche pas, je l'ai resume en var_dump afin de voir les valeurs retournees, pour la balise form: ca marche, il me retourne les valeurs dans le tableau, par contre la balise input, me retourne rien, c'est quoi le probleme exactement?

<?php
class Formulaire {

public final function __construct($name, $method='', $action='', $formOptions=array(), $enctype='') {

$this->formOptions = $formOptions;

$formOptionsArray = array(
"autocomplete" => array('on', 'off'),
"target" => array('_self', '_blank', '_parent', '_top'),
"novalidate" => array("novalidate"),
"DISABLED" => array(""),

);

$this->formOptionsArray = $formOptionsArray;
$formOptions = trim($formOptions);



// fonctions des Inputs
public final function addInput($type, $name='', $value='', $inputOptions=array()){

$this->InputOptions = $InputOptions; // autres options des inputs
$InputOptionsArray = array(
'id' => array(''),
'class' => array(''),
'checked' => array('checked'),
'autocpmplete' => array('on', 'off'),
);

$this->InputOptionsArray = $InputOptionsArray;

$InputOptions = trim($InputOptions);

} // end addInput



// fonction de creation de formulaire
function createForm(){

echo 'this form options: '.var_dump($this->formOptions).'<br>';
echo 'this input options: '.var_dump($this->InputOptions).'<br>';
} // end function createForm

} // end class

// on affiche le formulaire
$frm1 = new Formulaire('monForm1', '', '', array('autocomplet' => 'on', 'target' => '_self', 'DISABLED' => '','novalidate' => 'novalidate'));
$frm1->addInput('text', 'nomText1', 'valTxt', array('id' => 'MyText2', 'class' => 'maClass')); // text

echo $frm1->createForm();
?>

Merci

Re: Chercher dans les parametres d'un tableau

par xTG » 07 mai 2011, 18:10

Beh pour la pratique une bonne équipe ça existe pas. :P

Re: Chercher dans les parametres d'un tableau

par Ryle » 07 mai 2011, 13:43

Tout à fait d'accord avec toi sur ce point... tout du moins sur son aspect théorique, pour la pratique c'est une autre histoire ;)

Re: Chercher dans les parametres d'un tableau

par xTG » 07 mai 2011, 12:01

Pour cela qu'une bonne équipe c'est une équipe qui discute et qui se fixe des normes de codage.
Si chacun fait à sa sauce bonjour la galère... :non:

Re: Chercher dans les parametres d'un tableau

par Ryle » 07 mai 2011, 11:39

Quand tu fais un foreach($this->formOptions as $k=>$v), tu vas parcourir tous les index du tableau... ton test
if(array_key_exists($k, $formOptionsArray) === true )
sera nécessairement vrai, puisque tu ne parcours que les index du tableau, il y a une grande probabilité pour que l'index que tu es en train de parcourir soit dans ton tableau ;)
Commence peut être par écrire un algorithme de ce que tu veux tester... tu pourras alors facilement voir quelles fonctions tu dois utiliser en fonction de ce que tu veux tester :)

A noter que comme array_key_exists renvoi un booléen, le code suivant est suffisant :
if(array_key_exists($k, $formOptionsArray))
Pas besoin de tester si un booléen est un booléen et qu'il est égal à vrai pour retourner la valeur du booléen ;)
@Genova : c'est pour cela que je n'utilise la valeur null qu'en cas de variable non initialisé dans tous mes programmes. Ainsi le résultat du isSet() est tout à fait correct. Je tombe sur une variable non initialisée qui n'existe donc pas.
Le problème est que le résultat du isSet sera tout à fait correct dans tous tes programmes... fait par toi et pour toi... mais si tu travailles avec une équipe, rien ne prouve que les autres feront de même... autant avoir de bonnes pratiques dès le début et utiliser les fonctions qui correspondent ;)

Re: Chercher dans les parametres d'un tableau

par rimie1 » 06 mai 2011, 04:53

corrigez moi svp:
<?php

$formOptionsArray = array(
		"autocomplete" => array('on', 'off'), 
		"target" => array('_self', '_blank', '_parent', '_top'), 
		"novalidate" => array("novalidate"),
		"DISABLED" => array(""),
		

foreach($this->formOptions as $k=>$v)
      {
      	
      	/*
      	if(is_array($k))
      {
      	echo 'K is an array<br>';
      }
      else
      {
      	echo 'K is not an array<br>';
      }
      */
      
      if(array_key_exists($k, $formOptionsArray) === true )
{
  echo $k. '<font color="green"> présent</font><br>';
  if(in_array($v,$formOptionsArray[$k]))
  {
  	echo $v. '<font color="green"> present</font><br>';
  }
  else
  {
  	echo $v. '<font color="red"> nest pas présent</font><br>';
  }
  
  }
  else
  {
  	$k. '<font color="red"> nest pas present</font><br>';
  }
  
      
      			echo 'this is k: '.$k.'<br>';
      			echo 'this is v: '.$v.'<br>';
      }


// on peut les mettre tous
$frm1 = new Formulaire('monForm1', '', '', array('autocomplete' => 'on', 'target' => '_self', 'DISABLED' => '','novalidate' => 'novalidate'));

// on peut mettre quelques unes
$frm1 = new Formulaire('monForm1', '', '', array('target' => '_self'));

?>

Re: Chercher dans les parametres d'un tableau

par rimie1 » 06 mai 2011, 04:31

j'ai teste par in_array au lieu de array_search, et ca marche,
if( array_key_exists("autocomplete", $formOptionsArray) === true )
{
  echo "autocomplete présent<br>";
  if(in_array("on",$formOptionsArray['autocomplete']))
  {
  	echo "on présent<br>";
  }
  else
  {
  	echo "on n'est pas présent<br>";
  }
alors dans mon tableau j'ai une option "DISABLED" qui est unique et n'as pas de valeur, je teste par array_key_exists et ca marche pas:
if( array_key_exists("DISABLED", $formOptionsArray) === true )
{
  echo "disabled présent<br>";
}
else
{
  	echo "DISABLED n'est pas présent<br>";
  }

Re: Chercher dans les parametres d'un tableau

par rimie1 » 06 mai 2011, 04:23

j'ai teste l'exemple de xTG et ca marche pas, il affiche:

+ autocomplete present,
+ on n'est pas present.
if( array_key_exists("autocomplete", $formOptionsArray) === true )
{
  echo "autocomplete présent<br>";
  if(array_search("on",$formOptionsArray['autocomplete']) === true )
  {
  	echo "on présent<br>";
  }
  else
  {
  	echo "n'est pas présent<br>";
  }
    
  if( array_search("off",$formOptionsArray['autocomplete']) === true )
    echo "off présent<br>";
}

Re: Chercher dans les parametres d'un tableau

par Mazarini » 05 mai 2011, 08:14

Bonjour,

Si tu ne sais que choisir, une adaptation de la première solution me semble bonne :
function test($nom,$option)
{
   global $formOptionsArray;
   if( array_key_exists($nom, $formOptionsArray) === true )
  {
     if( array_seach($option,$formOptionsArray[$nom]) === true )
     {
         return true;
     }
  }
  return false;
}
Ceci en gardant ta structure de données.

Re: Chercher dans les parametres d'un tableau

par xTG » 05 mai 2011, 08:00

@Genova : c'est pour cela que je n'utilise la valeur null qu'en cas de variable non initialisé dans tous mes programmes. Ainsi le résultat du isSet() est tout à fait correct. Je tombe sur une variable non initialisée qui n'existe donc pas.

Re: Chercher dans les parametres d'un tableau

par rimie1 » 05 mai 2011, 05:16

Oui Genova, vous avez raison, je l'ai lu au manuel:
Example #2 array_key_exists() vs isset()
isset() does not return TRUE for array keys that correspond to a NULL value, while array_key_exists() does.