unset pose problème - PHP - Programmation
Marsh Posté le 16-01-2009 à 16:20:56
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 :
|
Marsh Posté le 16-01-2009 à 18:28:36
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
Marsh Posté le 17-01-2009 à 13:40:37
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
Marsh Posté le 19-01-2009 à 09:46:21
Petit truc vite fait :
var_dump($_SESSION['matrice'])
=> Te donne le contenu de ton tableau.
Ca pourrait t'aider...
Marsh Posté le 21-01-2009 à 11:35:48
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
Marsh Posté le 21-01-2009 à 11:42:21
tete278 a écrit : <input type="text" size="30" name="r['.$cpt.']" /> |
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.
Marsh Posté le 22-01-2009 à 13:00:44
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
Marsh Posté le 22-01-2009 à 14:01:08
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.
Marsh Posté le 22-01-2009 à 14:43:18
tete278 a écrit : Bonjour à tous, |
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.
Marsh Posté le 22-01-2009 à 14:52:49
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
Marsh Posté le 22-01-2009 à 15:22:09
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
Marsh Posté le 22-01-2009 à 19:37:09
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 :
|
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 :
|
Marsh Posté le 23-01-2009 à 13:19:59
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
Marsh Posté le 23-01-2009 à 14:45:37
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. |
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.
Marsh Posté le 23-01-2009 à 15:52:16
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 :
|
Qu'en dis-tu ?
Encore merci pour ton aide.
tete278
Marsh Posté le 23-01-2009 à 15:57:10
J'en dis que dans ce cas, t'as pas lu le dernier message de luc@s.
et qu'en passant ton code serait plus lisible s'il était posté entre [ code] et [ /code] (sans les espaces)
Marsh Posté le 23-01-2009 à 16:55:09
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 :
|
et la seconde
Code :
|
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
Marsh Posté le 23-01-2009 à 17:01:54
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 :
|
EDIT : Rajout de retour à la ligne pour pas casser l'affichage du forum.
Marsh Posté le 23-01-2009 à 17:11:23
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
Marsh Posté le 23-01-2009 à 17:17:29
Raté. Tes chaines commencent par ' donc ça se rapproche de sa ligne 2.
Marsh Posté le 23-01-2009 à 17:45:42
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
Marsh Posté le 16-01-2009 à 15:43:11
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; ?>">
Quelle erreur ai-je pu commettre ?
Merci d'avance.
tete278
Message édité par tete278 le 23-01-2009 à 17:47:06