passer une variable ARRAY dans post - un détail encore!

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 : passer une variable ARRAY dans post - un détail encore!

Re: passer une variable ARRAY dans post - un détail encore!

par Ste[PH]ane » 31 oct. 2022, 14:26

Ah ah !

Avec des recherches, de la réflexion et votre aide précieuse j'ai modifié mon code comme cela :
<?php
//Je reprends la données nombre de note à saisir pour afficher autant de input que de notes

if (isset($_POST['Envoyer'])) {
    $nbNotes = $_POST['nbnote'];
    echo '</br>';
    echo "Le nombre de note à renseigner est : " . "<strong> $nbNotes </strong>" . "</br>";
    echo '</br>';
    echo '<form action ="#" method = "POST">';
    echo '<fieldset>';
    echo '<legend>Entrer les notes</legend>';
    if ($i <= $nbNotes) {
        for ($i = 1; $i <= $nbNotes; $i++) {
// je place les notes reçues dans un tableau
            echo 'Entrer la note :  <input type="number" id="name" name="note[]" min="0" max="20"></br>';

        }
        echo '</br>';

        echo '<input type="submit" name="Calcul">';
        echo '<input id="nbNotes" name="nbNotes" type="hidden" value="' . $nbNotes . ' >';
        echo '</fieldset>';
    }
    echo '</form>';
}

if (isset($_POST['Calcul'])) {
    //je boucle sur le tableau

    foreach ($_POST['note'] as $note) {
        echo $note;
    }
}

// le problème c'est que je ne vois que la 2ème note saisie.
Du coup je récupère bien les notes :)
Je vais tenter maintenant de faire la moyenne sur cette base mais je pense que je vais me heurter au pb du nbNote.

Bref, je continue ma recherche

Re: passer une variable ARRAY dans post - un détail encore!

par sirakawa » 02 oct. 2011, 15:01

