[RESOLU] repetition d'un iput 'text'

le loup solitaire
Invité n'ayant pas de compte PHPfrance

28 mars 2016, 17:53

bonsoir,

comme le titre l'indique, les champs texte se repette, comment faire.
<?php

	function displaySelectReponse($choix){
		

		$select ="<input name='$choix' class='textfield' type='text' size='20' maxlength='60'>";
	
	  if(isset($_POST[$choix]) && $_POST[$choix] === $key){
		  
		   if(!empty($_POST[$choix]) && !empty($_POST[$choix])){
			   
			   	$select .= "<input name='$choix' class='textfield' type='text' size='20' maxlength='60'>";
				
		   }else{
			   
			   $msg = '<p>Veuillez cochez toutes les cases !</p>';
			
		   }

	}

		return $select;
		
					}
	function displayReponse($choix){

			global $errors, $reponses;
	$mot = $reponses[$choix]['mot']['image'];

			$reponse_class = 'ok';
			$resultat = '';

	if( array_key_exists( $choix, $errors) ){
			$reponse_class = 'error';
			$resultat = " => ".$reponses[$choix]['reponse'];
						}

			$reponse = '<li class="' . $reponse_class . '">';
			$reponse .= '<span style="font-size:1.3em;" class="reponse">' . htmlspecialchars($_POST[$choix]) . '</span>
						<span style="margin-left:1%;font-size:1.3em;"">' . $mot.'</span>';
			$reponse .= ' <span style="color:red;font-size:1.3em;margin-left:5%;"" class="resultat">'. $resultat . '</span> ';

		$reponse .= '</li>';
		return $reponse;
					}

		$form_ok = false; 

		$reponses = array(
		'chx_0' => array('mot' => 'une', 'reponse' => 'douche','image'=>'img/douche.gif'),
		'chx_1' => array('mot' => 'une', 'reponse' => 'poubelle','image'=>'img/poubelle.gif'),
		'chx_2' => array('mot' =>'une', 'reponse' => 'souris','image'=>'img/souris.gif'),
		'chx_3' => array('mot' => 'une', 'reponse' => 'soupe','image'=>'img/soupe.gif'),
		'chx_4' => array('mot' => 'un', 'reponse' => 'couteau','image'=>'img/couteau.gif'),
		'chx_5' => array('mot' => 'un', 'reponse' => 'tournevis','image'=>'img/tournevis.gif'),
		'chx_6' => array('mot' => 'un', 'reponse' => 'journal','image'=>'img/journal.gif'),
		'chx_7' => array('mot' => 'une', 'reponse' => 'carre-rouge','image'=>'img/carré-rouge.gif'),
					
					);

	if ( isset($_POST['correction']) && $_POST['correction'] === 'correction') {
		$empty = false;
		foreach ($reponses as $key => $value) {
					 
			if( empty($_POST[$key])){
					$empty = true;
							}
						}

			if( $empty ){ 
				$msg = '<p>Veuillez cochez toutes les cases !</p>';
				echo $msg;
			}else{
				$form_ok = true; 

				$errors = array();
			
				foreach ($reponses as $key => $value) {
								
			if( $_POST[$key] == $value['reponse'] ){
				$errors[$key] = htmlspecialchars($_POST[$key]);
								}
		
						}
					}
					
	}
					?>
			
					<?php
					if( ! $form_ok )
					{ ?>
		
		<form action="" method="POST" /> 
									
			<?php
	
				$images = array(
							
		'0' =>array ('image' =>'img/douche.gif'),
		'1' =>array ('image' =>'img/poubelle.gif'),
		'3' =>array ('image' =>'img/souris.gif'),
		'4' =>array ('image' =>'img/soupe.gif'),
		'5' =>array ('image' =>'img/couteau.gif'),
		'6' =>array ('image' =>'img/tournevis.gif'),
		'7' =>array ('image' =>'img/journal.gif'),
		'8' =>array ('image' =>'img/rouge.gif')
								
				);
							
											
	foreach($images as $image) {
				echo"<article class='content_img'>";
					echo"<figure>";	
		
				echo "<img src='$image[image]' width='75' height='75' alt='' />";	

	foreach($reponses as $choix => $reponse) {
		
		
			echo displaySelectReponse($choix, $reponse['mot']);
			
													    
				echo"</figure>";
			echo"</article>";
									
	}
	}				
										?>
		

<input class="correction_center" type="submit" name="correction" value="correction"/>


							</form>
						
					<?php } else {?>
				
	<p style="text-align:center;padding:4% 0 0 0;font-size:1.6em;font-weight:bold;display:block;" >Corrigé de l'exercice :</p>
		<div class="blc_reponses">	
				<ol style="text-align:left;" class="reponses">
							<?php foreach ($reponses as $choix => $value) {
								echo displayReponse($choix);
}?>
				</ol>
<h2 style="display:inline-block;">Bonnes réponses :</h2><p><?php echo count($reponses) - count($errors); ?> / <?php echo count($reponses); ?></p>
				</div>	
	<div class="main_sec" style="text-align:center;margin-left:-10px;">
		<span><a href="exo_ou_1.php">REFAIRE L'EXERCICE</a></span>
			<span><a href="exo_ou_2.php">EXERCICE SUIVANT</a></span>
							</div> 
					<?php } ?>
