Php utilisation de variable dans $_POST

Fermé
Aeze - 25 janv. 2011 à 12:29
 Aeze - 25 janv. 2011 à 17:45
Bonjour,
J'ai lu beaucoup de posts de nombreux forums, qui me donnent des avis contradictoires.
Voici mon pronblème : je remplis un formulaire dans un fichier ajoutligne.php qui envoie ses données dans ajout.php. Je souhaite que l'utilisateur (il s'agit de la session admin, donc c'est très moche) choisisse le nombre de saisies qu'il souhaite effectuer, saisie qu'il fait via des prompts javascript et qui sont insérées dans des input hidden. Le nom de ces input est tout bonnement un nombre partant de 1 jusqu'au nombre de saisies effectuées. Dans ajout.php je souhaite les récupérer en utilisant une variable $i qui va idem de 1 au nombre souhaité à l'intérieur de $_POST. J'obtiens cependant l'erreur Undefined offset.
Je vous poste mon code :

Ajoutligne.php :

<?php
session_start();
?>
<html>
<head>
</head>
<body>
<?php
try
{
if ($_SESSION['from_form'])
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=panjiia', 'root', '', $pdo_options);
echo "Ajout de lignes au formulaire ".$_SESSION['lib_form'];
?>
<form method="post" action="ajout.php" id="form" name="form">
<p><label for="newline">Saisir le libellé d'une question</label> : <input type="text" id="newline" name="newline" size="100" maxlength="200">
<br/><label for="type">Type de question</label> :
<select name="type" id="type">
<option>Radio
<option>CheckBox
<option>Liste
<option>Texte
</select>
<br/><label for="nombre">Nombre d'options possibles (sauf texte)</label> : <input type="text" id="nombre" name="nombre">
<br/><input type="button" value="Valider puis ajouter" id="ok_add">
<input type="button" value="Valider puis terminer" id="ok_end">
<script type="text/javascript">
var add = document.getElementById('ok_add');
var end = document.getElementById('ok_end');
var form = document.getElementById('form');
end.onclick = function ()
{
var nombre = document.getElementById('nombre').value;
var limite = parseInt(nombre);
var i = 1;
while (i <= limite)
{
var reponse = document.createElement('input');
reponse.type = 'hidden';
var indice = i+'';
reponse.name = indice;
reponse.value = prompt('Saisir une réponse :');
i++;
}
form.submit();
}
</script>
</form>
<?php
}
}
catch (exception $e)
{
die('Erreur : '.$e->getmessage());
}
?>
</body>
</html>


Ajout.php :

<?php
session_start();
$nombre = intval($_POST['nombre']);
for ($i = 1; $i <= $nombre; $i++)
{
echo $_POST[$i];
}
?>

Voilà, j'ai lu que c'était possible, mais aussi que ça ne l'était pas.
Merci d'avance pour vos réponses.


A voir également:

7 réponses

Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
25 janv. 2011 à 12:36
Undefined offset signifie que l'indice n'existe pas.
Soit dit en passant, l'index d'un tableau (sa première ligne) est 0.
Celà ne va donc pas de 1 à n, mais de 0 à (n - 1).

for ($i = 0; $i <= $nombre - 1; $i++)
{
echo $_POST[$i];
} 


Je n'ai pas regardé ton code donc ej sais pas s'il y a d'autres erreurs.
0
Oui je sais que ça commence à 0, cependant je les nommes ces variables, et je les nomme de 1 à n. De plus j'ai l'erreur pour toutes les valeurs de i, et pas seulement pour la derniere, donc le problème ne vient pas de là je pense.
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
Modifié par Akronos le 25/01/2011 à 13:15
Hmmm...
echo '######## Tableau POST:<pre>';  
print_r($_POST);  
echo '</pre>';  


Voyons ce que t'as dedans (j'insiste sur le fait que Undefined offset signifie que l'indice n'existe pas). de plus normalement l'erreur est: Notice Undefined offset: n (ou n correspond à l'index qui pose problème et qui n'existe pas).
0
Ah ok merci ça me met sur un piste. Il semblerait que les input hidden à l'intérieur de la boucle du javascript de sont pas envoyées dans le POST. Si je met un alert, elle sont bien affichées. J'en conclut que l'erreur est bien dans l'envoi. Mais pourquoi les autres données sont-elles envoyées ?

Excusez moi si je pose des questions naïves, je ne fais du php que depuis une semaine.
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
25 janv. 2011 à 13:49
Ctrl+U pour voir le code source de la page, vérifie qu'il y a bien les hidden avec le bon name et id. J'en doute.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dans le source je retrouve exactement ce que j'ai écrit dans notepad (il me semble que c'est normal vu que je fais ces hiden en javascript), et donc ils apparaissent bien.
Ca devient rageant je suis là-dessus depuis 2 jours >_<
0
Akronos Messages postés 140 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011 32
25 janv. 2011 à 17:06
Tu peux faire un copié collé du source dans les balise < code> et </ code> ?
0
Ajourligne.php :

<?php 
session_start(); 
?> 
<html> 
<head> 
</head> 
<body> 
<?php 
try 
{ 
if ($_SESSION['from_form']) 
{ 
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 
$bdd = new PDO('mysql:host=localhost;dbname=panjiia', 'root', '', $pdo_options); 
echo "Ajout de lignes au formulaire ".$_SESSION['lib_form']; 
?> 
<form method="post" action="ajout.php" id="form" name="form"> 
<p><label for="newline">Saisir le libellé d'une question</label> : <input type="text" id="newline" name="newline" size="100" maxlength="200"> 
<br/><label for="type">Type de question</label> : 
<select name="type" id="type"> 
<option>Radio 
<option>CheckBox 
<option>Liste 
<option>Texte 
</select> 
<br/><label for="nombre">Nombre d'options possibles (sauf texte)</label> : <input type="text" id="nombre" name="nombre"> 
<br/><input type="button" value="Valider puis ajouter" id="ok_add"> 
<input type="button" value="Valider puis terminer" id="ok_end"> 
<script type="text/javascript"> 
var add = document.getElementById('ok_add'); 
var end = document.getElementById('ok_end'); 
var form = document.getElementById('form'); 
end.onclick = function () 
{ 
var nombre = document.getElementById('nombre').value; 
var limite = parseInt(nombre); 
var i = 1; 
while (i <= limite) 
{ 
var reponse = document.createElement('input'); 
reponse.type = 'hidden'; 
var indice = i+''; 
reponse.name = indice; 
reponse.value = prompt('Saisir une réponse :'); 
i++; 
} 
form.submit(); 
} 
</script> 
</form> 
<?php 
} 
} 
catch (exception $e) 
{ 
die('Erreur : '.$e->getmessage()); 
} 
?> 
</body> 
</html>


Ajout.php :

<?php 
session_start(); 
$nombre = intval($_POST['nombre']); 
for ($i = 1; $i <= $nombre; $i++) 
{ 
echo $_POST[$i]; 
} 
?>


Excusez-moi je n'avais pas vu ce bouton.
0
Pour ceux qui rencontreraient le même problème : j'ai trouvé ! :D
De ce que j'ai lu ce que j'avais fait devrait marcher sur FireFox mais pas sur IE (j'avouerai honteusement que je n'ai pas vérifié sur FF).
Il faut pour IE rajouter dans la boucle javascript :

while (i <= limite) 
{ 
var reponse = document.createElement('input'); 
reponse.type = 'hidden'; 
var indice = i+''; 
reponse.name = indice; 
reponse.value = prompt('Saisir une réponse :'); 
form.appendChild(reponse);  //    <- Ceci.
i++; 
}
0