variante (mais je ne sais pas intégrer le select, alors je passe par des radio boutons
<?PHP
$liste = array(
	array("id" =>114, "nom"=>"toto"),
	array("id" =>211, "nom"=>"toton"),	
	array("id" =>331, "nom"=>"totoche")
	);
	$comment_standard = array(
		 "NUL",
		"Très insuffisant",
		"Insuffisant",
		 "Passable",
		"Assez bien",
		"Bien",
		"Très bien"
	);
print "<form method = 'post' action = 'verifier.php'><table>";
print "<table>
<tr><th>nom</th><th>note</th><th>commentaire personnel</th><th>commentaire standardisé</th></tr>";
foreach ($liste as $eleve)
{
	$id_eleve = $eleve['id'];	
	$nom_eleve = $eleve['nom'];
	$comm_std = "";
	$commentaire = "commentaire_standard";
	foreach($comment_standard as $comment)
	{
		$comm_std .= "<input type = 'radio' value = '$comment' name = 'lignes[$id_eleve][4]' />$comment<br />";
	}
	 // le champ hidden pour identifier clairement la ligne
	print "<tr><td align='left' valign='top'>$nom_eleve</td>
           <td align='left' valign='top'><input type='hidden' name='lignes[$id_eleve][1]' size='3' maxlength = '3' value = '$id_eleve' />
           <input type='text' name='lignes[$id_eleve][2]' size='3' maxlength = '3'/></td> 
          <td align='left'><textarea name='lignes[$id_eleve][3]' rows='8' cols='50'></textarea></td>
   	  <td align='left' valign='top'>$comm_std</td></tr>";

}
print "</table>
<button type = 'submit'>OK</button>
</form>
";	
?>
suivie de :
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">

<html lang = "fr">

<META http-equiv = 'Content-Type' content = 'text/html; charset = utf-8'>



<?PHP

$resultats = $_POST['lignes'];

foreach ($resultats as $ligne)

{

	$id = $ligne[1];

	$note= $ligne[2];

	$comm_perso = $ligne[3];

	$comm_std = isset($ligne[4]) ? $ligne[4] : "";

print "pour id $id, note: $note, comm perso $comm_perso, com std $comm_std <br />";

}





?>

Re: passer une variable ARRAY dans post - un détail encore!

par dick-perron » 02 oct. 2011, 09:25

Je me suis résigné à faire une série d'entrées pour chacun de mes choix comme dans l'exemple qui m'avait été donné. Je vais tenter d'améliorer le tout après l'impression des bulletins dans 2 semaines. En attendant, j'avance. La dernière chose qu'il me manque pour mon script est la chose suivante:

Comment faire pour que lorsque l'utilisateur ouvre le formulaire une deuxième fois (pour modifier une entrée par exemple), il voit dans le choix multiple, le précédent choix qu'il avait fait. je le fais apparaitre pour les autres variables.

Voici où j'en suis avec mon script. Vous verrez que ça s'améliore... Je l'espère!
<?php
session_start();





if (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
{
    $username 	= ($_SESSION['username']);
	$id_groupe 	= (isset($_POST['id_groupe']))?	$_POST['id_groupe']:null; 
	$matiere	=($_POST['matiere']);






	if ($matiere =="")
		{
			echo "Vous n'avez pas entré la matière.  Veuillez appuyer sur précédent.";
			exit();
			break;
		}
	else
		{}
	
	include ('entete_admin.html');
    include ('connexion au serveur.php');
    
    echo('<link rel="stylesheet" type="text/css" href="styles_perso.css">');



{   

	$sql = 
        "
        SELECT user_id, prenom, nom 
        FROM table_intervenant
        WHERE username='$username'
        ";
     
    $req = mysql_query($sql);  
        while($data = mysql_fetch_assoc($req))  
        {
          $nom_enseignant=$data["nom"].", ".$data["prenom"]; 
          $id_enseignant=$data["user_id"]; 
        }  

}



// *******************************************************************************

	if (isset($_POST['submit3']))
 		{
    		$id_groupe=$_POST['id_groupe'];	    	
	        $id_matiere=$_POST['matiere'];	    	
	        $nom_enseignant=$_POST['nom_enseignant'];	    	
	        $id_enseignant=$_POST['id_enseignant'];	    	


	    	$rq = 
	    		"
	    		SELECT $username.id_eleve, liste_eleves.nom 
	            FROM $username
	            INNER JOIN liste_eleves ON $username.id_eleve=liste_eleves.id_eleve
	            WHERE id_matiere='$id_groupe'
	            ORDER BY liste_eleves.nom
	           	";
	    	$result = mysql_query ($rq);	
			$tableau_resultats = array();
   		 	echo "</br>";
   		 	while ($ligne = mysql_fetch_assoc($result))
    		
    		{       
    	    	
    	    	$nom_eleve = $ligne['nom'];
    	    	$id_eleve = $ligne['id_eleve'];       
    	    	$nom_var = "individu_".$id_eleve."[]";
    	    	$nom_com_menu = "commentaire_menu_$id_eleve";
    	    	$nom_note  = "note_$id_eleve";
    	    	$nom_com ="commentaire_$id_eleve";
    	    	$note = $_POST[$nom_note];
    	    	$commentaire = $_POST[$nom_com];
    	    	$comm_menu = $_POST[$nom_com_menu];
    	    	$tableau_resultats[$id_eleve] ['id'] = $id_eleve;
    	    	$tableau_resultats[$id_eleve] ['note'] = $note;
    	    	$tableau_resultats[$id_eleve] ['comm'] = $commentaire;
    	    	$tableau_resultats[$id_eleve] ['comm_menu'] = $comm_menu;
			
			
			 	
				$verif=		"
							SELECT *
							FROM octobre
							WHERE (id_enseignant='$id_enseignant' AND groupe='$id_groupe' AND id_eleve='$id_eleve')";

				$res_verif = mysql_query ($verif);
				
				if (mysql_num_rows($res_verif) != 0) 
					{
						while ($ligne_modif = mysql_fetch_assoc($res_verif))	
    						{           
 								$no_modif=$ligne_modif['no'];
								$rq2 = 	"
                        				UPDATE octobre 
                        				SET 
                        				commentaire='$commentaire', 
                        				commentaire_menu='$comm_menu', 
                        				note='$note', 
                        				matiere='$id_matiere'
                						WHERE no = '$no_modif'
                						";
                				$res2 = mysql_query ($rq2) or die (mysql_error());					
                			}	
					}
				
 		 		
 		 		else
			 		{ 
			 
						$rq = 	"
                        		INSERT INTO octobre 
                        		(id_eleve, id_enseignant, matiere, commentaire, commentaire_menu, note, nom_enseignant, nom_eleve, groupe, fait) 
                        
                    			VALUES 
                    			('$id_eleve', '$id_enseignant', '$id_matiere', '$commentaire', '$comm_menu', '$note', '$nom_enseignant', '$nom_eleve', '$id_groupe', '1')";
                		$res = mysql_query ($rq) or die (mysql_error());
                    }
 		 		
 		 		
		}
		print_r($tableau_resultats);
			exit();
			break;        	
       
}

// ************************************************************
?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

    <p class = "Section">Communication d'octobre</p>
    <p class = "Section"><?php echo"Matière (".$matiere.") -  Groupe ".$id_groupe;?></p>
    <p class = "Section"><?php echo"Enseignant : "."$nom_enseignant"?></p>
    <fieldset>


<?php  


	$verif=		"
				SELECT *
				FROM octobre
				WHERE (id_enseignant='$id_enseignant' AND groupe='$id_groupe')";

	$res_verif = mysql_query ($verif);
	
	
	$tableau_old = array();
   	echo "</br>";
   	while ($ligne_old = mysql_fetch_assoc($res_verif))	
    		{       
 	    		$id_eleve = $ligne_old['id_eleve'];       
 				$note = $ligne_old['note'];       
 				$commentaire = $ligne_old['commentaire'];       
  				$commentaire_menu = $ligne_old['commentaire_menu'];       
    	    	$tableau_old[$id_eleve] ['id'] = $id_eleve;
    	    	$tableau_old[$id_eleve] ['note'] = $note;
    	    	$tableau_old[$id_eleve] ['comm'] = $commentaire;
    	    	$tableau_old[$id_eleve] ['comm_menu'] = $commentaire_menu;
			}			



$select_partiel = "	<option></option>
					<option>Mérite des félicitation</option>
					<option>Manque d'efforts</option>
					<option>Travaille bien</option></select>";
	 
  
{
	 $sqlcom =	'SELECT commentaire
			 	FROM table_commentaires
			 	ORDER BY positif DESC, commentaire ASC
				';
	$reqcom = mysql_query($sqlcom) or die('Erreur SQL !<br><font size="2">'.$sqlcom.'<br>'.mysql_error()); 

	$select = '<select name="commentaire"><option selected="selected"></option>';
	while($datacom = mysql_fetch_assoc($reqcom)) 
	   {
	        $commentaire=$datacom['commentaire'];
	        $select .= '<option value="'.$commentaire.'">'.$commentaire.'</option>'."\n";
	   } 
	$select_partiel .= '</select>'; 
}
{
    $reqaff = 	" 
    			SELECT $username.id_eleve, id_matiere, liste_eleves.nom, liste_eleves.id_eleve  
            	FROM $username
            	INNER JOIN liste_eleves ON $username.id_eleve=liste_eleves.id_eleve
            	WHERE id_matiere='$id_groupe'
            	ORDER BY liste_eleves.nom
           		";
    $resultaff = mysql_query ($reqaff);
 }
    while ($ligne = mysql_fetch_assoc($resultaff))
        {       
            $id_eleve	=$ligne['id_eleve'];    
            $nom_eleve	=$ligne['nom'];
            $groupe		=$ligne['groupe'];
            $nom_var 	="individu_".$id_eleve."[]";
			$nom_com_menu="commentaire_menu_$id_eleve";
			$nom_note 	="note_$id_eleve";
			$nom_com	="commentaire_$id_eleve";
			$select		="<select name = '$nom_com_menu' >".$select_partiel;


			echo "<br>";
    		echo 	"<font face=Arial size=2>
        			<table align='left' cellspacing='2' cellpadding='2'><tr>
              		<td align='left' width ='150'><b>Nom de l'élève</b></td>
              		<td align='left'><b>Résultat</b></td>
              		<td align='left'><b>Commentaires</b></td>
              		<td align='left'><b>Commentaires prédéfinis</b></td>
            		</tr>
					<tr>
					<td align='left' valign='top'>$nom_eleve</td>
					<td align='left' valign='top'><input type='text' maxlength='3' size='3' name=".$nom_note." value=".$tableau_old[$id_eleve]['note']."></td>
					<td align='left'><textarea name='$nom_com' rows='8' cols='50'>".$tableau_old[$id_eleve]['comm']."</textarea></td>
					<td align='left' valign='top'>".$select."</td>
					</tr></font></table>";
      
      }

 	mysql_close(); 

?>
    </fieldset>
    <div align="center">
    <input type="submit" name="submit3" value="Valider les entrées" />
    </div>
    <input type="hidden" name="id_groupe" value="<?php echo $id_groupe;?>" />
    <input type="hidden" name="matiere" value="<?php echo $matiere;?>" />
    <input type="hidden" name="nom_enseignant" value="<?php echo $nom_enseignant;?>" />
    <input type="hidden" name="id_enseignant" value="<?php echo $id_enseignant;?>" />

    </form>

<?php

}
else
  { 
    echo"vous n'avez pas d'affaire ici !";
    exit;
  }
?>

Re: passer une variable ARRAY dans post - un détail encore!

par sirakawa » 02 oct. 2011, 09:14

parce que ton "<select name = 'commentaire'...>" ne correspond pas à la façon dont tu tentes de le relire.
   $select = '<select name="commentaire"><option selected="selected"></option>';
        while($datacom = mysql_fetch_row($reqcom))
           {
                $commentaire=$datacom[0];
                $select .= '<option value="'.$commentaire.'">'.$commentaire.'</option>'."\n";
           } 
        $select_partiel .= '</select>'; 
crée un $select de nom 'commentaire' dont il manque le "</select>" et un $select_partiel dont il manque le début.
$choix          ="<select name = '$nom_com_std' >".$select_partiel;
crée une variable $choix qui est un <select> portant le bon nom, mais sans contenu et non utilisée
<td align='left' valign='top'>".$select."</td>
utilise un <select> de même nom pour tous les élèves, nom qui ne correspond pas à la façon dont on le relit:
$nom_com_std = "commentaire_standard_$id_eleve";
$comm_std = $_POST[$nom_com_std];
Je dirais cependant que les problèmes de ce genre se résolvent en :
1) Examinant le code source produit par PHP; avec Firefox CTRL+U...
2) Faisant afficher le $_POST dans le script récepteur...

