发布表单值,其中字段名称是从循环动态创建的?

时间:2013-03-05 19:42:18

标签: php mysql loops post foreach

我有一个页面,它是根据用户在上一页提交的信息动态创建的。例如,在第1页上,用户输入一些部门名称。他们可以根据自己的意愿输入。在第2页上,为第一页上输入的每个部门创建了多个部分。在这些部分中的每个部分都将成为表单,我目前已经设置它以便使用变量$ a创建表单的名称。我需要知道在点击每个部分的提交按钮后如何发布这些项目。我尝试了几种不同的方式,但没有任何工作。我想要它,以便只有与提交按钮$ a相同的$ a值的项目才会被发布。

    $departmentSql = "SELECT * FROM b_departments WHERE loc_id='$locid' AND b_id =     '$bid'";
    $departmentResults = mysql_query($departmentSql,$con);

$a = 0;

while ($departmentRow = mysql_fetch_array($departmentResults)) {

$department = $departmentRow['b_dep_name'];
$departmentID = $departmentRow['dep_id'];
$b_departmentID = $departmentRow['b_dep_id'];
$a++;

echo "

<div id=depDiv>
<div id=depDivHeader>
".$department."
</div>
";

$areaSql = "SELECT * from areas WHERE dep_id = $departmentID ORDER BY area_name ASC";
$areaSqlResult = mysql_query($areaSql);
?>

<br />
<input type="hidden" name="bdep<?php echo $a;?>" value="<?php echo $b_departmentID; ?>" />
Add Area: 
<select name="dep_area<?php echo $a;?>" type="menu">
    <option value=""></option>
    <?php while($areaRows=mysql_fetch_assoc($areaSqlResult)){?>
    <option value="<?php echo "".$areaRows['area_id'].",".$areaRows['area_name']."" ?>"><?    php echo $areaRows[       'area_name'] ?></option>
<?php }
?>
</select>
&nbsp;&nbsp;
<input type="submit" name="areaSub<?php echo $a;?>" value="Add" />

<?php
echo "</div>"; 
}
?>   

* 编辑我需要将所有内容都放在一个表单中,因为页面的要点是将以后添加到每个单独部分中的所有值。 *

* *编辑2:

我用@dirt的jquery建议想出来了。

HTML:

$departmentSql = "SELECT * FROM b_departments WHERE loc_id='$locid' AND b_id = '$bid'";
$departmentResults = mysql_query($departmentSql,$con);

$a = 0;

while ($departmentRow = mysql_fetch_array($departmentResults)) {

$department = $departmentRow['b_dep_name'];
$departmentID = $departmentRow['dep_id'];
$b_departmentID = $departmentRow['b_dep_id'];
$a++;

echo "

<div id=depDiv>
<div id=depDivHeader>
".$department."
</div>
<div id=$a>
";

$areaSql = "SELECT * from areas WHERE dep_id = $departmentID ORDER BY area_name ASC";
$areaSqlResult = mysql_query($areaSql);
?>

<br />
<input type="hidden" name="bdep<?php echo $a ?>" value="<?php echo $b_departmentID; ?>" />
Add Area: 
<select name="dep_area<?php echo $a ?>" type="menu">
    <option value=""></option>
    <?php while($areaRows=mysql_fetch_assoc($areaSqlResult)){?>
    <option value="<?php echo "".$areaRows['area_id'].",".$areaRows['area_name']."" ?>"><?    php echo $areaRows[       'area_name'] ?></option>
<?php }
?>
</select>
&nbsp;&nbsp;
<button type="submit" name="areaSub" value="<?php echo $a ?>" />Add</button>

<?php
echo "</div></div>"; 
} ?>

jQuery的:

<script>
$(document).ready(function() {
    $('#<?php echo $a ?>').submit(function() {
        .post("include/action.php")
    }); 
});
</script>

PHP:

if(isset($_POST['areaSub'])) {

$areaval = intval($_POST['areaSub']);   



$area = mysql_real_escape_string($_POST["dep_area".$areaval.""]);
list($area_id, $area_name) = explode(',', $area, 2);
$bdep = mysql_real_escape_string($_POST["bdep".$areaval.""]); 

echo $areaval;
echo $area_name;
echo $bdep;

}

2 个答案:

答案 0 :(得分:1)

编辑:如果它是一个包含多个部分的单个表单,并且您不希望在POST之后删除不需要的表单数据,那么我认为您必须使用jQuery修改表单值之前发布到服务器,所以请参阅下面的jQuery部分,了解如何仅发布所选按钮的数据。

简短回答是使用提交按钮名称/值属性,并在发布后对其进行评估。具有相同名称的多个按钮可以具有不同的值,并且值不必是标签。

示例:

<form id='<?php echo $a; ?>'>
    <input type='text' name='in1'>
    <input type='text' name='in2'>
    <button type='submit' name='submit' value='<?php echo $a; ?>'>Add</button>
</form>
...
<form id='<?php echo $a; ?>'>
    <input type='text' name='in1'>
    <input type='text' name='in2'>
    <button type='submit' name='submit' value='<?php echo $a; ?>'>Add</button>
</form>
...
<?php
    # _POST:
    if (isset($_POST['submit']) && $_POST['submit'] == '1') {
        echo 'Department 1';
    }
    if (isset($_POST['submit']) && $_POST['submit'] == '2') {
        echo 'Department 2';
    }
?>

您还可以使用jQuery获取某个Div ID中包含的所有元素。像(这是一个粗略的想法):

<div id='<?php echo $a; ?>'>

    <input type='text' name='in1'>
    <input type='text' name='in2'>

    <input type="submit" name="areaSub<?php echo $a;?>" value="Add" />
</div>

jQuery的:

$('#<?php echo $a; ?>').submit(function() {
    do_something_with_form_$a
});

答案 1 :(得分:0)

我不确定我是否完全理解......但您遇到的问题是,当用户点击给定值集(给定部门)的“提交”按钮时,它会提交所有页面上的数据?您只想提交该特定区域的输入字段吗?

使用标记关闭表单:

 <form> </form>

所以,你将有多个领域:

 while(...) {
    <form method="..." name="form $a">
       <input name="... $a">
       <input name="... $a">
        ...
       <submit>
   </form>
}

(显然这是伪代码,相应调整)