0

我不确定执行此操作的最佳方法,或者是否可能。基本上我有一个看起来像这样的复选框:

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')");

这是可能的,还是我什至接近我试图设置它的方式?到目前为止,我还没有多少运气。

我的数据库表如下所示:

客户表

我需要能够使用不同的 class_id 多次输入客户端。

实现这一目标的最佳方法是什么?

这是调用该函数将数据插入数据库的代码:

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')");
}

我究竟做错了什么?

4

2 回答 2

1

您不能通过单个复选框传递多个变量。Marc B 是对的,如果这是一个数据库支持的应用程序,那么正确的做法是让复选框发送所选人员的 ID,并使用该 ID 查找您需要的有关他们的任何信息.

如果您不使用数据库,那么一种快速而简单的方法是将有关人员的信息放入一个数组中,然后运行它serialize()以将其转换为字符串并将其用作值属性。在另一端,您可以运行它unseialize()以取回具有您想要的值的数组。

请记住,如果您这样做,您需要转义您的 sql 查询或(非常推荐)使用准备好的查询。

于 2012-11-08T20:19:29.140 回答
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 建议

于 2012-11-08T20:36:47.353 回答