我试图查看表单中的一些输入字段并将它们添加到数据库中。用户设置字段数,因此我不能执行类似下面的代码,因为没有特定数量的字段。
for($i=0; $i<(number-of-fields); $i++)
{
$_REQUEST['Question+$i']
}
我也试过这个:
<?php
$con=mysqli_connect("","test","test","Flashcards");
foreach($_REQUEST['Question[]'] as $value)
{
$newcards="INSERT INTO Cards(Questions)
VALUES($value)";
mysqli_query($con,$newcards);
}
mysqli_close($con);
?>
它只是不向我的数据库添加任何内容。我该怎么做呢?我是PHP和SQL的新手,似乎无法解决这个问题。
答案 0 :(得分:6)
假设:
<input type="text" name="foo[]" />
<input type="text" name="foo[]" />
etc...
在你的表单中,你用
循环它们foreach($_POST['foo'] as $index => $value) {
...
}
字段名称中的[]
将被PHP剥离并用作提示,它应该期望具有相同名称的多个值,从而导致它在$ _GET / $ _ POST中创建一个子数组容纳那些额外的价值观。
您还可以建议PHP应使用哪些数组键,例如
<input type="text" name="foo[1]" value="hi there" />
<input type="text" name="foo[abc]" value="TGIF!" />
echo $_POST['foo'][1]; // outputs "hi there"
echo $_POST['foo']['abc'] // outputs "TGIF!"
还支持使用相同的符号/访问方法的多维数组。
答案 1 :(得分:2)
你可以分配输入名称,如下所示(使用javascript)并创建一个包含字段数的隐藏字段,因此当用户添加更多输入字段时,隐藏字段会动态更新。
<input name="field_1">
<input name="field_2">
<input name="field_3">
<input type="hidden" name="count" value="3">
所以当你发布这个时,你知道你有多少个字段。
答案 2 :(得分:1)
行。
不确定您的数据库是什么样的。每个表单字段应该是单独的行还是单独的列?你的代码似乎做了前者,但听起来你想要后者?如果是后者那么你真的需要像Amir Noori所说的那样命名你的表格输入。
假设你有一个这样的表格:
<form method="POST" action="myphp.php`>
<input type="text" name="column_name_one" />
<input type="text" name="column_name_two" />
<input type="text" name="column_name_three" />
<input type="submit" name="submit" value="submit" />
然后
<?php
if (isset $_POST['submit'] {
$con=mysqli_connect("","test","test","Flashcards");
$values = array();
$columns = array();
foreach($_POST[] as $key => $value) {
if (!empty($key) && $key != "submit") {
$values[] = $con->real_escape_string($value);
$columns[] = $con->real_escape_string($key);
}
}
$colStr = implode(",",$columns);
$valStr = implode("','",$values);
$myQuery = "INSERT INTO Cards($colStr) VALUES ('$valStr');
if (!$con->query($myQuery)) {
echo "Error Occured: $con->error";
}
}
?>
现在,仅当您的列名与表单输入名称相同时,此方法才有效。还假设它们都是字符串(varchar等)。如果不是这种情况,那么您只需按名称单独访问表单字段即可处理。一个简单的方法:
<?
if (isset($_POST['name']) && !empty($_POST['name']) { //name field maps to cName column varchar
$colStr = "cName,";
$valStr = "'" . $_POST['age'] . "',"; //need quotes
}
if (isset($_POST['age']) && !empty($_POST['age']) { //age field maps to customerAge column numeric
$colStr .= "customerAge,";
$valStr .= $_POST['age'] . ","; //no quotes
}
?>
或使用array_map()将列名称数组映射到表单字段。如果你需要确保所有的post变量名都是真正有效的列名,并且某人没有试图向你发送垃圾,那么这样的东西也可能会有所帮助。显然,如果列名不正确,插入将失败,但通常最好不要让它甚至尝试插入错误的查询。