Re: passer une variable ARRAY dans post - un détail encore!

par dick-perron » 01 oct. 2011, 21:05

Quelqu'un pourrait me dire pourquoi la valeur de mon commentaire issu de la table des commentaires et choisi dans un menu déroulant par l'utilisateur ne passe pas de l'autre côté du POST ???
{
	 $sqlcom =	'SELECT commentaire
			 	FROM table_commentaires
			 	ORDER BY positif DESC, commentaire ASC
				';
	$reqcom = mysql_query($sqlcom) or die('Erreur SQL !<br><font size="2">'.$sqlcom.'<br>'.mysql_error()); 

	$select = '<select name="commentaire"><option selected="selected"></option>';
	while($datacom = mysql_fetch_row($reqcom)) 
	   {
	        $commentaire=$datacom[0];
	        $select .= '<option value="'.$commentaire.'">'.$commentaire.'</option>'."\n";
	   } 
	$select_partiel .= '</select>'; 
}
{
    $reqaff = 	" 
    			SELECT $username.id_eleve, id_matiere, liste_eleves.nom, liste_eleves.id_eleve  
            	FROM jambon
            	INNER JOIN liste_eleves ON $username.id_eleve=liste_eleves.id_eleve
            	WHERE id_matiere='$id_groupe'
            	ORDER BY liste_eleves.nom
           		";
    $resultaff = mysql_query ($reqaff);
 }
    while ($ligne = mysql_fetch_assoc($resultaff))
        {       
            $id_eleve	=$ligne['id_eleve'];    
            $nom_eleve	=$ligne['nom'];
            $groupe		=$ligne['groupe'];
            $nom_var 	="individu_".$id_eleve."[]";
			$nom_com_std="commentaire_standard_$id_eleve";
			$nom_note 	="note_$id_eleve";
			$nom_com	="commentaire_$id_eleve";
			$choix		="<select name = '$nom_com_std' >".$select_partiel;


			echo "<br>";
    		echo "	<font face=Arial size=2>
        			<table align='left' cellspacing='2' cellpadding='2'><tr>
              		<td align='left' width ='150'><b>Nom de l'élève</b></td>
              		<td align='left'><b>Résultat</b></td>
              		<td align='left'><b>Commentaires</b></td>
              		<td align='left'><b>commentaires prédéfinis</b></td>
            		</tr>
					<tr>
					<td align='left' valign='top'>$nom_eleve</td>
					<td align='left' valign='top'><input type='text' name='$nom_note' size='3' maxlength = '3'/></td>
					<td align='left'><textarea name='$nom_com' rows='8' cols='50'></textarea></td>
					<td align='left' valign='top'>".$select."</td>
					</tr></font></table>";
      
      }


