[RESOLU] Problème exercice PHP

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 : [RESOLU] Problème exercice PHP

Re: Problème exercice PHP

par Carlito3 » 30 janv. 2014, 09:54

Ok, j'ai réussi à résoudre le problème. :mrgreen:

Enfaite, il suffisait de sortir mes fonctions if des boucles for, et les placer juste avant.

En tout cas, merci d'avoir pris de votre temps pour essayer et m'aider à résoudre ce petit bug. :mrgreen:

EDIT : Moogli, je comprend pas vraiment ton histoire de boucler sur des lettres, c'est quoi l'avantage ? Si tu peux m'en dire plus, ça m'interesse beaucoup :D

Re: Problème exercice PHP

par sirakawa » 28 janv. 2014, 18:08

pour le début, suivre moogli, ce que je n'ai pas fait
Voici mon délire perso qui distingue vérifications, traitement et exploitation des valeurs
<?PHP
print("Saisissez une valeur entre 0 et 10 ");
//IL est inutile d'utiliser des doubles-quotes échappées
print("<form action = '' method='post'>");
//le type valeur n'existe pas Il faut une espace avant />
//required assure une saisie, mais pas sa qualité
print("<input type='text' required = required' name='valeurled' />");
print("<input type='submit' value='Envoi' />");
print("</br>");


/* Prétraitement*/
if ( isset($_POST['valeurled'])) //si la valeur a été renseignée
{
	$eclairees = intval($_POST['valeurled'], 10); //précaution supplémentaire contre les erreurs de saisie
	//$eclairees = $_POST['valeurled'];
	if ($eclairees < 0) // eclairees négatif
	{
		$eclairees = 0;
	}
	else //on aurait pu mettreun elseif
	{
		if ($eclairees > 10) //$eclairees excessif
		{
			$eclairees = 10;
		}
	}
}
else //formulaire non renseigné
{
	$eclairees= 0;
}
$eteintes = 10 - $eclairees;

/*Exploitation des résultats*/
for ($i = 1; $i <= $eclairees; $i++)
{
	echo '<img src="led_allumee.gif" alt = "allumee" />';
}
for ($i = 1; $i <= $eteintes; $i++)
{
	echo '<img src="led_eteinte.gif" alt = "eteinte" />';
}
?>

Re: Problème exercice PHP

par moogli » 28 janv. 2014, 17:30

j'ai oublier la solution tous à l'heure ...

c'est pas $i<0 mais $i< 10 qu'il faut mettre comme condition de sortie du second if

et virer le if qui pose problème.

explication :
on commence par afficher les allumées que l'on souhaite :
- boucle de zéro à la valeur souhaitée (exclue sinon il y aura une del en trop mais tu le sais déjà je pense).
A cette étape nous avons affichée x led
pour afficher ce qu'il manque c'est un problème de math simple
combien j'ai de led éteinte sachant qu'il y a 10 led en tous et que x sont allumées ?

===> 10-x led sont éteinte.
du coup
- soit tu fait le calcul (10 - x disons que c'est y) et tu fait un for qui va de zéro à y et à chaque tour de boucle tu affiche une led éteinte
- soit tu fait, comme actuellement, une boucle qui part du nombre de del allumées et qui va au nombre max de led

au final le seul if dont tu a besoin c'est pour savoir si le formulaire est posté.

tu peux virer cette ligne $valeur=$_POST['valeurled']; qui ne sert à rien.

je t'invite aussi à vérifier le type de champs qui est fournit pour éviter les ânerie (du genre que ce passe t'il si l'on saisie azerty dans le champ ?)
pour cela filter_var

pour info il est tous a fait possible de boucler sur des lettres plutot que des nombres.
exemple
<?php
for ($l = 'a'; $l<= 'z'; $l++) {
echo $l.'<br />';
}
Dernière chose :

pour la lisibilité du code tu peux largement virer les print qui affiche le formulaire ils sont totalement inutile (bon faut pas que cela soit dans un passage php quand même ;) ).

@+

Re: Problème exercice PHP

par xTG » 28 janv. 2014, 16:52

Je serai curieux d'avoir son explication oui...
Car pour moi on peut le tourner dans tous les sens c'est le chien qui se mort la queue un code de ce genre.
C'est inexcusable.
Quand on utilise une boucle for c'est qu'on connait à l'avance le nombre d'itération.
Si on modifie le nombre d'itération en cours de boucle c'est un while qu'il faut utiliser.

