无法使用PHP和JavaScript更新数据库

时间:2015-10-16 18:02:22

标签: javascript php html mysql

我试图建立一个非常简单的预算"网站仅供练习,但我不能让这个网站更新我的数据库。

基本上我有一个数据库' budgetdb'使用MySQL在XAMPP中运行。我有一张表,结构如下:

enter image description here

我有两个文件,' index.html'和' handleUserInput.php'。

的index.html:

<!DOCTYPE html>
<html>
<body>
    <input type="text" id="description">
    <input type="number" id="budgetin">
    <input type="number" id="budgetout">
    <button type="button" onclick="updateDB()">Add to database</button>

    <script>

        function updateDB() {
            var description = document.getElementById('description').value;
            var budgetin = document.getElementById('budgetin').value;
            var budgetout = document.getElementById('budgetout').value;

            var xmlhttp = new XMLHttpRequest();
            var url = "handleUserInput.php?description='" + description + "'&budgetin='" + budgetin + "'&budgetout='" + budgetout + "'";

            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    alert('Variables sent to server!');
                }
            }
            xmlhttp.open("POST", url);
            xmlhttp.send();
        }

    </script>
</body>
</html>

handleUserInput.php:

<?php

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

    mysql_connect($host, $username, $password;
    mysql_select_db($dbname);

    $description = $_POST['description'];
    $budgetin = $_POST['budgetin'];
    $budgetout = $_POST['budgetout'];

    $query = 'INSERT into budget VALUES ($description, $budgetin, $budgetout)';

    mysql_query($query)

    ?>

显示消息提示,但数据库中未显示任何数据。我在这里做错了什么线索?

更新 Chrome错误:

Notice: Undefined index: description in /Applications/XAMPP/xamppfiles/htdocs/handleUserInput.php on line 13

Notice: Undefined index: budgetin in /Applications/XAMPP/xamppfiles/htdocs/handleUserInput.php on line 14

Notice: Undefined index: budgetout in /Applications/XAMPP/xamppfiles/htdocs/handleUserInput.php on line 15

6 个答案:

答案 0 :(得分:1)

其他答案显示了您编写查询的方式存在的问题,它。应该是,每个值都有引号。

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

但是您对创建URL的方式也有疑问。引号不应该放在查询参数旁边,您应该使用encodeURIComponent来确保正确转义特殊字符。

var url = "handleUserInput.php?description=" + encodeURIComponent(description) + "&budgetin=" + encodeURIComponent(budgetin) + "&budgetout=" + encodeURIComponent(budgetout);

为了防止SQL注入问题,您需要在将它们用作SQL参数之前转义字符串。由于您要在网址中发送参数,而不是POST数据中的参数,因此您需要从$_GET而不是$_POST获取参数。

$description = mysql_real_escape_string($_GET['description']);

虽然如果你现在第一次学习PHP,你应该使用PDO或mysqli,而不是过时的mysql扩展,并使用预准备语句而不是字符串替换。

将执行查询的行更改为:

mysql_query($query) or die(mysql_error());

如果执行查询时出现问题,则会显示错误消息。

答案 1 :(得分:0)

使用

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

description是数据库中的字符串类型,因此您可以使用PHP字符串中的单引号或双引号关闭。

始终考虑安全。将代码重写为(有点安全):

$description = mysql_real_escape_string( $_POST['description'] );
$budgetin = intval( $_POST['budgetin'] );
$budgetout = intval( $_POST['budgetout'] );

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

注意:不要使用mysql_ *函数。它在将来的版本中已弃用。使用MySQLi或PDO

答案 2 :(得分:0)

查询中的引号不正确。应该是(注意外部双引号和内部单引号):

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

但是,请注意这已经打开了SQL注入,其中描述为

'); DROP budget;

此外,您的说明可能包含标点符号和空格,这可能会弄乱您的网址。无论如何,您正在发送POST,因此所有数据都应该在请求的正文中而不是网址。

答案 3 :(得分:0)

您发送的值为 GET 参数而不是 POST 参数。

handleUserInput.php?description='" + description + "'&budgetin='" + budgetin + "'&budgetout='" + budgetout + "'"

通过url传递给PHP的所有内容都将落入$ _GET变量中。不仅PHP bu每个服务器端语言都会表现相同,一旦它是标准GET意味着URL参数和POST是Request Payload

您可以将 $ _ POST 更改为 $ _ GET 或添加数据do xmlhttprequest对象

<!DOCTYPE html>
<html>
<body>
    <input type="text" id="description">
    <input type="number" id="budgetin">
    <input type="number" id="budgetout">
    <button type="button" onclick="updateDB()">Add to database</button>

    <script>

        function updateDB() {
            var description = document.getElementById('description').value;
            var budgetin = document.getElementById('budgetin').value;
            var budgetout = document.getElementById('budgetout').value;
            var params = "description=" + description + "&budgetin=" + budgetin + "&budgetout=" + budgetout;
            var xmlhttp = new XMLHttpRequest();
            xmlhttp .setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlhttp .setRequestHeader("Content-length", params.length);
            xmlhttp .setRequestHeader("Connection", "close");

            var url = "handleUserInput.php?";

            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    alert('Variables sent to server!');
                }
            }
            xmlhttp.open("POST", url,true);
            xmlhttp.send(params);
        }

    </script>
</body>
</html>

答案 4 :(得分:-1)

为了缩小代码,请使用Jquery库而不是简单的JS代码

<html>
<head>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
</head>
<body>
    <input type="text" id="description">
    <input type="number" id="budgetin">
    <input type="number" id="budgetout">
    <button type="button" onclick="updateDB()">Add to database</button>

    <script>

        function updateDB() {
            var description = $('#description');
            var budgetin = $('#budgetin');
            var budgetout = $('#budgetout');

            $.post( "handleUserInput.php", { "description": description, "budgetin": budgetin, "budgetout": budgetout }, function( data ) {
              alert( "Variables sent to server!" );
            } );

        }

    </script>
</body>
</html>

使用mysql_real_escape_string以避免SQL注入您的应用程序。最初的问题是由于未在SQL查询字符串中正确添加php变量引起的,例如:

$input = 'aaa';
echo 'text $input';

此代码将输出

text $input

但是这个

$input = 'aaa';
echo "text $input";

或者这个

$input = 'aaa';
echo "text ".$input.";

将输出

text aaa

请检查以下代码

<?php

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

mysql_connect($host, $username, $password;
mysql_select_db($dbname);

$description = $_POST['description'];
$budgetin = $_POST['budgetin'];
$budgetout = $_POST['budgetout'];

$description = mysql_real_escape_string($description);
$budgetin= mysql_real_escape_string($budgetin);
$budgetout= mysql_real_escape_string($budgetout);
$query = "INSERT into budget VALUES ('".$description."', ".$budgetin.", ".$budgetout.")";

mysql_query($query)

?>

答案 5 :(得分:-2)

使用单个反转逗号和php变量,如下所示。

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