et de l'autre côté du POST
	if (isset($_POST['submit3']))
 		{
    		$id_groupe=$_POST['id_groupe'];	    	
	    	$rq = 
	    		"
	    		SELECT jambon.id_eleve, liste_eleves.nom 
	            FROM jambon
	            INNER JOIN liste_eleves ON $username.id_eleve=liste_eleves.id_eleve
	            WHERE id_matiere='$id_groupe'
	            ORDER BY liste_eleves.nom
	           	";
	    	$result = mysql_query ($rq);	
			$tableau_resultats = array();
   		 	echo "</br>";
   		 	while ($ligne = mysql_fetch_assoc($result))
    		
    		{       
    	    	
    	    	$nom_eleve = $ligne['nom'];
    	    	$id_eleve = $ligne['id_eleve'];       
    	    	$nom_var = "individu_".$id_eleve."[]";
    	    	$nom_com_std = "commentaire_standard_$id_eleve";
    	    	$nom_note  = "note_$id_eleve";
    	    	$nom_com ="commentaire_$id_eleve";
    	    	$note = $_POST[$nom_note];
    	    	$commentaire = $_POST[$nom_com];
    	    	$comm_std = $_POST[$nom_com_std];
    	    	$tableau_resultats[$id_eleve] ['id'] = $id_eleve;
    	    	$tableau_resultats[$id_eleve] ['note'] = $note;
    	    	$tableau_resultats[$id_eleve] ['comm'] = $commentaire;
    	    	$tableau_resultats[$id_eleve] ['comm_std'] = $comm_std;
			
			
				echo 	$ligne['id_eleve'].$ligne['nom'].
						"eleve ".$tableau_resultats[$id_eleve]['id'].
						" a ".$tableau_resultats[$id_eleve]['note'].
						" et ".$tableau_resultats[$id_eleve]['comm'].
						" comme commentaire".
						" et ".$tableau_resultats[$id_eleve]['comm_std'].
						" comme commentaire choix".
						"</br>";
			
			
			
			}			
	
			
			exit();
			break;        	
       	}

