Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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_Mysql_Codeigniter_Multidimensional Array - Fatal编程技术网

Php 灯光考勤系统

Php 灯光考勤系统,php,mysql,codeigniter,multidimensional-array,Php,Mysql,Codeigniter,Multidimensional Array,我就是不能找到解决这个问题的正确方法,我有两个数组。 第一个数组$Attention,具有以下键和值 Array ( [attendance] => Array ( [1] => 1 [2] => 1 [3] => 0 [4] => 1 [5] => 1 [6] => 0 [7] => 0 ) 如果选中值为1,则来自复选

我就是不能找到解决这个问题的正确方法,我有两个数组。 第一个数组$Attention,具有以下键和值

Array
(
[attendance] => Array
    (
        [1] => 1
        [2] => 1
        [3] => 0
        [4] => 1
        [5] => 1
        [6] => 0
        [7] => 0
    )
如果选中值为1,则来自复选框,否则值为0 第二个数组是$remark

[remark] => Array
    (
        [1] =>
        [2] => 
        [3] =>  'sick'
        [4] => 
        [5] => 
        [6] =>  'leave'
        [7] =>  'On assignment'

    ) 
这就是键1-7所代表的,脚本是员工出勤的,键1-7是我数据库中employee表中的employeeID

现在我想要实现的是以如下方式连接数组

Array
(
[0] => Array
    (
        [employeeID] => 7
        [attendance] => 0
        [remark] => 'On assignment'
    )

[1] => Array
    (
        [employeeID] => 6
        [attendance] => 0
        [remark] => 'leave'
    )

[2] => Array
    (
        [employeeID] => 5
        [attendance] => 1
        [remark] => 
    )

//and so on
)
我正在使用Codeigniter,如果我能够连接它,我也想知道如何将多个数据插入employee表,如下所示

employee's table
employeeID | date | status | remarks
我使用CURDATE()计划的日期,则状态将保留0或1 再次:备注和考勤数组中的1-7键都是employeeID

更新!! 这是我尝试过的,但没有成功

$att = $_POST['attendance'];
$remarks = $_POST['remark'];

foreach($att as $employee_id=>$status)
        {
            $x=0;
            $employee[$x]['employee_id']=$employee_id;
            $employee[$x]['status']=$status;


            foreach($remarks as $employee_id=>$remark)
            {

                $employee[$x]['remark']=$remark;
                $x++;
            }
       }  

老实说,这很简单

$numOfEmployees = 8;

$concatArray = array();

foreach($attendance as $k => $v)
{
     $concatArray[] = array("employeeID" => $k, "attendance" => $v, "remark" => $remark[$k];
}
如果您的考勤表采用类似SQL的格式,您可以在上述目录中使用
foreach

foreach($concatArray as $key => $value)
{
     $remark = $value['remark'];
     // sanitize remark for database
     $query = "INSERT INTO employees (ID, Date, Status, Remarks) VALUES ({$value['employeeID']}, NOW(), {$value['attendance']}, '{$value['remark']}');";
     // perform the actual query
}
请记住,这是一个非常通用的示例,对数据库做了很多假设

正如Frits所指出的,应该对备注字段进行清理,可能是对mysqli使用
mysqli\u real\u escape\u string
,或者对PDO使用
quote
,这取决于您使用的是什么

$attendance = $_POST['attendance'];
$remarks = $_POST['remark'];

$collect = array();
foreach ($attendance as $employeeID => $attending) {
    $collect[] = array(
        "employeeID" => $employeeID,
        "attendance" => $attending,
        "remark" => isset($remarks[$employeeID]) ? $remarks[$employeeID] : ""
    );
}

$values = array();
foreach ($collect as $entry) {
    $values[] = "(" . ((int) $entry["employeeID"]) . ",
        CURDATE(),
        " . ((int) $entry["attendance"]) . ",
        '" . sql_escape($entry["remark"]) . "'
    )";
}
$query = "INSERT INTO `attendance`
    (`employeeID`, `date`, `status`, `remarks`)
    VALUES
    (" . implode(",", $values) . ")";

确保用适当的转义函数替换
sql\u escape
。如果您正在使用PDO,请使用它。

到目前为止,您有哪些功能?这是一些相当琐碎的数组操作。@FritsvanCampen刚刚添加了它。不能保证所有
$i
都是雇员ID。如您所见,没有id为
0
的员工。只需在
$attention
上执行
foreach
,即可获得实际的员工ID。另外,如果我的话是
他又迟到了
,这会打断你的提问;)谢谢你,我尽了最大努力在回答中包括你的建议:)