Javascript 将日期数组从JS发送到php页面
我有一个JS数组“edit_date”,包含多个日期。我想将数组发送到一个php页面以存储在数据库中。 我没有使用JSON和jquery,而是使用了如下代码: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
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请求并发布他们想要的任何数据。因此,是的,您需要验证。