我不确定这样做的最佳方式,或者甚至可能。基本上我有一个看起来像这样的复选框:
PHP
foreach($clients as $client){
echo'
<input type="checkbox" name="client_data[]" value="'.$class_id.'">
'.$client['first_name'].' ('.$client['nickname'].') '.$client['last_name'].'
<br />';
} // foreach($client
HTML看起来像这样
<form method="post" action="">
<input type="checkbox" value="?" name="client_data[]">
Dwayne (The Rock) Johnson<br>
<input type="checkbox" value="?" name="client_data[]">
Steve (Puddin) Robinson<br>
<input type="submit" value="Add" name="exist_to_class">
</form>
提交表单时我想插入
$first_name, $nickname, $lastname
使用如下所示的查询进入数据库:
mysql_query("INSERT INTO `clients` (`user_id`, `first_name`, `last_name`, `nickname` `class_id`)
VALUES ('$user_id', '$first_name, '$last_name', '$nickname', '$class_id')");
这是可能的还是我甚至接近我试图如何设置它?到目前为止,我没有太多运气。
我的db表如下所示:
我需要能够使用不同的class_id多次进入客户端。
实现这一目标的最佳方法是什么?
以下是调用函数将数据插入db:
的代码if (isset($_POST['exist_to_class'])){
if (empty($_POST['client_data']) === true){
$errors [] = 'You much select a client to be added to the class.';
} else {
if (isset($_POST['client_data']) && !empty($_POST['client_data']));
list($first_name, $nickname, $last_name) = explode('|', $_POST['client_data']);
exist_client_to_class($class_id);
header('Location: view_class.php?class_id='.$class_id.' ');
}
} //isset
这是我的疑问:
function exist_client_to_class($class_id, $user_id){
$class_id = (int)$class_id;
$user_id = (int)$user_id;
mysql_query("INSERT INTO `clients` (`user_id`, `first_name`, `last_name`, `nickname` `class_id`)
VALUES ('$user_id', '$first_name, '$last_name', '$nickname', '$class_id')");
}
我做错了什么?
答案 0 :(得分:1)
您不能通过一个复选框传递多个变量。 Marc B是对的,因为如果这是一个由数据库支持的应用程序,那么正确的方法是让复选框发送所选人员的ID,并使用该ID查找您需要的任何信息。
如果您没有使用数据库,那么快速而肮脏的方法是将有关此人的信息放入数组中,然后通过serialize()
运行它以将其转换为字符串并将其用作值属性。另一方面,您可以通过unseialize()
运行它以使用您想要的值返回数组。
请记住,如果你这样做,你需要转义你的sql查询或(非常强烈首选)使用准备好的查询。
答案 1 :(得分:0)
好吧,你可以像Asad建议的那样在路径中输入字符串,然后将其拆分在服务器上,就像这样
foreach($clients as $client){
echo'
<input type="checkbox" name="client_data" value="'.$class_id.'|'.$client['first_name'].'|'.$client['nickname'].'|'.$client['last_name'].'">
'.$client['first_name'].' ('.$client['nickname'].') '.$client['last_name'].'
<br />';
} // foreach($client
并且在服务器上有类似
的内容list($class_id, $first_name, $nickname, $last_name) = explode('|', $_POST['client_data'])
mysql_query("INSERT INTO `clients` (`user_id`, `first_name`, `last_name`, `nickname` `class_id`)
VALUES ('$user_id', '$first_name, '$last_name', '$nickname', '$class_id')");
我不确定模板中的$ class_id变量和模型中的$ user_id在哪里,所以你必须弄明白,这里的缺点是如果在某些变量中会放置分隔符|数据将被拆分错误。为了避免它,你可以使用与主复选框以某种方式关联的隐藏输入(javascript,逻辑或whaterver将在你的情况下发挥最佳)
UPD:哦,你可以将数据序列化/反序列化为数组http://us3.php.net/serialize作为octern建议