Petit algorithme en php

Petit nouveau ! | 2 Messages

06 juil. 2012, 21:50

Bonjour à tous,
Je voulais proposer à mes élèves l'écriture d'un petit algorithme dans différents langages informatiques. Hélas, pour ce qui est de php, je coince assez rapidement! Voilà l'objectif.
1. demander le nombre de réactifs (I) et le nombre de produits (J).
ça, j'ai réussi:

Code : Tout sélectionner

<form action="masse.php" method="post"> <p> <label for="I">Entrer le nombre de réactifs</label> <input type="text" name="I" id="I" /> </p> <p> <label for="J">Entrer le nombre de produits</label> <input type="text" name="J" id="J" /> </p> <p> <input type="submit" value="Envoyer ces informations" /> </p> </form>
Ensuite, il s'agit de demander à l'utilisateur d'introduire les masses des réactifs m et les masses des produits m[J]. C'est là que je perds les pédales. Comment stocker les valeurs de m et m[J] et les utiliser dans une page calcul.php? Voici mon essai (qui ne fonctionne pas):

Code : Tout sélectionner

<?php $I = $_POST['I']; $J = $_POST['J']; echo '<h1>'.$I.' réactifs et '.$J.' produits </h1>'; echo '<form action="calcul.php" method="post">'; for($N = 1; $N <= $I; $N += 1) { echo '<p>'; echo '<label for="m.$N">Entrer la masse m_'.$N.' du réactif '.$N.'</label>'; echo '<input type="m.$N" name="m.$N" id="m.$N" />'; echo '</p>'; } echo '<p>'; echo '<input type="submit" value="Enregistrer" />'; echo '</p>'; echo '</form>'; ?>
J'ose à peine vous montrer le code que j'ai imaginé pour la page calcul.php, déjà juste pour afficher les masses des réactifs introduites (message d'erreur à la clé):

Code : Tout sélectionner

<?php for(i = 1; i <= $N; i+ = 1) { echo ${m.$N} '<br />'; } ?>
je compte sur vos lumières et vos précieux conseils!!

ViPHP
xTG
ViPHP | 7331 Messages

07 juil. 2012, 09:49

$N n'est pas défini, je suppose que c'est cela l'erreur dont tu parles. ;)
Tu peux en utiliser la notation tableau t'affranchir du passage de cette variable.
Exemple :
<form action="traitement.php" method="POST">
  <input type="text" name="tab[0]" />
  <input type="text" name="tab[1]" />
  <input type="text" name="tab[2]" />
</form>
<?php
if( isSet($_POST['tab']) ){
  foreach($_POST['tab'] as $index => $valeur){
    echo $index . ' => ' . $valeur . '<br />';
  }
}

Petit nouveau ! | 2 Messages

07 juil. 2012, 15:58

Merci pour ces conseils! Y a-t-il moyen de ne pas connaître à l'avance le nombre d'entrée du tableau? L'idéal ce serait de demander la valeur de i, et de créer un tableau avec tab[$i]. Est-ce possible?

ViPHP
xTG
ViPHP | 7331 Messages

07 juil. 2012, 17:07

Dans mon script seul le formulaire connait le nombre de valeurs. Donc je ne vois pas où tu veux en venir.

araganad
Invité n'ayant pas de compte PHPfrance

27 oct. 2013, 02:38

J'ai du mal a comprendre se que vous voulez faire mais je vais comme même vous proposer une idée enfin plutot un sorte de schéma qui pourrais etre simple a realiser.
Pour commencer votre formulaire de saisi il est bon, juste au niveau de action ou il est pas obliger de metre un valeur.
 <form action="" method="post"> 
<p> <label for="I">Entrer le nombre de réactifs</label> 
<input type="text" name="I" id="I" /> </p>
 <p> <label for="J">Entrer le nombre de produits</label> 
<input type="text" name="J" id="J" /> </p> 
<p> <input type="submit" value="Envoyer ces informations" /> </p>
 </form> 
Voila après se que vous conseil ces faire une simple saisi de texte l'orsque le bouton submit est actionner, vous recuprer les valeur puis les enregistrer dans un variable qui ne se supprime pas au changement de la page exemple : SESSION ou COOKIES.
<?php
If(isset($_POST['submit']
{
 $_SESSION['I'] = $_POST['I']; //vous récupérer les valeur saisi au niveau du formulaire. Et les incorporer dans les variable SESSION
$_SESSION['J'] = $_POST['J'];
}?>
Pour finir au niveau de votre page calcule vous pouvez récupéré les valeur en l'utilisant les variable SESSION.
Il ne faut pas oublier au debut de la page calcule d'ouvrire la variable SESSION :
<?php 
SESSION_start(); 
// Votre autre formulaire plus le calcule etc.
?>
Je suis desole j'écrie avec mon téléphone donc niveau fautes etc.

Mammouth du PHP | 2278 Messages

27 oct. 2013, 11:24

Autant se conformer à la norme HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
	</head>
<body>
<form method = 'post' action= 'calcul.php'>
<table border ='1'>
	<caption>
		Entrez ci-dessous les masses intervenant dans le calcul
		</caption>
	<tr>
		<th>Réactifs</th>
		<th>Produits</th>
	</tr>
	<tr>
		<td><input name = 'i[]' /></td>
		<td><input name = 'j[]' /></td>
	</tr>
	<tr>
		<td><input name = 'i[]' /></td>
		<td><input name = 'j[]' /></td>
	</tr>
		<tr>
		<td><input name = 'i[]' /></td>
		<td><input name = 'j[]' /></td>
	</tr>
		<tr>
		<td><input name = 'i[]' /></td>
		<td><input name = 'j[]' /></td>
	</tr>
		<tr>
		<td><input name = 'i[]' /></td>
		<td><input name = 'j[]' /></td>
	</tr>
</table>
<button type = 'submit'>Calculer</button>
</form>
</body>
</html>
Certains demanderont comment faire s'il ya plus de valeurs. Ce sera l'objet d'un exercice suivant ou d'une solution en trois pages (saisie du nombre de valeurs, saisie des valeurs et calcul (ou en deux pages avec du javascript, o en tout php)

 <?php
 
 print "Tout le post<br />";
 print_r($_POST);
 	//il faut toujours au moins vérifier que les valeurs ont été postées
	$i = isset($_POST['i']) ? $_POST['i'] : "";
	$j = isset($_POST['j']) ? $_POST['j'] : "";
print "<br />tableau i <br />";
print_r($i);
print "<br />tableau j <br />";
print_r($j);
// Je préfère préparer l'affichage dans le calcul et l'effectuer en fin de script. Ca évite les echo multiples et les ennuis 
// avec les concaténations.
$chaine = "";
$chaine = "<table border ='1'><tr><caption>Résultats des calculs</caption>";
$chaine .= "<tr><th>Réactif</th><th>Produit</th><th>Résultat</th></tr>";
$res = array();  //tableau au cas où les valeurs et résultats devraient êtreb réutilisés
for ($nb = 0; $nb <5;$nb++)
{

	//On teste que les valeurs passées ont une tête de nombres
	if (
			(is_numeric($i[$nb]))
			and
			(is_numeric($j[$nb]))			
		)
		
		{
		$resultat = $i[$nb]*$j[$nb];
		$res[$nb]['i'] = $i[$nb];
		$res[$nb]['j'] = $j[$nb];
		$res[$nb]['resultat' ]= $resultat;		
		$chaine .= "<tr><td>$i[$nb]</td><td>$j[$nb]</td><td>$resultat</td>";
	}
	
}
print "<br />tableau php  <br />";
print_r($res);
print "$chaine";
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
xTG
ViPHP | 7331 Messages

27 oct. 2013, 15:59

Vous vous rendez compte que vous répondez à un message vieux de plus d'un an ? :non: