Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1394 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  unset pose problème

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

unset pose problème

n°1839011
tete278
Posté le 16-01-2009 à 15:43:11  profilanswer
 

Bonjour à tous,
 
Je cherche à créer un texte à trous à partir des fichiers SUJET.php et CORRECTION.php  
Dans SUJET.php, je réalise un tirage au sort de valeurs issues d'un tableau multidimensionnel, affiche ces valeurs (avec les trous), que j'envoie ensuite à CORRECTION.php  
Mon problème est le suivant : Certaines lignes ne s'affichent que de façon partielle, comme par exemple ici ou la 2ème ligne est anormale.  
 
Quelle est la structure électronique de l'élément Chlore (17 électrons) ?  
Quelle est la structure électronique de l'élément a (f électrons) ?  
Quelle est la structure électronique de l'élément Phosphore (15 électrons) ?  
 
Voici un extrait de SUJET.php :
 
[code]  
// Déclaration de la matrice (tableau multidimensionnel)  
 $matrice = array('element','electrons','reponse','affichage');  
 $matrice[]=array('Hydrogène','1','(K)1','(K)<sup>1</sup>');  
 $matrice[]=array('Hélium','2','(K)2','(K)<sup>2</sup>');  
 etc.....  
 
$_SESSION['matrice']=$matrice;  
$idQuestions= array_rand($_SESSION['matrice'] , $Par);  
echo '<form action='."correction.php".' method='."post".'><ul class='."questions".'><ul>';  
 
$cpt = 0 ;  
for ($cpt = 0 ; $cpt < sizeof($idQuestions) ;$cpt ++)  
 {  
  $key = $idQuestions[$cpt];  
  $element = $_SESSION['matrice'][$key];  
  echo '<input type="hidden" name="questions[]" value="'.$key.'">';  
  echo '<li> Quelle est la structure électronique de l\'élément '.$_SESSION['matrice'][$key][0].' ('.$_SESSION['matrice'][$key][1]. ' électrons) ? '.'<input type="text" size="30" name="r['.$cpt.']" /></li>';  
 
  $question['.$cpt.'] = $_SESSION['matrice'][$key][0];  
  $electrons['.$cpt.'] = $_SESSION['matrice'][$key][1];  
  $reponse['.$cpt.'] = $_SESSION['matrice'][$key][3];  
  $attendue['.$cpt.'] = $_SESSION['matrice'][$key][2];  
 
 
  unset ($_SESSION['matrice'][$key]);   }  
?>  
<input type="hidden" name="question1" value="<?php echo $question1; ?>">  
<input type="hidden" name="electrons1" value="<?php echo $electrons1; ?>">  
<input type="hidden" name="reponse1" value="<?php echo $reponse1; ?>">  
<input type="hidden" name="attendue1" value="<?php echo $attendue1; ?>">  
 
[:code]
 
Quelle erreur ai-je pu commettre ?
Merci d'avance.
 
tete278


Message édité par tete278 le 23-01-2009 à 17:47:06
mood
Publicité
Posté le 16-01-2009 à 15:43:11  profilanswer
 

n°1839051
macgawel
Posté le 16-01-2009 à 16:20:56  profilanswer
 

Je n'ai pas la réponse à ta question.
Mais tu devrais pouvoir facilement alléger le code - et donc minimiser le risque d'erreurs.
 
en gros, ce que tu veux faire, c'est prendre un certain nombre d'éléments de ton tableau, aléatoirement. C'est ça ?
 
=> Pourquoi utiliser $_SESSION ?
Tu as ta matrice (au passage, tu devrais enlever les éléments redondants, surtout les balises <sup> - le jour où tu veux présenter autrement qu'en exposant tu es mal !).
tu génères uun tableau de valeurs aléatoires, $idQuestions.
 
Ensuite, plutôt que de travailler sur un $_SESSIONS['matrice'], sur lequel en plus tu supprimes les éléments à mesure, il suffit de prendre $matrice :

Code :
  1. $matrice[]=array('Hydrogène','1','(K)1','(K)<sup>1</sup>'); 
  2. $matrice[]=array('Hélium','2','(K)2','(K)<sup>2</sup>');
  3. ...
  4. // On met $Par index aléatoires distincts dans le tableau $idQuestions
  5. $idQuestions= array_rand($matrice , 4);
  6. // On utilise Foreach, qui est plus pratique qu'une boucle for...
  7. foreach ($idQuestions as $question) {
  8. // Plus besoins de $key, la variable $question contient la même chose
  9. // Le seul truc, c'est éventuellement de faire un compteur $cpt ou d'utiliser aussi $question
  10. // Et on va chercher dans $matrice les éléments correspondant.
  11. echo '<input type="hidden" name="questions[]" value="'.$question.'">';
  12. echo '<li> Quelle est la structure électronique de l\'élément '.$matrice[$question][0].' ('.$matrice[$question]. ' électrons) ? '.'<input type="text" size="30" name="r['.$question.']" /></li>';
  13. }

n°1839150
tete278
Posté le 16-01-2009 à 18:28:36  profilanswer
 

Bonjour macgawel,
 
1°) Tu as bien compris mon but.
2°) Pourquoi utiliser $_SESSION ? Parce que je veux tirer au sort plusieurs fois et je crains de reprendre la matrice entière à chaque fois si je ne la passais pas en SESSION.
3°) En fait, je n'ai pas d'élément redondant car je me sers des balises <sup> pour la correction et en mettant effectivement en exposant.
4°) Quant à simplifier le code, mes connaissances actuelles ne me le permettent pas.
 
Ceci étant, merci beaucoup pour ta proposition.
tete278

n°1839390
tete278
Posté le 17-01-2009 à 13:40:37  profilanswer
 

Bonjour à tous,
 
Contrairement à ce que j'écrivais dans mon 1er post, je souhaiterais apporter une rectification car, ayant supprimé la ligne contenant unset, le problème s'est répété donc le problème n'est pas lié à sa présence. Ceci étant, je ne vois toujours pas d'où vient le problème donc si quelqu'un le trouvait, cela m'ôterait une épine du pied.
Merci d'avance
 
tete278

n°1839854
macgawel
Posté le 19-01-2009 à 09:46:21  profilanswer
 

Petit truc vite fait :
var_dump($_SESSION['matrice'])
=> Te donne le contenu de ton tableau.
Ca pourrait t'aider...

n°1840996
tete278
Posté le 21-01-2009 à 11:35:48  profilanswer
 

Bonjour et merci macgawel,
 
Ton petit truc donne effectivement le contenu du tableau, ce qui peut être une aide.
 
Je rencontre un problème avec les variables r1, r2, etc. que je cherche à générer dans la ligne comprenant le code suivant :
<input type="text" size="30" name="r['.$cpt.']" />
 
Ces variables r1, r2, etc. ne se génèrent pas; saurais-tu me dire pourquoi ?
Merci encore.
tete278

n°1841001
omega2
Posté le 21-01-2009 à 11:42:21  profilanswer
 

tete278 a écrit :

<input type="text" size="30" name="r['.$cpt.']" />
 
Ces variables r1, r2, etc. ne se génèrent pas; saurais-tu me dire pourquoi ?
Merci encore.
tete278

Ne serait-ce pas par ce que tu demandes la création de "r[1]" et non pas la création de "r1" ?
Vu que tu connais maintenant var_dump, utilise le sur $_POST et $_GET et voit ce que te retourne le formulaire. ;)

n°1841550
tete278
Posté le 22-01-2009 à 13:00:44  profilanswer
 

Bonjour à tous,
 
omega2, je te remercie pour ta réponse.
J'ai modifié name="r['.$cpt.']" />  en name="r".$cpt /> sans succès.
Etant un débutant, je ne vois pas comment combiner var_dump et $_POST. Aurais-tu l'amabilité de m'éclairer davantage ?
 
Merci encore.
tete278

n°1841591
macgawel
Posté le 22-01-2009 à 14:01:08  profilanswer
 

Documentation PHP :

Citation :

var_dump($var) retourne les informations structurées d'une variable, y compris son type et sa valeur. Les tableaux et les objets sont explorés récursivement, avec des indentations, pour mettre en valeur leur structure.


$_POST est une variable particulière.
Il suffit juste de faire un var_dump($_POST); pour avoir le contenu de $_POST...
 
[Edit] Mise en valeur du lien vers la doc.


Message édité par macgawel le 22-01-2009 à 14:02:13
n°1841630
omega2
Posté le 22-01-2009 à 14:43:18  profilanswer
 

tete278 a écrit :

Bonjour à tous,
 
omega2, je te remercie pour ta réponse.
J'ai modifié name="r['.$cpt.']" />  en name="r".$cpt /> sans succès.
Etant un débutant, je ne vois pas comment combiner var_dump et $_POST. Aurais-tu l'amabilité de m'éclairer davantage ?
 
Merci encore.
tete278


Dans un "echo" :  

Citation :

name="r['.$cpt.']" />

devient

Citation :

name="r[1]" />


Citation :

name="r".$cpt />

devient

Citation :

name="r"1 />


 
Si tu regardes le code de la page telle qu'elle est reçu par ton navigateur (menu "Affichage"/"code source de la page" avec firefox par exemple) tu verras bien l'erreur que t'as faite.
Là, entre ce que je t'ai dit et ce que t'as indiqué macgawel, je ne vois pas comment t'aider d'avantage sauf à te donner la réponse. Je te laisse donc chercher un peu, tu verras qu'en regardant le code php et ce que reçoit le navigateur, t'arriveras à trouver rapidement comment écrire cette ligne.

mood
Publicité
Posté le 22-01-2009 à 14:43:18  profilanswer
 

n°1841637
tete278
Posté le 22-01-2009 à 14:52:49  profilanswer
 

Bonjour macgawel,
 
Merci pour ta réactivité. Je viens de faire ce que tu proposes, à savoir var_dump($_POST); dans le fichier correction.php et ce qui m'est retourné ne me donne pas comme variables r1, r2, etc mais seulement ceci : ["r"]=> string(2) "ee"
J'en déduis que mes variables ne sont toujours pas crées normalement et j'avoue sécher sur ce problème. Une autre piste ?
Merci d'avance.
 
tete278

n°1841648
tete278
Posté le 22-01-2009 à 15:22:09  profilanswer
 

Je vois qu'omega2 est égelement intervenu au moment où je faisais ma réponse.
J'ai modifié en mettant name="r.$cpt" et en regardant le code interprété, je retrouve exactement la même chose donc ne retrouve ni r1 ,ni r2 ...
Je suis désolé mais je sèche.
tete278

n°1841787
Profil sup​primé
Posté le 22-01-2009 à 19:37:09  answer
 

1ere erreur : tu sépares R et $cpt par un point, donc tu obtiens r.$cpt  
2eme erreur : PHP n'interprète pas les variables dans les guillemets simples :

Code :
  1. $var = 1;
  2. echo 'name="r$var"'; //affiche : name="r$var"
  3. echo "name=\"r$var\"; //affiche : name="r1"


La deuxième syntaxe (qui à l'avantage de marcher) est moins lisible (il faut échapper les guillemets doubles de l'attribut html name).
Tu peux donc faire :

Code :
  1. name="<?php echo $var ?>"

n°1841988
tete278
Posté le 23-01-2009 à 13:19:59  profilanswer
 

Bonjour luc@s et merci pour ta réponse.
 
Je n'ai vraiment pas acquis les bases car je n'avais pas vu cette erreur.
Ceci ne fonctionne néanmoins toujours pas car, en regardant dans le code vu par le navigateur j'obtiens ceci :
<input type="text" size="30" name=\"r$cpt\" /> alors que l'on devrait retrouver name = "r1" puis name = "r2", etc si je ne m'abuse.
 
Est-ce que je me trompe ?
Merci un jour, merci toujours....
tete278

n°1842027
omega2
Posté le 23-01-2009 à 14:45:37  profilanswer
 

omega2 a écrit :

Dans un "echo" ...


petit extrais de mon message précédant vu son importance par rapport à ce qui suit.  

tete278 a écrit :

Bonjour luc@s et merci pour ta réponse.
 
Je n'ai vraiment pas acquis les bases car je n'avais pas vu cette erreur.
Ceci ne fonctionne néanmoins toujours pas car, en regardant dans le code vu par le navigateur j'obtiens ceci :
<input type="text" size="30" name=\"r$cpt\" /> alors que l'on devrait retrouver name = "r1" puis name = "r2", etc si je ne m'abuse.
 
Est-ce que je me trompe ?
Merci un jour, merci toujours....
tete278

Vu ce que ton navigateur reçoit, ton texte n'est pas dans un bloc de code php et donc pas dans un echo.
Si tu veux que le php transforme le "$cpt" en une donné utile alors il faut lui dire que cette partie du fichier est du code php. Pour ça, il faut que tu ouvres un nouveau bloc php ("<?php" par exemple) et que tu le refermes plus loin ("?>" ). Tout ce qui sera entre ces deux éléments doit être du code php valide (donc pas de texte html qui traine entre ces deux balises sans être dans une chaine de caractère)
 
Le bloc php le plus court (celui qui ne prend que la variable) est : "<?php echo $cpt; ?>" (sans les guillemets)
Le bloc php raccourcis équivalent est "<?= $cpt; ?>" (attention, peut ne pas être considéré comme du php en fonction des réglages)
Si tu prends la ligne entière d'html, tu retombes dans ce que t'avais proposé plus haut avec juste "<?php" et "?>" à rajouter.

n°1842112
tete278
Posté le 23-01-2009 à 15:52:16  profilanswer
 

Bonjour omega2,
 
Je suis d'accord sur le principe que tu exposes mais il semble pourtant que mes balises indiquent bien que ce soit du php, pour preuve le code complet ci-dessous :
 

Code :
  1. <form action="membreSuite.php" method="post">
  2. <?php
  3. if (!$base)
  4. {echo 'impossible d\'ouvrir la base.';
  5. }
  6. else
  7. {
  8. $Par = 5; // Nbre maximal de lignes à afficher
  9. // Récupération de l'étape en cours'
  10. $req = "SELECT * FROM exo_resultats WHERE id =".$_SESSION['id_enregist'];
  11. $res =mysql_query($req,$link) or die ('Erreur :'.mysql_errno().mysql_error());
  12. $rows = mysql_num_rows($res);
  13. while ($rows=mysql_fetch_array($res))
  14.  {
  15.   $etape = trim($rows['etape']);
  16.  }
  17.  // Déclaration de la matrice (tableau multidimensionnel)
  18.  $matrice[]=array('Hydrogène','1','(K)1','(K)<sup>1</sup>');
  19.  $matrice[]=array('Hélium','2','(K)2','(K)<sup>2</sup>');
  20.  $matrice[]=array('Lithium','3','(K)2(L)1','(K)<sup>2</sup>(L)<sup>1</sup>');
  21.  $matrice[]=array('Béryllium','4','(K)2(L)2','(K)<sup>2</sup>(L)<sup>2</sup>');
  22.  $matrice[]=array('Bore','5','(K)2(L)3','(K)<sup>2</sup>(L)<sup>3</sup>');
  23.  $matrice[]=array('Carbone','6','(K)2(L)4','(K)<sup>2</sup>(L)<sup>4</sup>');
  24.  $matrice[]=array('Azote','7','(K)2(L)5','(K)<sup>2</sup>(L)<sup>5</sup>');
  25.  $matrice[]=array('Oxygène','8','(K)2(L)6','(K)<sup>2</sup>(L)<sup>6</sup>');
  26.  $matrice[]=array('Fluor','9','(K)2(L)7','(K)<sup>2</sup>(L)<sup>7</sup>');
  27.  $matrice[]=array('Néon','10','(K)2(L)8','(K)<sup>2</sup>(L)<sup>8</sup>');
  28.  $_SESSION['matrice']=$matrice;
  29.  shuffle($_SESSION['matrice']); // mélange aléatoirement le tableau
  30.  $_SESSION['exo1_trier']=0;
  31. }
  32. $idQuestions= array_rand($_SESSION['matrice'] , $Par); // Extrait $Par éléments de $_SESSION['matrice']
  33. echo '<form action='."membreSuite.php".'method='."post".'><ul> ';
  34. $cpt = 0 ;
  35. for ($cpt = 0 ; $cpt < sizeof($idQuestions) ;$cpt ++)
  36. {
  37.  $key = $idQuestions[$cpt];
  38.  $element = $_SESSION['matrice'][$key];
  39.  //ici, je pose la question
  40.  echo '<input type="hidden" name="questions[]" value="'.$key.'">'; // le numero de la question
  41.  echo '<li> Quelle est la structure électronique de l\'élément '.$_SESSION['matrice'][$key][0].' ('.$_SESSION['matrice'][$key][1]. ' électrons) ? '.'<input type="text" size="30" name=\"r$cpt\" /></li>';
  42.  $question['.$cpt.'] = $_SESSION['matrice'][$key][0];
  43.  $electrons['.$cpt.'] = $_SESSION['matrice'][$key][1];
  44.  $reponse['.$cpt.'] = $_SESSION['matrice'][$key][3];
  45.  $attendue['.$cpt.'] = $_SESSION['matrice'][$key][2];
  46.  unset ($_SESSION['matrice'][$key]); // Supprime l'élément en cours
  47. }
  48. echo'</ul>';
  49. ?>
  50. <input type="hidden" name="question1" value="<?php echo $question1; ?>">
  51. <input type="hidden" name="electrons1" value="<?php echo $electrons1; ?>">
  52. <input type="hidden" name="reponse1" value="<?php echo $reponse1; ?>">
  53. <input type="hidden" name="attendue1" value="<?php echo $attendue1; ?>">
  54. <input type="hidden" name="question2" value="<?php echo $question2; ?>">
  55. <input type="hidden" name="electrons2" value="<?php echo $electrons2; ?>">
  56. <input type="hidden" name="reponse2" value="<?php echo $reponse2; ?>">
  57. <input type="hidden" name="attendue2" value="<?php echo $attendue2; ?>">
  58. <input type="hidden" name="question3" value="<?php echo $question3; ?>">
  59. <input type="hidden" name="electrons3" value="<?php echo $electrons3; ?>">
  60. <input type="hidden" name="reponse3" value="<?php echo $reponse3; ?>">
  61. <input type="hidden" name="attendue3" value="<?php echo $attendue3; ?>">
  62. <input type="hidden" name="question4" value="<?php echo $question4; ?>">
  63. <input type="hidden" name="electrons4" value="<?php echo $electrons4; ?>">
  64. <input type="hidden" name="reponse4" value="<?php echo $reponse4; ?>">
  65. <input type="hidden" name="attendue4" value="<?php echo $attendue4; ?>">
  66. <input type="hidden" name="question5" value="<?php echo $question5; ?>">
  67. <input type="hidden" name="electrons5" value="<?php echo $electrons5; ?>">
  68. <input type="hidden" name="reponse5" value="<?php echo $reponse5; ?>">
  69. <input type="hidden" name="attendue5" value="<?php echo $attendue5; ?>">
  70. <input type="hidden" name="Par" value="<?php echo $Par; ?>">
  71. <input type="hidden" name="MAJ" value="<?php echo $MAJ; ?>">
  72. <input type="submit" name="connexion" value="Vérifier">
  73. </form>


