2010-12-11 6 views
1

Ich habe HTML-Formular, das wie folgt aussieht:HTML-Formular mehr Felder

<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> 

Das Problem, das ich habe ist, dass ich nicht die Werte der Formularfelder wie „Name“ und „Jahre“ erhalten kann. Ich kann nur eine Liste der IDs (Wert von "bis" Checkbox) bekommen.

Der PHP-Code wie folgt aussieht:

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

$tm = array($cnt); 

Was ich falsch tue?

Antwort

0

aktualisieren


Hier ist, wie Sie Kontrollkästchen erhalten können, die isset verwenden checked:

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); 
} 

Sie sind nicht immer die Felder aus POST Array, hier ist, wie Sie Ihren Code sollte sein:

$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); 

Stellen Sie sicher, dass obige Code ausgeführt wird, wenn Form, indem sie eingereicht wird es in diesem Zustand:

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); 
} 

Und schließlich ein wenig Vorschlag, dass Sie <?=?> kurze PHP-Tags vermeiden sollten für sie Sicherheitsfragen aufgeworfen haben und leicht kann eingebettet in Bilder oder XML. (Stellen Sie sicher, dass sie auch von php.ini aus aktiviert sind, wenn Sie sie verwenden möchten)

+0

@Sarfraz versuchen - ich den gleichen Fehler. Die aufgelisteten "to" -Werte sind korrekt, aber alle anderen aufgeführten Werte beginnen mit dem Wert des ersten Feldes im Formular (das nicht markiert ist). Ich möchte die Liste der Werte aus dem Formular, das Kontrollkästchen markiert haben. – Sergio

+0

@Sergio: Siehe mein Update bitte. – Sarfraz

+0

@Sarfraz - Dies ist das Ergebnis, das ich bekomme: id-of-selected-field | Feldname1 | yaers-of-field1 – Sergio

0

Sie erwarten, dass ein Kontrollkästchen ein erfolgreiches Steuerelement ist, auch wenn es nicht aktiviert ist (und in der Spezifikation steht, dass es muss nicht so sein).

Sie sollten wahrscheinlich etwas entlang der Linien von tun:

<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

Warum gerade nicht Sie

$cnt = 0; 

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

$tm = array ($cnt); 
+0

Das Problem ist, dass der Wert von $ k im Fall von "name" und "years" immer mit der Null beginnt, nicht mit dem ausgewählten Wert. Als Ergebnis bekomme ich immer den Wert des ersten Feldes, aber nicht des ausgewählten. – Sergio

Verwandte Themen