通过单个复选框传递多个变量

时间:2012-11-08 20:07:58

标签: php html mysql

我不确定这样做的最佳方式,或者甚至可能。基本上我有一个看起来像这样的复选框:

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表如下所示:

Client Table

我需要能够使用不同的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')");
}

我做错了什么?

2 个答案:

答案 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建议