从JS发送日期数组到php页面

时间:2017-01-13 16:34:37

标签: javascript php jquery arrays

我有一个包含多个日期的JS数组“edit_date”。我想将数组发送到php页面以存储在数据库中。 我没有使用JSON和jquery,而是使用了我的代码:

var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          document.getElementById("a").innerHTML= this.responseText; 
       }
    };
    xhttp.open("GET", "page_name.php?a=" + edit_date , true);
    xhttp.send(); 

所以数据像字符串一样转到php。所以我将字符串拆分为php中的数组,如:

$data = $_REQUEST['a'];
$data2= $_REQUEST['b'];
$student_id= $_REQUEST['c'];
$array=(explode(",",$data));

并将所有数组元素转换为日期格式,并将其插入数据库中,如:

foreach($array as $e)
{
 $date= date("d-m-Y", strtotime($e));
 $sql= "INSERT into student_connects_teacher_date (teacher_id,student_id,dates) values ('$data2','$student_id','$e')";
  if(!mysqli_query($con,$sql))
      {
            die("error". mysqli_connect_error());
      }
}

到目前为止工作得很好。但我想知道这是一个好方法吗?我用过这个,因为使用json和jquery对我没用。如果我需要使用这些数据,这种方法将来是否会出现任何问题? 如果这不是一个好方法,那么原因是什么?

1 个答案:

答案 0 :(得分:0)

在将$ e中的日期转换为时间戳之前,您需要检查$ e中的日期是否为有效日期。我不知道您输入的格式,但有多种方法可以做到这一点。例如,使用PHP的DateTime类:

if (DateTime::createFromFormat('Y-m-d H:i:s', $e) === false) {
    // invalid date, so skip
    continue;
}

另外,你真的需要使用准备好的&查询的参数化语句,因为现在您很容易受到SQL注入攻击。你不应该像这样在你的查询中包含变量。

您可以控制日期值和格式的值(在验证之后),但是您可能还需要类似htmlspecialchars()方法来清除与XSS相关的内容。

不易受SQL注入攻击的可能解决方案:

$stmt = mysqli_prepare($con, "INSERT into student_connects_teacher_date (teacher_id,student_id,dates) values (?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sis', $data2, $student_id, $e);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);

此外,创建和关闭语句可以在foreach循环之外完成。

旁注:如果你只想爆炸字符串,则不需要额外的括号。

$array=(explode(",",$data));

可以只是:

$array = explode(",", $data);

包装表达式或基本上括号中的任何内容都可能返回不同的结果,因为PHP处理它的方式不同。