Résultats après un switch/case dans une balise DIV

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 : Résultats après un switch/case dans une balise DIV

par TheBuzz » 11 sept. 2007, 15:18

Après quelques exercices infructueux, j'y suis enfin arrivé...

Un ENORME merci à tous pour votre aide et aiguillage.

Voici le code que j'ai mis :
foreach ($options as $oID => $op_data) {
							$maxlength = ( $op_data['length'] > 0 ? ' maxlength="' . $op_data['length'] . '"' : '' );
							$code_html = '<input type="text" name="id[' . $oID . '][t]"' . $maxlength . ' onFocus="javascript:this.value=\'\'"/>' . $op_data['name'] . ':' . ($op_data['instructions'] != '' ? '<br /><span class="smallText">' . $op_data['instructions'] . '</span>' : '' );
							switch ($op_data['type']) {
							
			case 1:
			$a_cacher[] = $code_html;
			break;

			case 4:
				$a_afficher[] = $codehtml;
...reste de code
break;
 case 3:
				$a_afficher[] = $codehtml;
...reste de code
break;
case 2:
				$a_afficher[] = $codehtml;
...reste de code
break;
case 0:
				$a_afficher[] = $codehtml;
...reste de code
break;

}  //end of switch
						} //end of foreach
						
						foreach($a_afficher as $codehtml)
						echo $codehtml;
						echo '<tr><td><div class="clicTitre"><a onclick="afficheId(\'contenu\');">Option pour demande d\'offre</a></div><div class="contenant" id="contenu"><div class="clicCacher"><a onclick="cacheId(\'contenu\');">Fermer</a></div>';
						echo "<script type='text/javascript'>";
						echo " cacheId('contenu');";
						echo "</script>";
						foreach($a_cacher as $code_html)
						echo $code_html;
						echo '</div></td></tr>';
ET CA MARCHE en plus !

MERCI ENCORE UNE FOIS

par Yosh » 11 sept. 2007, 15:10

Merci à vous tous,

Mais je pense que je ne vais pas m'en sortir. Je ne suis qu'un p'tit sirop en code et suis désolé de vous avoir importuné avec mes questions, car j'arrive à peu près comprendre mais ne sait pas l'appliquer !

Merci encore
Mais tu n'importune personne voyons...

As-tu essayé le code de d0m?

par d0m » 11 sept. 2007, 15:10

tu as 4 cas : tes 4 types d'inputs.
Dans le cas 1 (text) tu veux les cacher, dans les cas 2, 3 et 4 tu veux les afficher donc
dans le 1er cas tu places ton code html d'input dans la tableau à cacher, dans les autres cas dans le tableau à afficher :
foreach(....){
  $code_html = '<INPUT ............>';
  switch($op_data['type']){
      case 1 :  $a_cacher[] = $code_html;break;
      case 2 : case 3 : case 4 : $a_afficher[] = $codehtml;break;
  } 
}

par TheBuzz » 11 sept. 2007, 15:04

Merci à vous tous,

Mais je pense que je ne vais pas m'en sortir. Je ne suis qu'un p'tit sirop en code et suis désolé de vous avoir importuné avec mes questions, car j'arrive à peu près comprendre mais ne sait pas l'appliquer !

Merci encore

par Yosh » 11 sept. 2007, 14:45

Est-ce comme ça, dans l'idée ?
Pas du tout, la réponse à ta question t'a été donné correctement par d0m

Test son code et tu verra que ce que tu veux faire se fait comme il te l'a indiqué...ensuite s'il y a des choses que tu ne comprend pas revient poser tes questions.

par TheBuzz » 11 sept. 2007, 14:37

Donc, dans mon cas :
//le tri
foreach($options as $oID => $op_data){
  switch($op_data['type']){
    case 1 : $a_afficher[] = case 2, case 3, case 4;break;
    case 0 : $a_cacher[]   = case 1;break;
  }
}

//l'affichage
foreach($a_afficher as case 2, case 3, case 4)
  echo case 2, case 3, case 4;
echo '<div CLASS="divCache">';
foreach($a_cacher as case 1)
  echo case 1;
Est-ce comme ça, dans l'idée ?

par d0m » 11 sept. 2007, 14:18

Si je comprends bien, je dois mettre dans mon case 1, les deux nouveaux foreach ?
non, il faut bien différencier traitement des données (tri) et affichage des données.
Dans le switch, tu ne fais que trier les input suivant 2 variables (partir traitement des données).
Ensuite tu utilises les 2 foreach pour afficher tes 2 tableaux d'inputs. (partie affichage des données).

par TheBuzz » 11 sept. 2007, 14:08

Si je comprends bien, je dois mettre dans mon case 1, les deux nouveaux foreach ?

Ou, alors, je dois l'intégrer dans le foreach /switch que j'ai déjà ci-dessous ?

