使用foreach处理错误并爆炸PHP

时间:2016-08-19 14:17:13

标签: php mysql sql explode

嗨,大家好我正在处理一个错误,一个foreach和一个爆炸的PHP。 我不知道为什么这只发生在文本区域的前两行。

我的代码如下:

<?php
   if(isset($_POST["button"])){
        $btn=$_POST["button"];
        if($btn=="Cargar horarios"){
            $input = $conn->real_escape_string($_POST["lineas"]);
            $linea = explode("NO ?", $input);
            foreach($linea as $element){
                $datos = explode(" ", $element);
                $fecha = $datos[0];
                $hora = $datos[1];
                $empleado_key = $datos[2];

                $sql = "SELECT * FROM jornada WHERE jornada_fecha='$fecha' AND empleados_key='$empleado_key'";
                $result = $conn->query($sql);
                if ($result->num_rows > 0) {
                    $sql = "UPDATE jornada SET jornada_salida='$hora' WHERE jornada_fecha='$fecha' AND empleados_key='$empleado_key'";
                    if ($conn->query($sql) === TRUE) {
                    } else {
                        echo "Error: " . $sql . "<br>" . $conn->error;
                    }
                } else {
                    $sql = "INSERT INTO jornada (jornada_fecha, jornada_entrada, empleados_key) VALUES ('$fecha', '$hora', '$empleado_key')";
                    if ($conn->query($sql) === TRUE) {
                    } else {
                        echo "Error: " . $sql . "<br>" . $conn->error;
                    }
                }

            }
        }
    }
?>

我在textarea中的文字如下:

18/08/2016 08:00 34415 NO ?
18/08/2016 17:56 34415 NO ?
16/08/2016 07:56 34415 NO ?
16/08/2016 14:56 34415 NO ?
17/08/2016 07:56 34415 NO ?
17/08/2016 15:56 34415 NO ?

在提交时,显示以下错误:

Undefined offset: 1 in /home/bgxryqet/public_html/sistema/horarios/cargar-horarios.php on line 88
Undefined offset: 2 in /home/bgxryqet/public_html/sistema/horarios/cargar-horarios.php on line 89

提交后,它会在我的数据库中创建一个空行,并且第二行不能正常工作,这里是我提交后db的外观图像:

enter image description here

我试图在线路突破时爆炸,但它对我不起作用。

1 个答案:

答案 0 :(得分:1)

您生成了过多的数组元素

$linea = explode("NO ?", $input);

所以,让我们var_dump这个

  

array(7){
[0] =&gt; string(23)&#34; 18/08/2016 08:00 34415&#34; [1] =&GT;字符串(24)&#34; 18/08/2016 17:56 34415&#34; [2] =&GT;字符串(24)&#34; 2016/08/16 07:56 34415&#34; [3] =&GT;字符串(24)&#34; 2016/08/16 14:56 34415&#34; [4] =&GT;字符串(24)&#34; 17/08/2016 07:56 34415&#34; [5] =&GT;字符串(24)&#34; 2016/08/17 15:56 34415&#34; [6] =&GT; string(0)&#34;&#34; }

注意array(7)(您有6个元素)和[6]=> string(0) ""

你应该做的是用换行符拆分

$linea = explode("\n", $input);

应该给你6个元素并避免错误。无论哪种方式,你都不应盲目信任数据。在尝试插入

之前,请确保您已正确获取数据