Re-pb de boucle

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 : Re-pb de boucle

par Sékiltoyai » 30 août 2007, 15:19

Donc Ryle avait raison, tu n'as bien que 3 éléments dans ton tableau (ici c'est une chaine) $_SESSION['str_id']. Donc c'est ici que ce trouve ton problème.

par laeti » 30 août 2007, 09:30

Le var_dump() me donne:
string(3) "315"
315 correspond bien à l'identifiant de cette variable et 3 correspond au nombre de résultats affichés alors que ça devrait être 4.


En fait, quelque soit le nombre de saisie que je fais, la boucle est bloquée sur 3 itérations. Comment cela est-il possible?


J'ai changé mon for par un while et ça marche.

par Sékiltoyai » 29 août 2007, 18:32

Fais un vardump() de $_SESSION['str_id'] pour voir…

par laeti » 29 août 2007, 16:18

Dans le cas où j'ai plus de résultats que ceux affichés, ma requête marche dans PgAdmin. (4 résultats pour 3 affichés).
L'affichage du isset me met 1 avant l'affichage de chaque résultat. Je quitte donc la boucle après le 3ème résultat.
Je ne comprends pas très bien pourquoi.

par Ryle » 29 août 2007, 16:09

Bah je vois pas d'autre explication par rapport à ton code... essaye de trouve un cas ou tu devrais avoir plus de résultats que ceux afficher et vérifies la requête en la jouant directement en base, affiche les variables $i et $resul à chaque itération pour voir comment elles se comportent, affiche également ton tableau de session et le résultat du isSet() pour voir quand est ce qu'il quitte la boucle et tu devrais voir quand et donc pourquoi il te saute des résultats...

par laeti » 29 août 2007, 15:29

non, j'ai autant d'élément dans mon tableau que dans ma base.

Excuse-moi, tu as raison, j'ai bien moins d'élément dans mon tableau que dans ma base.
Comment cela se fait-il?

par Ryle » 29 août 2007, 15:16

L'autre possibilité, c'est que tu as moins d'éléments dans ton tableau que dans ta base... si ta requête te renvoi 5 enregistrements et que ton tableau n'en contient que 3, une fois encore tu quitteras la boucle avant d'avoir lu l'ensemble des enregistrements provenant de la base :)

par laeti » 29 août 2007, 15:12

OK
Non je n'ai pas de trous. Donc qu'est ce que ça peut être?

par Ryle » 29 août 2007, 15:07

Bah en fait, quand je te demande si ton tableau $_SESSION['str_id'] comporte des "trous", c'est pour savoir s'il peut être du genre :
$_SESSION['str_id'][0] => ...
$_SESSION['str_id'][1] => ...
$_SESSION['str_id'][2] => ...
$_SESSION['str_id'][5] => ...
$_SESSION['str_id'][27] => ...
Ou si tous les index se suivent nécessairement (0,1,2,3,4,5). S'ils ne se suivent pas, quand ton compteur $i arrive à 3 (dans mon exemple), isSet($_SESSION['str_id'][3]) retournera faux et tu sortiras de la boucle après la 3ème itération, alors qu'il reste encore des éléments dans le tableau :)

par laeti » 29 août 2007, 14:58

Houlala, j'ai pas très bien compris de quoi tu parles.
$str_id est toujours le même dans ma boucle. En ce qui concerne le isset, je ne sais pas si c'est le plus approprié mais c'est comme ça que l'on m'a montré et pour l'instant, je n'ai jamais eu de problème avec.

par Ryle » 29 août 2007, 14:55

Tous les index de ton tableau $_SESSION['str_id'] sont-ils consécutifs ? au moindre "trou", le isSet() utiliser dans le for() retournera faux et quitteras la boucle prématurément...

C'est d'ailleurs pas courrant d'utiliset un isSet() dans un for... un " $i < count(...) " ou même un foreach à la place du for serait plus adapté je pense :)

Re-pb de boucle

par laeti » 29 août 2007, 14:50

Bonjour,

Je souhaite afficher des éléments saisis dans un formulaire récapitulatif. J'ai fait une boucle pour récupérer mes données. Celle-ci fonctionne mais ne fait apparaître que 3 enregistrements alors que je peux en saisir bien plus.
<div id="P10">
	Titres des données souhaitées :<BR>
	<?php
		$sql = "SELECT str_bdi.bdi_id,bdi_titre FROM str_bdi, besoin_donnee_identifiee WHERE str_id=".$str_id." AND str_bdi.bdi_id=besoin_donnee_identifiee.bdi_id";
		$req = pg_query($sql) or die('Erreur SQL !'.$sql.'<br>'.pg_resul_error()); 
			for ($i=0; isset($_SESSION['str_id'][$i]); $i++) { 
			$resul_bdi_titre = pg_fetch_object($req);
			$resul .= $resul_bdi_titre->bdi_titre."\n";
			}
	?>
	<textarea style="width:660px" id="Bdi_titre" name="Bdi_titre" rows="4"><?php echo $resul;?></textarea>
	</div>
Est-ce quelqu'un a une idée?
Merci par avance.