Début de foreach /switch
foreach ($options as $oID => $op_data) {
							switch ($op_data['type']) {
Puis mon code :
case 1:
            $valeurtest = "1000000";
              echo '<tr><td><div class="clicTitre"><a onclick="afficheId(' . $oID . $valeurtest . ');">Option pour demande d\'offre</a></div><div class="contenant" id="' . $oID . $valeurtest . '"><div class="clicCacher"><a onclick="cacheId(' . $oID . $valeurtest . ');">Fermer</a></div>';
            echo "<script type='text/javascript'>";
            echo " cacheId($oID$valeurtest);";
            echo "</script>";
            $maxlength = ( $op_data['length'] > 0 ? ' maxlength="' . $op_data['length'] . '"' : '' );
            $tmp_html = '<input type="text" name="id[' . $oID . '][t]"' . $maxlength . ' onFocus="javascript:this.value=\'\'"/>'; ?>
            <div class="main2"><?php echo $op_data['name'] . ':' . ($op_data['instructions'] != '' ? '<br /><span class="smallText">' . $op_data['instructions'] . '</span>' : '' ); ?></div>
            <div class="main3" align="left"><?php echo $tmp_html; ?></div>
            <?php echo "</div></td></tr>";
            break;
puis à la fin, à la suite
case 2 // ... INPUT Checkbox
case 3 // ... INPUT Textarea
case 4 // ... INPUT Select
}
}
Merci encore

A+

par d0m » 11 sept. 2007, 13:37

disons que tu mets tes INPUT dans 2 tableaux:
- tableau $a_afficher
- tableau $a_cacher
//le tri
foreach($inputs as $input){
  switch($condition){
    case 1 : $a_afficher[] = $input;break;
    case 0 : $a_cacher[]   = $input;break;
  }
}

//l'affichage
foreach($a_afficher as $input)
  echo $input;
echo '<div CLASS="divCache">';
foreach($a_cacher as $input)
  echo $input;

par TheBuzz » 11 sept. 2007, 13:29

Merci d0m de cette réponse rapide,

Cependant, je ne suis pas un PRO en php, mais j'ai à peu près compris vos réponses.

Toutefois, à quel niveau et quel pourrait être, même minime de votre part, le bout de code que je dois mettre. Je pense que je ne suis pas loin du résultat, mais je pêche.

Merci de vos bons conseils

A+

par d0m » 11 sept. 2007, 13:20

Ryle t'as donné la solution.

Au lieu d'afficher tout de suite dans ton switch, ton switch peut te servir à trier dans 2 variables différentes (tableaux par exemple) les INPUT que tu veux afficher et les INPUT que tu veux cacher.

Après ce tri seulement tu affiches les INPUT de ta première variable, ceux de ta deuxième étant mis dans un div caché.

par TheBuzz » 11 sept. 2007, 13:11

Hello Ryle,

En fait, j'ai, après un switch /case qui recherche dans ma BDD si j'ai des INPUT de type CHECKBOX, TEXT,etc..., un affichage par ligne des différents INPUT avec leurs valeurs.

Ce que je recherche, c'est la possibilité de dire que : Si j'ai un/des INPUT de Type TEXT, regroupe-les dans un DIV caché, puis, par appel par un lien afficher/masquer, affiche-les.

Pas simple à expliquer !

Voici mon code modifié, avec toujours l'affichage de tous les INPUT de type TEXT dans des DIV séparés :
<?php case 1:
			$valeurtest = "1000000";
          	echo '<tr><td><div class="clicTitre"><a onclick="afficheId(' . $oID . $valeurtest . ');">Option pour demande d\'offre</a></div><div class="contenant" id="' . $oID . $valeurtest . '"><div class="clicCacher"><a onclick="cacheId(' . $oID . $valeurtest . ');">Fermer</a></div>';
            echo "<script type='text/javascript'>";
            echo " cacheId($oID$valeurtest);";
            echo "</script>";
            $maxlength = ( $op_data['length'] > 0 ? ' maxlength="' . $op_data['length'] . '"' : '' );
            $tmp_html = '<input type="text" name="id[' . $oID . '][t]"' . $maxlength . ' onFocus="javascript:this.value=\'\'"/>'; ?>
            <div class="main2"><?php echo $op_data['name'] . ':' . ($op_data['instructions'] != '' ? '<br /><span class="smallText">' . $op_data['instructions'] . '</span>' : '' ); ?></div>
			<div class="main3" align="left"><?php echo $tmp_html; ?></div>
			<?php echo "</div></td></tr>";
            break;
Je sais que suite à mon case, tous les résultats seront affichés, mais comment faire pour mettre le tout dans une seule "boîte ??

Merci des éclaircissements et A+[/php]

par Ryle » 10 sept. 2007, 22:47

Pas sur d'avoir bien compris, mais si tu veux regrouper tes champs, pourquoi ne pas faire deux variable temporaires $tmp_html_1 et $tmp_html_2, et en fonction du nom du champ, tu complètes l'une ou l'autre. Ainsi lors de l'affichage les champs que tu souhaites seront regroupés :)

par TheBuzz » 10 sept. 2007, 17:15

Merci d0m,

Toutefois, je connais la valeur des attributs.

Ce que je recherche est en fait, non pas l'affichage/masquage de chaque input, mais de regrouper tous les input dans un seul div de manière à afficher/masquer cette "boîte" contenant ces input.

Je ne sais pas si je me suis bien exprimé !?

Merci d'avance

par d0m » 10 sept. 2007, 16:31

Tu peux tester pour chaque INPUT la valeur de l'attribut que tu vas mettre dans NAME.
Si c'est maman, tu écris l'INPUT entre les balises :
<DIV STYLE="display:none;"><INPUT NAME="maman" .... /></div>
ce qui aura pour effet de " cacher ton INPUT ".

et ensuite, en cliquant sur ton lien changer par du javascript la valeur de display ou par un rechargement de la page.