Problème de sélection sur table de multiplication

Petit nouveau ! | 3 Messages

17 nov. 2014, 20:31

Bonjour,

Je suis actuellement en DUT informatique et notre prof nous demande de rendre un travail. Il s'agit de faire une table de multiplication et d'addition pour les nombres de 1 à 9. En gros on clique sur le bouton "x" et sur "8" et on a la table de multiplication de 8. Mais j'ai un problème à ce niveau, ça m'affiche toujours la table de multiplication et jamais celle des additions...Voici mon code :
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8" />
	<title>TP8 programmation Web</title>
	<link rel="shortcut icon" type="image/x-icon" href="iconeweb.ico" />
	<link href="tp8_style.css" rel="stylesheet" />
</head>
<body>
<header><h2>Tables de multiplication pour le primaire</h2></header>  
<nav>
<a href="TP8_page1_etudiant.php?signe=1"> x </a>
<a href="TP8_page1_etudiant.php?mult=1"> 1 </a>
<a href="TP8_page1_etudiant.php?mult=2"> 2 </a>
<a href="TP8_page1_etudiant.php?mult=3"> 3 </a>
<a href="TP8_page1_etudiant.php?mult=4"> 4 </a>
<a href="TP8_page1_etudiant.php?mult=5"> 5 </a>
<a href="TP8_page1_etudiant.php?mult=6"> 6 </a>
<a href="TP8_page1_etudiant.php?mult=7"> 7 </a>
<a href="TP8_page1_etudiant.php?mult=8"> 8 </a>
<a href="TP8_page1_etudiant.php?mult=9"> 9 </a>
<a href="TP8_page1_etudiant.php?signe=2"> + </a>
</nav>        
<article>
<table>
<?php
if(isset($_GET['mult']) and ctype_digit($_GET['mult']) )
    {
    $i=$_GET['mult'];
    settype($i, "integer");
    echo "<tr><th>La table du ".$i."</th></tr>";
    for($j=1;$j<10;$j++)
    	{
       echo "<tr><td>".$j." x ".$i." = "; 
    	echo $j*$i;
    	echo "</td></tr>";
    	}
    }
elseif(isset($_GET['mult']) and ctype_digit($_GET['mult']) )
    {
    $i=$_GET['mult'];
    settype($i, "integer");
    echo "<tr><th>La table du ".$i."</th></tr>";
    for($j=1;$j<10;$j++)
        {
        echo "<tr><td>".$j." + ".$i." = "; 
        echo $j+$i;
        echo "</td></tr>";
        }
    }
?>
</table>
</article>
<footer><div>site réalisé par @@</div></footer>
</body>
</html>


Si vous pouviez m'expliquer comment remédier à ce problème, et si possible assez simplement car je ne suis pas très fort (la formation ne me plaisant pas du tout, vivement que je change....enfin on s'en fout j'vais pas raconter ma vie :P)

Merci d'avance pour votre attention et vos réponses

Nestecha
Invité n'ayant pas de compte PHPfrance

17 nov. 2014, 20:53

Regarde ton if else. Tu lui demanded "si $_GET mult existe, alors > code 1, ou si $_GET mult existe alors > code 2.

Du coup il passera toujours dans le premier.

Il faut que ta condition se fasse aussi sur les signes.

Donc tu fais un simple if où il cherche si mult existe, et à ce moment là il regardera à quoi est égal $_GET signe.

Sauf que cela ne fonctionnera pas. Puisque lorsqu'on clique sur un des nombres, on a que $_GET mult dans l'URL, pas le signe.

Donc tu dois faire autrement. Le plus simple si tu veux le faire qu'en PHP, c'est de mettre l'URL du signe avec le $_GET mult existant, comme ceci :