Qu'en dis-tu ?
Encore merci pour ton aide.
tete278

Message cité 1 fois
Message édité par tete278 le 23-01-2009 à 17:36:24
n°1842121
omega2
Posté le 23-01-2009 à 15:57:10  profilanswer
 

J'en dis que dans ce cas, t'as pas lu le dernier message de luc@s. :pfff:  
 
et qu'en passant ton code serait plus lisible s'il était posté entre [ code] et [ /code] (sans les espaces)

n°1842181
tete278
Posté le 23-01-2009 à 16:55:09  profilanswer
 

Mille pardons omega2, mais j'ai lu le dernier message de luc@s mais ne l'ai sans doute pas compris. Il fait référence à 2 syntaxes, la première que j'ai choisie consistant à mettre

Code :
  1. "name=\"r$var\";


et la seconde  

Code :
  1. name="<?php echo $var ?>"

que je n'ai pas choisie car ajoutant les balises <?php et ?> que j'avais déjà.
 
Désolé de t'avoir énervé mais ce n'est pas de la mauvaise volonté de ma part.
tete278


Message édité par tete278 le 23-01-2009 à 17:06:42
n°1842189
omega2
Posté le 23-01-2009 à 17:01:54  profilanswer
 

Puisque tu dis avoir lu son message. De laquelle des deux lignes ci-dessous ta ligne à toi se rapproche le plus? Regarde bien, il y a une subtilité entre les deux. ;)

tete278 a écrit :

Code :
  1. echo '<li> Quelle est la structure électronique de l\'élément '.$_SESSION['matrice'][$key][0].
  2. ' ('.$_SESSION['matrice'][$key][1].
  3. ' électrons) ? '.
  4. '<input type="text" size="30" name=\"r$cpt\" /></li>';



 
EDIT : Rajout de retour à la ligne pour pas casser l'affichage du forum.


Message édité par omega2 le 23-01-2009 à 17:03:46
n°1842197
tete278
Posté le 23-01-2009 à 17:11:23  profilanswer
 

Partant du fait que ma variable d'incrémentation se nomme $cpt, ma ligne 4 se rapproche forcément davantage de sa ligne 3.
tete278
 
PS: j'ai rajouté l'antislash

n°1842204
omega2
Posté le 23-01-2009 à 17:17:29  profilanswer
 

Raté. Tes chaines commencent par ' donc ça se rapproche de sa ligne 2.

n°1842224
tete278
Posté le 23-01-2009 à 17:45:42  profilanswer
 

Op la, je ne devrais pas me lancer la dedans à mon âge ....., tu as parfaitement raison et je vais modifier ça tranquillement ce week-end à la maison et te tiens au courant.
Un grand merci et ... à bientôt.
tete278

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  unset pose problème

 

Sujets relatifs
Problème disposition d'un menu déroulant d'une barreProblème tableau php
[resolu] [ajax/mootools] problème Fx.Tween ?Problème avec Yahoo Pipes
Probleme création d'une macro [Macro Runner]Problème Internationalisation IDE
problème de HashMap résolu, mais besoin d'explications, bug JAVA ?probleme afficher image
arbre n-aire, probleme de codeprobleme php exec avec argument et espace
Plus de sujets relatifs à : unset pose problème


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR