无法获取数组元素并保存到数据库

时间:2018-04-08 07:49:43

标签: php

我希望能够在html中将数组数据绘制成表格格式,仅供我参考学习。当我使用以下代码时,它表明数据存在于数组



$array_att_logs = $logs3->to_array(); 
    echo " <pre>"; 
    print_r($array_att_logs); 
    echo "/<pre>"; 
    
    // it shows array as follow
    
    Array
(
    [Row] => Array
        (
            [0] => Array
                (
                    [PIN] => 1274
                    [DateTime] => 2018-04-07 09:28:16
                    [Verified] => 15
                    [Status] => 3
                    [WorkCode] => 0
                )

            [1] => Array
                (
                    [PIN] => 157
                    [DateTime] => 2018-04-07 10:22:56
                    [Verified] => 15
                    [Status] => 3
                    [WorkCode] => 0
                )
    // these are the raw punch data from biometric machine
&#13;
&#13;
&#13;

使用以下代码和一些解决方法,它会抛出未定义索引的错误,数组到字符串转换或未定义的偏移...抱歉,我是编程以及论坛世界的新手。

&#13;
&#13;
if(isset($array_att_logs) && $array_att_logs != NULL){
                        
   foreach ($array_att_logs as $key => $value) {
        echo "<tr>";
        echo "<td>" . $array_att_logs['PIN'] ."</td>";
        echo "<td>" . $array_att_logs['DateTime'] ."</td>";
        echo "</tr>";  

 $punch_query = "INSERT INTO punching_data_table (pin,date_time) 
                            VALUES('$PIN','$value')";
$punch_result = mysql_query($punch_query)
  }
}
&#13;
&#13;
&#13;

非常感谢对示例代码进行解释的答案。

1 个答案:

答案 0 :(得分:0)

数组的顶级元素是索引为Row的元素,因此您应该将foreach循环更改为foreach ($array_att_logs['Row'] as $key => $value) { ... }

第二部分是mickmackusa在评论中已经指出的内容,您需要使用局部变量$value来访问引脚和日期时间。

您也不需要在null之后检查isset(...),因为这是isset已经在做的事情。更好地检查是否存在Row索引。

作为最终结果,您应该能够使用以下代码:

if(isset($array_att_logs) && isset($array_att_logs['Row'])) {                     
    foreach ($array_att_logs['Row'] as $key => $value) {
        echo "<tr>";
        echo "<td>" . $value['PIN'] ."</td>";
        echo "<td>" . $value['DateTime'] ."</td>";
        echo "</tr>";  

        $punch_query = "INSERT INTO punching_data_table (pin, date_time) VALUES ('$value['PIN']', '$value['DateTime']')";
        $punch_result = mysql_query($punch_query)
    }
}

我还建议您查看MySQL中的保留字(see documentation)。您的DateTime列使用其中一个名称,应该避免使用这些名称。最好使用更具描述性的名称,例如CreatedAtUpdatedAtMeasuredAt。从旧的mysql_函数转到mysqli_函数或PDO,这是一个好主意,作为下一步(由于mysql_的安全问题,也是因为它们已被弃用了。)