我有一个包含多个日期的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对我没用。如果我需要使用这些数据,这种方法将来是否会出现任何问题? 如果这不是一个好方法,那么原因是什么?
答案 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处理它的方式不同。