Chercher dans les parametres d'un tableau

rimie1
Invité n'ayant pas de compte PHPfrance

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>";
  }

rimie1
Invité n'ayant pas de compte PHPfrance

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'));

?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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 ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
xTG
ViPHP | 7331 Messages

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:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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 ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
xTG
ViPHP | 7331 Messages

07 mai 2011, 18:10

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

rimie1
Invité n'ayant pas de compte PHPfrance

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

rimie1
Invité n'ayant pas de compte PHPfrance

09 mai 2011, 03:16

desole j'ai oublie de mettre les tag PHP

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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.

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

09 mai 2011, 15:10

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

rimie1
Invité n'ayant pas de compte PHPfrance

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;?>