2010-12-11 5 views
1

j'ai formulaire HTML qui ressemble à:formulaire HTML plusieurs champs

<form method="post" action="?a=up"> 
...some mysql query... 
while ($i = mysql_fetch_array($result)) { 

<input name="name[]" type="text" value="<?=$i['name'];?>" /> 
<input name="years[]" type="text" value="<?=abs($age);?>"/> 
<input name="to[]" type="checkbox" value="<?=$i['id'];?>" /> 

} 
<input name="" type="submit" value="go" /> 
</form> 

Le problème que j'ai est que je ne peux pas obtenir les valeurs des champs de formulaire comme « nom » et « années ». Je ne peux obtenir qu'une liste des identifiants (valeur de "to" checkbox).

Le code php ressemble:

$cnt = 0; 
for($p = 0; $p <= (sizeof($to)-1); $p++) 
{ 
echo $to[$p].$name[$p].$years[$p]"<br>"; 
$cnt++; 
} 

$tm = array($cnt); 

Ce que je fais mal?

Répondre

0

Mise à jour


Voici comment vous pouvez obtenir des cases à cocher qui sont contrôlés à l'aide isset:

if ($_SERVER['REQUEST_METHOD'] === 'POST'){ 
    $cnt = 0; 
    for($p = 0; $p <= (sizeof($_POST['to'])-1); $p++) 
    { 
    if (isset($_POST['to'][$p])) 
    { 
     echo $_POST['to'][$p] . $_POST['name'][$p] . $_POST['years'][$p] . "<br>"; 
     $cnt++; 
    } 
    } 

    $tm = array($cnt); 
} 

Vous ne recevez pas les champs de tableau POST, voici comment votre code devrait être:

$cnt = 0; 
for($p = 0; $p <= (sizeof($_POST['to'])-1); $p++) 
{ 
    echo $_POST['to'][$p] . $_POST['name'][$p] . $_POST['years'][$p] . "<br>"; 
    $cnt++; 
} 

$tm = array($cnt); 

Assurez-vous que le code ci-dessus exécute lorsque le formulaire est soumis en le mettant dans cet état:

if ($_SERVER['REQUEST_METHOD'] === 'POST'){ 
    $cnt = 0; 
    for($p = 0; $p <= (sizeof($_POST['to'])-1); $p++) 
    { 
    echo $_POST['to'][$p] . $_POST['name'][$p] . $_POST['years'][$p] . "<br>"; 
    $cnt++; 
    } 

    $tm = array($cnt); 
} 

Et enfin une petite suggestion que vous devriez éviter d'utiliser des balises courtes php <?=?> car ils ont posé des problèmes de sécurité et peut facilement être intégré dans des images ou xml. (Assurez-vous qu'ils sont également activés depuis php.ini si vous voulez les utiliser)

+0

@Sarfraz - Je reçois la même erreur. Les valeurs "to" listées sont correctes mais toutes les autres valeurs listées commencent par la valeur du premier champ du formulaire (qui n'est pas vérifié). Je veux obtenir la liste des valeurs du formulaire qui ont coché la case. – Sergio

+0

@Sergio: Voir ma mise à jour s'il vous plaît. – Sarfraz

+0

@Sarfraz - C'est le résultat que j'obtiens: id-of-selected-field | nom-de-champ1 | yaers-of-field1 – Sergio

0

Vous vous attendez à ce qu'une case à cocher soit un contrôle réussi même si elle n'est pas cochée (et la spécification indique qu'elle doit ne pas être ainsi).

Vous devriez probablement faire quelque chose le long des lignes de:

<input name="name[<?php echo htmlspecialchars($i['id']); ?>]" 
     value="<?php echo htmlspecialchars($i['name']); ?>" /> 
<input name="years[<?php echo htmlspecialchars($i['id']); ?>]" 
     value="<?php echo abs($age);?>"/> 
0

Pourquoi ne pas vous essayez juste

$cnt = 0; 

foreach ($_POST['to'] as $k => $to){ 
    echo $_POST['to'][$k] . $_POST['name'][$k] . $_POST['years'][$k] . "<br />"; 
    $cnt ++; 
} 

$tm = array ($cnt); 
+0

Le problème est que la valeur de $ k dans le cas de "nom" et "années" commence toujours par le zéro, pas avec la valeur sélectionnée. À la suite de cela, je reçois toujours la valeur du premier champ, mais pas de celui sélectionné. – Sergio

Questions connexes