Re: Problème exercice PHP

par moogli » 28 janv. 2014, 13:15

Donc bon, t'as surement pas tord, mais c'est lui qui me note
ce n'est pas parce qu'il est profs qu'il ne peu pas apprendre.
s'il fait de la merde, tu vas apprendre a faire de la merde et au final ben .....

Tu peux en parler avec lui et voir pourquoi il fait ça et voir ce qu'il peux dire sur le cas présents (il n'a pas peux être pas prévu ce cas).


@+

Re: Problème exercice PHP

par Carlito3 » 28 janv. 2014, 13:08

Ce genre de test :
if ($_POST['valeurled']<0){$_POST['valeurled']=0;}
est à faire en dehors des boucles sous peine de modification du comportement de la boucle. ;)

Ensuite tu initialises $valeur mais ne l'utilise jamais, ce serait plus propre d'utiliser cette variable plutôt que $_POST dans tes boucles.

Sinon ton code fonctionne et affiche bien 5 led éteintes. ;)
Pour la position du if et l'utilisation de la variable, c'est ce que j'avais fais au départ. Mais j'ai modifié sur les instructions de mon prof. Donc bon, t'as surement pas tord, mais c'est lui qui me note :mrgreen:

Voila ce que moi j'ai à l'affichage
http://www.hostingpics.net/viewer.php?id=377368php.png

Re: Problème exercice PHP

par xTG » 27 janv. 2014, 19:26

Ce genre de test :
if ($_POST['valeurled']<0){$_POST['valeurled']=0;}
est à faire en dehors des boucles sous peine de modification du comportement de la boucle. ;)

Ensuite tu initialises $valeur mais ne l'utilise jamais, ce serait plus propre d'utiliser cette variable plutôt que $_POST dans tes boucles.

Sinon ton code fonctionne et affiche bien 5 led éteintes. ;)

Re: Problème exercice PHP

par synergie » 27 janv. 2014, 18:01

C'est ton 2ème for qui pose problème selon moi :

for ($i=$_POST['valeurled'];$i<0;$i++)

A la fin du premier for, i vaudra 10 par exemple. Or, tu lui dis, Pour $i<10;$i<0

Je pense que le soucis vient de là.

@+

Problème exercice PHP

par Carlito3 » 27 janv. 2014, 17:41

Bonjour à tous,

Je suis un cursus de Chef de Projet Web, et j'ai des cours de PHP pour lequel j'ai un exercice à faire. Voici l'énoncé :
Le but de ce script est de proposer à l'utilisateur, sur une page Web, un formulaire minimaliste avec une zone de saisie et un bouton de soumission nommé "Envoi". Le texte affiché en regard de la zone de saisie est :
"Saisissez une valeur entre 0 et 10 : ".
Lorsque l'utilisateur tape un nombre et clique sur "Envoi", le script affiche 10 images de la petite led (ci-jointe), dont autant en mode "allumée" (rouge) que le nombre saisi. Et le reste en mode "éteint" (gris).
Bien entendu, vous vous arrangerez pour que si l'on tape un nombre supérieur à 0, il soit traité comme zéro, et supérieur à 10, ramené à 10.
Voila le problème : J'ai réussi à intégrer mon formulaire (en mode post) ainsi qu'à lier l'affichage des LEDS à cette valeur. Quand on tape un nombre supérieur à 10, pas de soucis, on voit bien 10 LEDS rouges affichées à l'écran. Mais quand on tape un nombre négatif, par exemple -5, on verra 15 LEDS grises. Je n'arrive pas à trouver l'erreur dans mon code qui fait buger le script.

Code : Tout sélectionner

print("Saisissez une valeur entre 0 et 10 "); print("<form action=\"charles_03.php\" method=\"post\"/>"); print("<input type=\"valeur\" name=\"valeurled\"/>"); print("<input type=\"submit\" value=\"Envoi\"/>"); print("</br>"); if(isset($_POST['valeurled'])){ $valeur=$_POST['valeurled']; for ($i=0;$i<$_POST['valeurled'];$i++) { echo '<img src="led_allumee.gif" />'; if ($_POST['valeurled']>10){$_POST['valeurled']=10;} } for ($i=$_POST['valeurled'];$i<0;$i++) { echo '<img src="led_eteinte.gif" />'; if ($_POST['valeurled']<0){$_POST['valeurled']=0;} } }
Merci de votre aide en tous cas 8-)