使用 Javascript、PHP 和 AJAX 输出 SQL 查询


Outputting SQL queries with Javascript, PHP and AJAX

我正在尝试有一个表单,该表单在提交时将简单SQL查询的输出返回到页面上,而无需重新加载(AJAX)。我可以让简单的输出工作,但是当我使用 PHP 进行 SQL 查询时,不会返回任何内容。任何帮助将不胜感激。我也找不到检查我的Javascript/Php有什么问题。

对于Web开发来说非常新,所以如果这是微不足道的,请道歉。所有以前找到的解决方案都不起作用

我的代码;

回答 1.php

<script src='../js/scriptget.js'></script>
<form>
            <fieldset>
                <legend>Login</legend>
                Username:<br>
                <input type="text" name="myusername" placeholder="Username">
                <br>
                Password:<br>
                <input type="text" name="mypassword" placeholder="Password">
                <br><br>
                <input type="submit" value="Submit" onclick='return getAccount();'>
            </fieldset>
        </form>

脚本获取.js

function getAccount(){
var phpOut = $.ajax({
    type: 'GET',
    url: 'submitInjection.php',
    data: 'myusername=billsmith&mypassword=password'
});

drawOutput('hello');
return false;
}

function drawOutput(responseText){
    var container = document.getElementById('output2');
    container.innerHTML = responseText;
}

提交注入.php

<?php
$host="localhost"; //Host Name
$username="root"; // MySql Username
$password="root"; // Mysql Password
$db_name="Honours2"; //Database Name
$tbl_name="Users"; // Table Name
// Connect to server and select database
$conn = mysql_connect("$host", "$username", "$password") or die("Cannot Connect");
mysql_select_db("$db_name") or die("Cannot select DB");

// User and Password sent from form
$myusername = $_GET['myusername'];
$mypassword = $_GET['mypassword'];
/**
Protect MYSQL INJECTION
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
*/
$sql = "SELECT * 
        FROM $tbl_name 
        WHERE username = '$myusername'
        AND password = '$mypassword'
        ";
$result=mysql_query($sql);
/*  echo $sql; */
if (!$result){
    die('Invalid Query: ' . mysql_error() . $sql);
}
if ($result){
    echo($sql);
}
/*  var_dump($result); */   
while ($row = mysql_fetch_assoc($result)){
    echo $row['username'];
    echo ": ";
    echo $row['balance'];
}
mysql_free_result($result);
$conn->close(); 
?>

提前致谢

您需要处理 ajax 调用的结果,例如 success 函数。你也可以使用像 .done()$.when().then() 这样的东西,请查看 jQuery 手册。

一个使用 success 函数的简单示例:

var phpOut = $.ajax({
    type: 'GET',
    url: 'submitInjection.php',
    data: 'myusername=billsmith&mypassword=password',
    success: function(data_returned) {
        alert(data_returned);
        // or
        $('#output2').html(data_returned);
    }
});

一些附加说明:

  • 不要使用 GET 将敏感信息发送到服务器,而是使用 POST;
  • 不要存储纯文本密码,盐和哈希它们;
  • mysql_*函数已弃用,您应该切换到 mysqli_* 或 PDO,您可以在其中使用预准备语句来避免 sql 注入,从而不需要转义。

您必须向$.ajax()调用添加一个success回调函数。该回调函数应该调用您的"drawOutput"函数,并将响应作为参数获得。像这样:

success: function (data) {
    drawOutput(data);
}