从循环创建的表单中检索多行...坚持

时间:2010-05-14 02:34:13

标签: php mysql forms foreach

首先让我说我是PHP的新手,但我在这里学习并非常感谢你的帮助。

我使用以下代码来提取数据并创建表单。这样可以为用户创建最多40行。每行包含相同的信息:描述,数量和频率。所需的其余信息由数据库生成。 (见隐藏字段)

<?php 
$row = 0;
do { 
$optid = $row_options['option_id'];
echo "<tr>\n\t<td>" . htmlentities($row_options['option']) . "</td>\n";
echo "\t<td>" . "<input name='description' type='text' size='40' maxlength='120'/>" . "</td>\n";
echo "\t<td>" . "<input name='option_id' type='hidden' value='$optid' />$<input name='amount' type='text' size='10' maxlength='7'/>" . "</td>\n";
echo "\t<td>" . "<select name='assisted_frequency'>
            <option value='Monthly'>Monthly</option>
    <option value='Weekly'>Weekly</option>
    <option value='Daily'>Daily</option>
    <option value='Hourly'>Hourly</option>
    <option value='One-Time'>One-Time</option>
            </select>" . "</td>\n</tr>\n";  

$array[$row] = array(
$arraydesc[$row] = $_POST['description'],
$arrayamto[$row] = $_POST['amount'],
$arrayoptid[$row] = $optid,
$arrayfreq[$row] = $_POST['frequency'],
);
$row ++;
} while ($row_options = mysql_fetch_assoc($options)); 
$counter = $row - 1;
?>

我在检索用户输入的信息时遇到了麻烦。我的意图是在用户输入信息后循环遍历每一行,然后将我的数据库信息和用户信息的混合上传到另一个数据库。例如,用户会看到,虽然更漂亮:

form1  

Option 1:  description [input box]      amount [input box]       frequency [option box]  
Option 2:  description [input box]      amount [input box]       frequency [option box]  
Option 3:  description [input box]      amount [input box]       frequency [option box]  
Option 4:  description [input box]      amount [input box]       frequency [option box]  

submit 

提交上面的表单后,我使用类似以下的查询将数据输入数据库:

for($row=0; $row<=$counter; $row++){
$insertSQL2 = sprintf("INSERT INTO table (option_id, amount, description, frequency) VALUES (%s, %s, %s, %s)",
 GetSQLValueString($arrayoptid[$row], "int"),
 GetSQLValueString($arrayamto[$row], "int"),
 GetSQLValueString($arraydesc[$row], "text"),
 GetSQLValueString($arrayfreq[$row], "text"));

// code to submit query
}

我已经尝试过,foreach,数组(感觉就像我知道的一切)将每一行(逐行)发布到数据库中。我要么只得到最后一行数据,要么根本没有数据。我还担心[$ row]技术正在为我的数据添加字符。

检索用户输入的每一行,然后将这些数据(逐行)上传到数据库中的最佳方法是什么?另外,我非常感谢您对改进我的编码技术和我正在采用的方法的建议。

1 个答案:

答案 0 :(得分:1)

试过这个?

<input name="description[]" type="text" ... />
<input name="option_id[]" type="text" ... />
<select name="assisted_frequency[]">...</select>

然后

$expectNumRows = ...;
function is_good_subm_data($name, $num) {
    return (array_key_exists($name, $_POST) &&
        is_array($_POST[$name]) && count($_POST[$name]) == $num);
}
if (!is_good_subm_data('description', $expectNumRows) ||
    !is_good_subm_data('option_id', $expectNumRows) ||
    !is_good_subm_data('assisted_frequency', $expectNumRows)) {
    //error handling
}

for ($i = 0; $i < $expectNumRows; $i++) {
    //read $_POST['description'][$i] etc.
}

非常基本(无验证)PHP文件:

<?php
if ($_SERVER['REQUEST_METHOD'] == "GET") {
?>
<form method="post">
Description 1: <input name="description[]" type="text"  /><br />
Option Id 1: <input name="option_id[]" type="text" /><br />
<br />
Description 2: <input name="description[]" type="text"  /><br />
Option Id 2: <input name="option_id[]" type="text" /><br />
<input type="submit" />
</form>
<?php } else {
    $expectNumRows = 2;
    for ($i = 0; $i < $expectNumRows; $i++) {
        echo "description $i:" .
            htmlentities($_POST["description"][$i]) . "<br />";
        echo "option id $i:" .
            htmlentities($_POST["option_id"][$i]) . "<br />";
        echo "<br />";
    }
}
相关问题