【问题标题】:Trying to update a database with javascript/PHP doesn't work尝试使用 javascript/PHP 更新数据库不起作用
【发布时间】:2016-01-18 17:40:46
【问题描述】:

我正在尝试使用 javascript 和 PHP 更新数据库,这是我的 index.html 代码:

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
    <input type="text" id="descriptioninput">
    <input type="number" id="budgetin">
    <input type="number" id="budgetout">
    <button type="button" onclick="addToDB()">Add to database</button>

    <script>
        function addToDB()
        {
            var descriptioninput = document.getElementById('descriptioninput').value;
            var budgetin = document.getElementById('budgetin').value;
            var budgetout = document.getElementById('budgetout').value;

            $.ajax ( {
                type: 'POST',
                url: 'addtodb.php',
                data:{descriptioninput:descriptioninput, budgetin:budgetin, budgetout:budgetout},
                success:function (data) {
                    // Completed successfully
                    alert('success!');
                }
            });
    </script>
</body>
</html>

这是我的addtodb.php 代码:

<?php

$host = "localhost";
$username = "root";
$password = "";
$dbname = "budgetdb";

$conn = new mysqli($host, $username, $password, $dbname);
if ($conn === TRUE)
{
$descriptioninput = $_GET['descriptioninput'];
$budgetin = $_GET['budgetin'];
$budgetout = $_GET['budgetout'];

$query = "INSERT INTO budget (description, budgetin, budgetout) VALUES ('$descriptioninput', '$budgetin', '$budgetout')";

$conn->query($query);

$conn->close();
}

?>

但似乎我的 PHP 脚本没有运行。我的数据库中没有出现任何更改。我尝试在 PHP 文件中执行 warning() 并使用.done(function(text)) 警告它,但没有显示任何内容。

【问题讨论】:

  • 是的,它似乎没有进入如果条件。先看看db连接成功时$conn里面有什么。
  • 你可以使用开发者控制台或萤火虫(在火狐上)或类似的东西来看看发生了什么?还要先测试你的服务器端代码。
  • $conn !== true, $conn == true - 这就是问题所在。 mysqli_connect 不返回 true。
  • 先在里面写echo if来确认条件满足。

标签: javascript php mysql sql ajax


【解决方案1】:

你在 ajax 和 JS 之间的混合有点混乱。尝试将此 getHTTP 函数用于常规 JS。

function httpGet(theUrl){
	//FETCH Data From Server
	xmlhttp=new XMLHttpRequest();
	xmlhttp.open("GET", theUrl , false );
	xmlhttp.send();   
	return xmlhttp.responseText;
}

然后将您的网址构建为 +addtodb.php?param1="+param1value+"&param2="+param2value

【讨论】:

  • 道歉。我没有睡觉我想念ajax作为jquery。我对 ajax 不是很了解,但以上是我完成调用 PHP 文件的方法。
【解决方案2】:

发生这种情况是因为您在 js 中使用 POST 方法执行 ajax 请求,但您试图在 PHP 中使用 GET 方法获取变量。将其切换为GET 即可。

注意SQL Injection。您可以通过使用准备好的语句或将字符串转义为:

$descriptioninput = $conn->real_escape_string($_GET['descriptioninput']);

另外,第一个if 条件无效。你只需要像 if ($conn) 而不是 if ($conn === TRUE) 那样做

【讨论】:

  • 尝试这样做,但数据库中没有任何反应。我什至尝试在 chrome 中手动编写 url。我现在也将类型更改为 GET。
  • 它现在可以工作了,它出现的 SQL 语法有问题,在我删除了 VALUES 之前的 () 之后,它工作了。我去看看
  • sql 语法没有问题.. 取决于您要保存在 db 中的内容.. 使用 real_escape_string 确保没有为 db 发送错误字符
  • @MuhammadMuazzam 我尝试直接在 PhpMyAdmin 中运行 SQL 查询,但失败了。然后我删除了(description, budgetin, budgetout),它在 PhpMyAdmin 中成功运行,所以我在我的 PHP 文件中做了同样的事情,使它工作。
  • 确实,也许 description 是保留关键字,应该避免列名?
【解决方案3】:

将ajax类型改为GET

$.ajax ( {
type: 'GET',
url: 'addtodb.php',
data:{descriptioninput:descriptioninput, budgetin:budgetin, budgetout:budgetout},
success:function (data) {
// Completed successfully
alert('success!');
}
});

【讨论】:

    【解决方案4】:

    我可能是错的,但我相信描述可能是 mySQL 中的保留关键字。尝试封装它

    INSERT INTO budget (`description`, `budgetin`, `budgetout`) VALUES ('$descriptioninput', '$budgetin', '$budgetout')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多