Re: passer une variable ARRAY dans post - résolu!!!

par dick-perron » 01 oct. 2011, 20:03

Merci tout le monde! Mon problème est réglé. Maintenant que c'est fait, je termine mes autres scripts et je post la solution à mon problème. Maintenant J'AI COMPRIS!!

Re: passer une variable ARRAY dans post - (voir j'y suis pre

par sirakawa » 01 oct. 2011, 15:46

Il fallait distinguer entre ce que voit l'utilisateur, un tableau, et la structure interne qui, ici, est très facile à comprendre.
Je proposerai quand j'aurai un moment, une autre solution avec des tableaux en saisie...
<?PHP
$liste = array(
	array("id" =>114, "nom"=>"toto"),
	array("id" =>211, "nom"=>"toton"),	
	array("id" =>331, "nom"=>"totoche")
	);
$select_partiel = "<option>TB</option><option>B</option></select>";
print "<form method = 'post' action = 'verifier.php'><table>";
//La saisie a l'aspect d'une table, mais chaque champ a un nom personnel
// C'est à la récupéation qu'on en fera un tableau
foreach ($liste as $eleve)
{
	$nom_eleve = $eleve['nom'];
	$id_eleve = $eleve['id'];	
	$nom_var = "individu_".$id_eleve."[]";
	$nom_com_std = "commentaire_standard_$id_eleve";
	$nom_note  = "note_$id_eleve";
	$nom_com ="commentaire_$id_eleve";
	$select ="<select name = '$nom_com_std' >".$select_partiel;
	// j'utilise print pour que les noms des variables soient évalués mais ça marche avec echo "..." au lieu de echo '...'
	print "<tr><td align='left' valign='top'>$nom_eleve</td>
                  <td align='left' valign='top'><input type='text' name='$nom_note' size='3' maxlength = '3'/></td>
                  <td align='left'><textarea name='$nom_com' rows='8' cols='50'></textarea></td>
   			   	  <td align='left' valign='top'>$select</td></tr>";

}
print "</table>
<button type = 'submit'>OK</button>
</form>";	
lu par :
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang = "fr">
<META http-equiv = 'Content-Type' content = 'text/html; charset = utf-8'>
<?PHP
$liste = array(
	array("id" =>114, "nom"=>"toto"),
	array("id" =>211, "nom"=>"toton"),	
	array("id" =>331, "nom"=>"totoche")
	);
$tabeau_resultats = array();
foreach ($liste as $eleve)
{
	$nom_eleve = $eleve['nom'];
	$id_eleve = $eleve['id'];	
	$nom_var = "individu_".$id_eleve."[]";
	$nom_com_std = "commentaire_standard_$id_eleve";
        $nom_note  = "note_$id_eleve";
	$nom_com ="commentaire_$id_eleve";
	$note = $_POST[$nom_note];
	$commentaire = $_POST[$nom_com];
	$comm_std = $_POST[$nom_com_std];
	$tableau_resultats[$id_eleve] ['id'] = $id_eleve;
	$tableau_resultats[$id_eleve] ['note'] = $note;
	$tableau_resultats[$id_eleve] ['comm'] = $commentaire;
	$tableau_resultats[$id_eleve] ['comm_std'] = $comm_std;
}

print_r($tableau_resultats);	
?>

	

Re: passer une variable ARRAY dans post

par dick-perron » 01 oct. 2011, 01:39

Si tu as quelques minutes je t'explique plus clairement. Je réalise en relisant le post que je semble tourner en rond, mais je ne suis pas si nul que ça!

1. J'ai un formulaire issu d'une boucle sql (chaque élève du groupe de l'enseignant, son résultat (à fournir), deux commentaires (à fournir dont un issu d'un menu déroulant)
2. chaque enseignant le complète.
3. Il soumet le formulaire.
4. Les infos vont dans une BDD.
5. À partir des infos de tous les profs, on produit un bulletin.

J'ai donc la possibilité au niveau structure d'avoir:
a. (id_eleve1, resultat1, commentaire_perso1, commentaire1)
(id_eleve2, resultat2, commentaire_perso2, commentaire2)

ou

b. entree1(id_eleve, resultat, commentaire_perso, commentaire)
entree2(id_eleve, resultat, commentaire_perso, commentaire)


Ensuite après le "ok" j'insère tout ça dans la BDD.

Suis-je plus clair?

Re: passer une variable ARRAY dans post

par moogli » 01 oct. 2011, 01:22

perso globalement je ne comprend rien a ce que tu veux faire, les infos fournis dans le formulaire sont envoyé au fichier "action" de ta déclaration de formulaire !
donc dans verifier.php il a toute les infos du formulaire, les autres info sont récupéré a partir de ce qu'il y a dans le formulaire ...

@+

Re: passer une variable ARRAY dans post

par dick-perron » 01 oct. 2011, 01:00

Si quelqu'un a quelques minutes à me consacrer, j'apprécierais grandement.

Merci!

Re: passer une variable ARRAY dans post

par dick-perron » 30 sept. 2011, 22:33

Ce n'était pas vraiment le sens de ma question, je n'étais pas assez clair. Ce n'est pas la valeur du array que je voulais récupérer, mais celle entrée par l'utilisateur.

Je crois que je commence à comprendre mon problème. Par exemple, dans le code précédent, je lis les valeurs du array, je les place dans un formulaire (très pratique si l'utilisateur à déjà entré des données dans une session précédente). Je croyais que $entree était une variable array. Je vois bien maintenant que ce n'est pas le cas. J'en déduis donc que je dois créer une variable array qui contiendra les résultats entrés lors de l'appui sur le bouton ok. Est-ce que cette variable est créée comme la première? Est-ce que je crée une boucle pour la remplir? Est-ce que je dois la serializer pour l'envoyer à verifier.php? Je la fait afficher comment dans verifier.php?

Re: passer une variable ARRAY dans post

par moogli » 30 sept. 2011, 22:10

$liste[1]['commentaire_perso'] pour le second commentaire ..

@+

Re: passer une variable ARRAY dans post

par dick-perron » 30 sept. 2011, 21:52

J'ai passé la journée à essayer de comprendre les Array et je crois que ça s'en vient! Afin de progresser dans mon script, j'aurais besoin de deux infos:

1 dans le script qui suit, comment je fais afficher, dans le echo du bas, seulement le commentaire 2 (comm_2) ou le resultat 3(res_3)?...pas tout le tableau.
2 dans le verifier.php comment je peut faire afficher le commentaire 2 (comm_2) ou le resultat 3(res_3)?

Si j'ai les réponses à ces questions, je crois que je pourrai arriver à terminer mon script. En attendant vos réponses, je continue à fouiller.
<?PHP

$liste = array(
        array("id_eleve"=>"1","commentaire_perso" =>"com_perso_1","commentaire"=>"com_1","resultat"=>"res_1"),
        array("id_eleve"=>"2","commentaire_perso" =>"com_perso_2","commentaire"=>"com_2","resultat"=>"res_2"),      
        array("id_eleve"=>"3","commentaire_perso" =>"com_perso_3","commentaire"=>"com_3","resultat"=>"res_3")
        ); // pour pouvoir tester simule la bdd


$i=1;
$entree = "";


foreach ($liste as $eleve)
{
        $id_eleve = $eleve['id_eleve'];     
        $commentaire_perso = $eleve['commentaire_perso'];
        $commentaire = $eleve['commentaire'];     
        $resultat = $eleve['resultat'];     

        $nom_var = "individu_".$id_eleve."[]";
        $entree.= "
        <p>
        <input type = 'text' readonly = 'readonly' name ='$nom_var' value = '$commentaire_perso' />
        <input type = 'text' readonly = 'readonly' name ='$nom_var' value='$commentaire' />
        <input type = 'text' readonly = 'readonly' name ='$nom_var' value='$resultat' />";
        $i++;
}

*****************************************
echo ????????????????????????????????????;
*****************************************
/*  print "
	<form method = 'post' action = 'verifier.php'>
	$entree
	<button type = 'submit'>OK</button>
	</form>

";
 */

Re: passer une variable ARRAY dans post

par sirakawa » 30 sept. 2011, 13:00

Je mets peu à peu de l'ordre dans mes affaires. voici où j'en suis. Mon formulaire affiche très bien, mes champs peuvent être remplis. j'ai mis un indice aux variables (id_eleve). Maintenant, comment je peux pousser tout ça à mon autre script?
    while ($ligne = mysql_fetch_assoc($result))
        {       
            $id_eleve=$ligne["id_eleve"];    
            $nom_eleve=$ligne["nom"];
            $groupe=$ligne["groupe"];    

// ******* valeurs que je veux passer ****************

            echo '<td align="left" valign="top">'.$nom_eleve.'</td>
                  <td align="left" valign="top"><input type="text" name="resultat[$id_eleve]" size="3" maxlength = "3"/><br></td>
                  <td align="left"><textarea name="commentaire_perso[$id_eleve]"rows="8" cols="50"></textarea></td>
   			   	  <td align="left" valign="top">'.$select.'</td></tr>';

// ******* que dois-je mettre ici pour passer le id_eleve, nom_eleve, groupe, resultat, commentaire_perso et commentaire (qui vient du select) ? 
Tu crées ainsi un tableau $resultat dont chaque ligne sera le résultat de l'élève concerné, un tableau $commentaire_perso dont chaque ligne sera le commentaire de l'élève concerné.
Pour le select, solution alignée sur tes autres choix:

//..
// Ajout MB..
$select_partiel = "<option>TB</option><option>B</option></select>"; // on ne crée que la fin du select
print "<form method = 'post' action = 'verifier.php'><table>";

foreach ($liste as $eleve)
{
	$nom_eleve = $eleve['nom'];
	$id_eleve = $eleve['id'];	
	$nom_var = "individu_".$id_eleve."[]";
	$nom_com_std = "commentaire_standard[$id_eleve]";
        // ajout MB
	$select ="<select name = '$nom_com_std' >".$select_partiel; //quand on connait l'id de l'élève, on peut donner un nom au select
	          echo '<tr><td align="left" valign="top">'.$nom_eleve.'</td>
                  <td align="left" valign="top"><input type="text" name="resultat[$id_eleve]" size="3" maxlength = "3"/></td>
                  <td align="left"><textarea name="commentaire_perso[$id_eleve]"rows="8" cols="50"></textarea></td>
   			   	  <td align="left" valign="top">'.$select.'</td></tr>';

}
print "</table>
<button type = 'submit'>OK</button>
</form>";

Re: passer une variable ARRAY dans post

par dick-perron » 30 sept. 2011, 06:18

C'est exactement les quatre tables que j'utilise. Le système de gestion du dossier des élèves et des absences que j'ai développé fonctionne somme toutes très bien. C'est la première fois dans tous les scripts que j'ai écrits que j'ai à travailler avec des envois de tableaux et je t'avoue que je suis un peu perdu. Le reste (production du bulletin à partir de la BDD en pdf, accès aux groupes personnalisés des enseignants, etc.) est prêt, il ne me reste qu'à régler l'insertion des données du formulaire dans la bdd pour tomber dans les derniers ajustements. Je dois terminer le tout pour lundi matin et je commence à trouver que je tourne pas mal en rond. Là il est près de minuit ici et je vais aller me coucher. Demain, dès 13h30, je me remets à la tâche pour 12 longues heures. Toute aide serait appréciée. Je suis même prêt à payer un certain montant par paypal.