如何在数据库中存储JavaScript变量
我想将值“totalscore”从JavaScript代码存储到数据库中。我尝试使用ajax调用,但有些东西不起作用,我以前没有使用过ajax 在下面的JavaScript代码中,我将显示我在html元素中找到的score值 JavaScript代码:如何在数据库中存储JavaScript变量,javascript,html,mysql,ajax,Javascript,Html,Mysql,Ajax,我想将值“totalscore”从JavaScript代码存储到数据库中。我尝试使用ajax调用,但有些东西不起作用,我以前没有使用过ajax 在下面的JavaScript代码中,我将显示我在html元素中找到的score值 JavaScript代码: if (matches==8){ var totalscore = calcScore(); document.getElementById("score").innerHTML=totalsc
if (matches==8){
var totalscore = calcScore();
document.getElementById("score").innerHTML=totalscore;
}
我想在单击提交按钮时将totalscore的值保存在我的用户数据库中。所以我尝试了以下方法:
$("#sendscore").on("click",function(){
gamescore= document.getElementById('score').innerHTML;
$.ajax({
type:'POST',
url: 'score-processor.php',
data:{
gamescore: gamescore,
}
})
});
php代码:
<?php
session_start();
$db = mysqli_connect('localhost', 'root', '', 'registration');
if (isset($_POST['login_user'])) {
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password_1']);
if (empty($username)) {
array_push($errors, "Username is required");
}
if (empty($password)) {
array_push($errors, "Password is required");
}
if (count($errors) == 0) {
$password = md5($password);
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$results = mysqli_query($db, $query);
if (mysqli_num_rows($results) == 1) {
$_SESSION['username'] = $username;
header('location: profile.php');
}
else {
array_push($errors, "Wrong username/password combination");
}
}
}
if(isset($_POST['gamescore'])){
$fetch = "SELECT id FROM users WHERE username='$username'";
$fetchid =mysqli_query($db, $fetch);
while ($row=mysqli_fetch_array($fetchid)){
$id = $row['id'];
$gamescore= $_POST['gamescore'];
$updatescore= "INSERT INTO users(id, score)VALUES('$id','$gamescore') ON DUPLICATE KEY UPDATE score='$gamescore'";
mysqli_query($db, $updatescore);
}
}
问题1
这是一个HTML元素,不是它的值
您需要阅读.innerHTML
,就像您之前写的一样
问题2
ajax没有gamescore
选项。所以这是毫无意义的
您需要传递数据
data: {
gamescore: gamescore
}
问题3
当您传递FormData
对象以生成多部分请求(这对于上载文件很有用)时,这将停止jQuery重写内容类型
您没有这样做,因此contentType:false
将中断正常分配的正确内容类型标题
去掉那个
问题4
您需要处理数据。传递给数据的对象需要编码到HTML请求中
去掉那个
问题5
您未能定义$username
或$id
危险:您容易受到需要从中获取的信息的攻击。Post数据应存储在ajax选项的数据属性中。它没有gamescore属性。修复Sql注入漏洞后。。。您尚未在更新脚本中的任何位置定义$id和$username变量。查询将因此失败。请参阅其他post寻址AJAX调用,了解有关如何防止SQL注入攻击的更多信息。我做了您建议的更改并编辑了上面的代码,但仍然存在相同的问题,我无法将分数添加到表中。$username和$id已经存在于表中,所以我定义了一些类似于我在上面代码中给出的东西。你能告诉我哪里出错了吗。你的解释很清楚,谢谢。@vigneshu-你认为$\u POST['username']
和$\u POST['id']
来自哪里?它们不在您的Ajax数据中。感谢您的解释,您可以帮助我使用用户名和id将分数数据保存到现有表中。我已经有用户名和id,我如何链接它以更新此分数数据“我已经有用户名和id”-看起来不像。我在另一个php文件中获取用户名和id,用于登录和注册系统
gamescore= document.getElementById('score');
gamescore: gamescore
data: {
gamescore: gamescore
}
contentType: false,
processData: false
$updatescore= "UPDATE users SET(username='$username', score='$gamescore') WHERE (id='$id')";