merci
j'ai oublier un bout

le loup solitaire
Invité n'ayant pas de compte PHPfrance

28 mars 2016, 21:18

bonsoir,

je vais me réexpliquer, mon but est d'avoir 8 articles avec une image différente et avec un input 'text' , sauf que la j'ai bien mais 8 article * 8.
franchement je ne vois pas ou ça peut clocher...

merci pour votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

29 mars 2016, 03:16

Recherche à quel endroit tu fais l'affichage de et dans quels foreach ils s'effectuent.

Indenter correctement et commenter ton code devrait te permettre de résoudre + facilement ce type de soucis
Quand tout le reste a échoué, lisez le mode d'emploi...

le loup solitaire
Invité n'ayant pas de compte PHPfrance

29 mars 2016, 10:05

merci pour la réponse, mais si je pouvais avoir un peu plus d'explications, je ne vois pas ou le problème se pose dans la boucle foreach...
foreach($images as $image) {
        echo"<article class='content_img'>";
          echo"<figure>";	
    
        echo "<img src='$image[image]' width='75' height='75' alt='' />";	

  foreach($reponses as $choix => $reponse) {
    
    
      echo displaySelectReponse($choix);
      
                              
        echo"</figure>";
      echo"</article>";
                  
  }
  }				
    ?>
merci d'avance

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

29 mars 2016, 18:45

Le problème, c'est que moi non plus ! Car ton code est particulièrement illisible :-)

Donc commence par faire une indentation correcte http://a-pellegrini.developpez.com/tuto ... ing-style/ ou sinon tu peux chercher sur Google, les bonnes pratiques PSR-0/1/2


Et ensuite compte le nombre de fois que tu rentre dans chaque boucle, quitte à mettre des variables $i ou $j que tu afficheras et incrémenteras à chaque passage dans chaque boucle pour comprendre à quel moment ça cloche.
Quand tout le reste a échoué, lisez le mode d'emploi...

le loup solitaire
Invité n'ayant pas de compte PHPfrance

31 mars 2016, 14:45

voila j'ai refais l'indentation...
par contre merci pour votre réponse , mais je ne vois pas comment faire....
<?php

function displaySelectReponse($choix)
	{
	$select = "<input name='$choix' class='textfield' type='text' size='20' maxlength='60'>";
	if (isset($_POST[$choix]) && $_POST[$choix] === $key)
		{
		if (!empty($_POST[$choix]) && !empty($_POST[$choix]))
			{
			$select.= "<input name='$choix' class='textfield' type='text' size='20' maxlength='60'>";
			}
		  else
			{
			$msg = '<p>Veuillez cochez toutes les cases !</p>';
			}
		}

	return $select;
	}

