Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过单个复选框传递多个变量_Php_Html_Mysql - Fatal编程技术网

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

Php 通过单个复选框传递多个变量,php,html,mysql,Php,Html,Mysql,我不确定最好的方法是什么,或者是否可能。基本上,我有一个复选框,如下所示: mysql_query("INSERT INTO `clients` (`user_id`, `first_name`, `last_name`, `nickname` `class_id`) VALUES ('$user_id', '$first_name, '$last_name', '$nickname', '$class_id')"); php 使用如下查询进入数据库: mysql_query("INSERT

我不确定最好的方法是什么,或者是否可能。基本上,我有一个复选框,如下所示:

mysql_query("INSERT INTO `clients` (`user_id`, `first_name`, `last_name`, `nickname` `class_id`) 
VALUES ('$user_id', '$first_name, '$last_name', '$nickname', '$class_id')");
php

使用如下查询进入数据库:

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

mysql_query("INSERT INTO `clients` (`user_id`, `first_name`, `last_name`, `nickname` `class_id`) 
VALUES ('$user_id', '$first_name, '$last_name', '$nickname', '$class_id')");

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

我做错了什么?

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

如果不使用数据库,一种快速而肮脏的方法是将有关此人的信息放入数组,然后通过
serialize()
将其转换为字符串并将其用作value属性。在另一端,您可以通过
unsealize()
运行它,以获取包含所需值的数组


请记住,如果要执行此操作,则需要转义sql查询或(非常首选)使用准备好的查询

好的,您可以按照Asad的建议在值中路径字符串,然后在服务器上拆分它,如下所示

<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>
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
我不确定模板中的$class_id变量和模型中的$user_id的位置,所以您必须弄清楚,这里的另一个缺点是,如果在某个变量中放置分隔符,数据将被分割错误。为了避免这种情况,您可以使用与主复选框(javascript、logic或在您的情况下最适合的选项)相关联的隐藏输入


UPD:哦,是的,您可以将数据序列化/取消序列化为数组作为octern suggestion

您应该将名字和姓氏放在value属性中,因为该属性是您从服务器端获得的唯一信息。因为您是根据看起来基于DB的信息构建该信息的,不要通过客户往返任何你不需要的东西。无论如何都要显示全名,但是复选框值应该只包含为该复选框显示的记录的id。传递一个简单的int比传递一个复杂的字符串要容易得多,你以后无论如何都无法可靠地将其分开。@MarcB我会这样做,但db中的“客户机”可以有多个条目,或者是多个类的一部分,因此他们参加的每个类的客户机id都不同。我计划根据与某个类和用户id相关的int来处理此信息。这有意义吗?我添加了一张db表的图片和一点我尝试执行的操作的更多信息。我使用的是一个数据库支持的应用程序,但同一个客户端可能有多个条目,只有
类id
不同。我真的不确定我尝试这样做的方式是否是最好的方式。是否需要使用函数或在sql查询中调用
list
语句?完全没有必要,这只是为了简化变量分配。我在上面发布了一个对调用函数和sql查询的代码的编辑。不知道下一步该怎么办?我知道我使用的是一种不推荐使用的方法,但这就是我学习PHP的方式,一旦所有函数都正常运行,我就会返回并重写函数。事实上,当你开始做的时候,事情并没有那么复杂。有一段时间,我建议您阅读更多PHP中的post变量,以及纯HTML表单如何获得全局
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')");