Problème avec Do...while et For

Littlep2901 Messages postés 2 Statut Membre -  
giheller Messages postés 1960 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je rencontre deux problèmes bien particuliers avec les boucles For et Do...While.

j'essaie de lire les réponses données par un utilisateurs et de les évaluées pour donner une note finale.
Avec For, voici la syntaxe que j'utilise :

for ($ind=1; $rep[$ind]==$grep[$ind]; $ind++)
{
$points+=0.5;
}

$rep est la variable qui récupère la réponse donnée par l'utilisateur
$grep est la variable qui contient la bonne réponse
$ind c'est l'incrément pour la boucle
$points contient le nombre de points obtenu par l'utilisateur.

Le problème c'est que lorsque la boucle rencontre une mauvaise réponse, les questions suivantes ne sont pas évaluées.

J'ai donc pensé à utiliser une boucle Do...while.
Voici la syntaxe que j'ai utilisée :

$ind=1;
do
{
if ($rep[$ind]==$grep[$ind])
{
$points++;
}
$ind++;
} while ($ind=10);

Là c'est plus grave encore, l'expression n'est pas évaluées entièrement et je reçois le message suivant :
Fatal error: Maximum execution time of 30 seconds exceeded in d:\program files\easyphp1-8\www\rallyes\francais\reponse_son_sont.php on line 90

J'ai changé le temps d'exécution des scripts dans le fichier de configuration de php et je l'ai mis à 300 secondes (5 minutes). Au bout des 5mn, j'ai eu la même message.

Je précise que la ligne 90 c'est la suivante :
if ($rep[$ind]==$grep[$ind])

Mais l'erreur s'est produite aussi une fois sur la ligne 94 : $ind++;

Je ne sais vraiment pas comment résoudre ce problème. Merci de me venir en aide.
A voir également:

3 réponses

giheller Messages postés 1960 Date d'inscription   Statut Membre Dernière intervention   146
 
bonsoir,

la boucle me semble-t-il dot être limitée par deux critères.

ensuite
for ($ind=1; $rep[$ind]==$grep[$ind]; $ind++)
{
$points+=0.5;
}
$ind c'est l'incrément pour la boucle
pas d'accord : si $ind est l'incrément on ne fait pas $ind++ qui veut dire faire + 1 à ind.
de ce fait la boucle ne s'arrête pas sauf par un time out dépassement du temps !

donc que ce soit un do un while ou autre chose revoyez le pas de la boucle et la (les) condition(s) d'arrêt.
0
Littlep2901
 
Merci Giheller pour cette réponse,
mais, si je ne mets pas le $ind++, comment la boucle s'incrémente-t-elle ? Comment faire comprendre à php qu'il doit évaluer la réponse suivante ?
Autre chose, n'y a-t-il pas une méthode pour donner une limite supérieure à la boucle for ? Par exple en Visual Basic on écrirait :

For ind = 1 to 10
(instructions)
Next
Ce qui veut dire que l'instruction est exécutée 10 fois.

Merci encore de m'aider.
0
giheller Messages postés 1960 Date d'inscription   Statut Membre Dernière intervention   146
 
bonsoir,

ind++ fait plus un et ce n'est pas ce qu'on veut
*il faut donc gérer manuellement

$ind =0
while ($ind < $limite){

...
$ind = $ind + $incrément
}
0