function displayReponse($choix)
	{
	global $errors, $reponses;
	$mot = $reponses[$choix]['mot']['image'];
	$reponse_class = 'ok';
	$resultat = '';
	if (array_key_exists($choix, $errors))
		{
		$reponse_class = 'error';
		$resultat = " => " . $reponses[$choix]['reponse'];
		}

	$reponse = '<li class="' . $reponse_class . '">';
	$reponse.= '<span style="font-size:1.3em;" class="reponse">' . htmlspecialchars($_POST[$choix]) . '</span>
            <span style="margin-left:1%;font-size:1.3em;"">' . $mot . '</span>';
	$reponse.= ' <span style="color:red;font-size:1.3em;margin-left:5%;"" class="resultat">' . $resultat . '</span> ';
	$reponse.= '</li>';
	return $reponse;
	}

$form_ok = false;
$reponses = array(
	'chx_0' => array(
		'mot' => 'une',
		'reponse' => 'douche',
		'image' => 'img/douche.gif'
	) ,
	'chx_1' => array(
		'mot' => 'une',
		'reponse' => 'poubelle',
		'image' => 'img/poubelle.gif'
	) ,
	'chx_2' => array(
		'mot' => 'une',
		'reponse' => 'souris',
		'image' => 'img/souris.gif'
	) ,
	'chx_3' => array(
		'mot' => 'une',
		'reponse' => 'soupe',
		'image' => 'img/soupe.gif'
	) ,
	'chx_4' => array(
		'mot' => 'un',
		'reponse' => 'couteau',
		'image' => 'img/couteau.gif'
	) ,
	'chx_5' => array(
		'mot' => 'un',
		'reponse' => 'tournevis',
		'image' => 'img/tournevis.gif'
	) ,
	'chx_6' => array(
		'mot' => 'un',
		'reponse' => 'journal',
		'image' => 'img/journal.gif'
	) ,
	'chx_7' => array(
		'mot' => 'une',
		'reponse' => 'carre-rouge',
		'image' => 'img/carré-rouge.gif'
	)
);

if (isset($_POST['correction']) && $_POST['correction'] === 'correction')
	{
	$empty = false;
	foreach($reponses as $key => $value)
		{
		if (empty($_POST[$key]))
			{
			$empty = true;
			}
		}

	if ($empty)
		{
		$msg = '<p>Veuillez cochez toutes les cases !</p>';
		echo $msg;
		}
	  else
		{
		$form_ok = true;
		$errors = array();
		foreach($reponses as $key => $value)
			{
			if ($_POST[$key] == $value['reponse'])
				{
				$errors[$key] = htmlspecialchars($_POST[$key]);
				}
			}
		}
	}

?>
    <?php