A la place de :
<a href="TP8_page1_etudiant.php?signe=2"> + </a>
Avoir :
<a href="TP8_page1_etudiant.php?signe=2&mult=<?= $_GET['mult'] ?>"> + </a>
Du coup, il y aura les deux paramètres dans l'URL. Lorsqu'on clique sur "8", on pourra ensuite cliquer sur "+".

Donc maintenant tu peux faire une condition demandant si $ GET signe existe, si oui tu regarde à quoi est égal $ GET signe, et alors tu fais le code en conséquence.

Petit nouveau ! | 3 Messages

17 nov. 2014, 23:15

Merci de ta réponse rapide.

J'ai néanmoins encore un problème...je ne vois pas du tout ce qu'il faut faire. Il faut que je garde la structure de la boucle
elseif
comme avant, et juste modifier les valeurs du $_GET ?

Encore désolé...j'suis vraiment pas doué :?

Nestecha
Invité n'ayant pas de compte PHPfrance

18 nov. 2014, 00:06

Pour faire simple :

Remplace la condition de ton if par if (isset $_GET['signe']), puis enleve ton else.

Ainsi tu ne regardes que si un signe a été envoyé.

Ensuite a l'intérieur de ce if, tu regardes avec un autre if, si le signe est + ou x.

De cette façon : if ($_GET['signe'] == '2')...

Ensuite à l'intérieur de chacun de ces if, lorsque c'est le signe + tu mets ton code pour l'addition, de même pour la multiplication.

Commence par là, ensuite tu as juste a copié collé ce que je t'ai mis à remplacer dans les balises <a>.

Mammouth du PHP | 2278 Messages

18 nov. 2014, 12:04

Il faut tout revoir à la base :
Il y a deux choses distinctes:
l'opérateur l'opérande
par conséquent on ne peut passe servir de <a href ="....">
commme les opérateurs ET les opérandes sont exclusifs, il faut mettre en place un formulaire avec des boutons radio pour les opérateurs et soit des boutons radio soit un select pour les opérandes.
<!DOCTYPE html>
 <html lang="fr">
 <head>
     <meta charset="utf-8" />
         <title>TP8 programmation Web</title>
         <link rel="shortcut icon" type="image/x-icon" href="iconeweb.ico" />
         <link href="tp8_style.css" rel="stylesheet" />
 </head>
 <body>
 <header><h2>Tables de multiplication pour le primaire</h2></header>  
 <nav>
 <form method = "post" action = "calcul.php">
	 <fieldset>
	 	<legend>Opérateur</legend>
	 	<label for "oper">addition</label>
	 	<!-- en mettant un checked, on  au nopérateur par défaut et la certitude qu'un choix a été fait -->
	 		<input name = "oper" type = "radio" checked = "checked" value ="+" />
	 	<label for "oper">multiplication</label>
	 		<input name = "oper" type = 'radio' value ="x" />	
	</fieldset>	
	<fieldset>
		<legend>Table de </legend>
		<label for "ande">1</label>
		<input name = "ande" type = 'radio' checked = "checked" value ="1" />
		<label for "ande">2</label>
		<input name = "ande" type = 'radio' checked = "checked" value ="2" />
	</fieldset>
	<button  type = "submit">Afficher</button>
</form> 
 </nav>        
 <article>
calcul.php
<?PHP

/* Si l'opérateur a bien été choisi, c'est à dire si on ien bien de la page prévue, l'opérateur
prernd la valeur choisie, sinon il prend la valeur arbitraire +*/
$operateur = (isset ($_POST["oper"])) ? $_POST["oper"] : "+" ;
/* Si l'operande a bien été choisi, c'est à dire si on ien bien de la page prévue, l'opérande
prernd la valeur choisie et il esty converti en entier, sinon il prend la valeur arbitraire 1*/
$operande = (isset ($_POST["ande"])) ? intval($_POST["ande"]) : 1 ;
print "$operateur $operande";

?>
<table>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 3 Messages

20 nov. 2014, 21:26

Merci à vous pour vos réponses :)