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

Javascript 将日期数组从JS发送到php页面,javascript,php,jquery,arrays,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.getElem

我有一个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对我来说不起作用。如果我需要使用这些数据,这种方法将来会出现问题吗?
如果这不是一个好方法,那么原因是什么

在将日期转换为时间戳之前,您需要检查$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的处理方式不同。

yah ok。知道了。谢谢数据2是从哪里来的?我在复制代码时错了,我跳过了几个。让我编辑itI,它也会将$u请求更改为if(isset($u GET['a']){…}。在分解之后,检查它是否是一个实际有效的数组,并通过执行if(is_array($dates)&&count($dates)>0)来填充。{实际上,当我单击一个特定的div时,日期被发送到php。该div的id名为“id_2017-01-14”。然后我拆分字符串,将日期与id名称分开,并将日期作为字符串发送到php。因此,我猜没有用户可以操作该id,这排除了任何操作输入的可能性。那么我是否仍需要验证输入?您正在将数据从js(客户端)发布到php(服务器端)。任何人都可以模拟post请求并发布他们想要的任何数据。因此,是的,您需要验证。