if (!$form_ok)
	{ ?>
            <form action="" method="POST" />
            
            <?php
	$images = array(
		'0' => array(
			'image' => 'img/douche.gif'
		) ,
		'1' => array(
			'image' => 'img/poubelle.gif'
		) ,
		'3' => array(
			'image' => 'img/souris.gif'
		) ,
		'4' => array(
			'image' => 'img/soupe.gif'
		) ,
		'5' => array(
			'image' => 'img/couteau.gif'
		) ,
		'6' => array(
			'image' => 'img/tournevis.gif'
		) ,
		'7' => array(
			'image' => 'img/journal.gif'
		) ,
		'8' => array(
			'image' => 'img/rouge.gif'
		)
	);
	foreach($images as $image)
		{
		echo "<article class='content_img'>";
		echo "<figure>";
		echo "<img src='$image[image]' width='75' height='75' alt='' />";
		foreach($reponses as $choix => $reponse)
			{
			echo displaySelectReponse($choix, $reponse['mot']);
			echo "</figure>";
			echo "</article>";
			}
		}

?>
            <input class="correction_center" type="submit" name="correction" value="correction"/>
            </form>
            <?php
	}
  else
	{ ?>
            <p style="text-align:center;padding:4% 0 0 0;font-size:1.6em;font-weight:bold;display:block;" >Corrigé de l'exercice :</p>
            <div class="blc_reponses">
              <ol style="text-align:left;" class="reponses">
                <?php
	foreach($reponses as $choix => $value)
		{
		echo displayReponse($choix);
		} ?>
              </ol>
              <h2 style="display:inline-block;">Bonnes réponses :</h2>
              <p><?php
	echo count($reponses) - count($errors); ?> / <?php
	echo count($reponses); ?></p>
            </div>
            <div class="main_sec" style="text-align:center;margin-left:-10px;"> <span><a href="exo_ou_1.php">REFAIRE L'EXERCICE</a></span> <span><a href="exo_ou_2.php">EXERCICE SUIVANT</a></span> </div>
            <?php
	} ?>

le loup solitaire
Invité n'ayant pas de compte PHPfrance

31 mars 2016, 14:55

voila ce que j'aimerai faire, j'ai 8 articles contenant 8 images(différentes) et en dessous des images des input texte , quand j'écrit la réponses tu me fais le calcule de bonne et mauvaise réponses, puis tu m'affiche le résultat des bonnes et mauvaises réponse.

je pense que dans mon script il y a un problème que je ne vois pas, car il ne reconnait pas, voir en dessous.

Undefined variable: choi in D:\wamp2\www\project-val\exo_ou_2_1.php on line 8

Notice: Undefined index: in D:\wamp2\www\project-val\exo_ou_2_1.php on line 81

Mammouth du PHP | 1967 Messages

31 mars 2016, 15:43

Il me semble que ta fonction display Select Reponse devrait avoir 2 argument et non pas un

défini là comme ceci

function displaySelectReponse($choix, $key)
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

le loup solitaire
Invité n'ayant pas de compte PHPfrance

31 mars 2016, 16:33

merci pour les réponses, mais pas de succès de se coté la, je suis vraiment désespéré et complètement perdu dans mon code,
que je commencé a me dire que je vais complètement refaire le code ou j'ai passé énormément de temps a chercher comment faire(alors un petit coup de main serai pas de refus), car quand on est débutant c'est pas évident...en tous cas encore merci pour vos réponses

Mammouth du PHP | 1967 Messages

31 mars 2016, 16:52

Les messages d'erreur que tu mentionnais, indiquait qu'il y avait à la ligne 8 "$choi" à la place (probablement) de "$choix". Mais je ne vois pas l'erreur dans le code du post au dessus.
Le 2eme message d'erreur indique que tu cherche un index dans un tableau qui n'éxiste pas. cherche à partir de là, les messages d'erreur sont très utile et source de debuggage.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

le loup solitaire
Invité n'ayant pas de compte PHPfrance

31 mars 2016, 17:48

toujours une répétition après changement, merci pour vos réponses, bon pas de message d'erreur par contre toujours cette répétition des balise input text, l'article a gauche et a droite les répétions des inputs....

Mammouth du PHP | 1967 Messages

01 avr. 2016, 08:06

Bon on navigue un peu à l'aveugle sans voir ce que tu as ni ve que tu veux mais je te propose ceci
foreach($reponses as $choix => $reponse)
      {
     if ($reponse['mot'] != $image) continue;
      echo displaySelectReponse($choix, $reponse['mot']);
Si je comprends correctement, cela devrait empêcher l'affichage des input text si l'image ne correspond pas au mot.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

le loup solitaire
Invité n'ayant pas de compte PHPfrance

01 avr. 2016, 11:44

merci pour vos réponses.