【问题标题】:Outputting SQL queries with Javascript, PHP and AJAX使用 Javascript、PHP 和 AJAX 输出 SQL 查询
【发布时间】:2015-02-28 06:39:03
【问题描述】:

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

对 Web 开发还很陌生,如果这是微不足道的,敬请见谅。之前找到的所有解决方案均无效

我的代码;

a1.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>

scriptget.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;
}

submitinjection.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(); 

?>

提前致谢

【问题讨论】:

  • 我希望您不要以明文形式输入真实密码...
  • success 函数/处理程序添加到您的ajax 调用以处理结果。
  • 在 PHP 文件中 echo 得到你想要的结果,然后在 JS AJAX 中你使用带有变量的 success 函数来得到结果。
  • @ArtOfCode 不,这仅用于测试目的,不用担心哈哈。
  • @jeroen 我对此有点陌生,你能告诉我怎么做吗?

标签: javascript php jquery mysql ajax


【解决方案1】:

您需要处理 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 注入,从而无需转义。

【讨论】:

  • 我现在正在尝试这样做,有没有办法检查哪里出了问题?某种错误日志
  • @Mejaniks 浏览器开发工具的 javascript 控制台将是一个很好的起点。
  • 我目前正在运行:function getAccount(){ var data_returned; console.log('你好'); var phpOut = $.ajax({ type: 'GET', url: 'submitInjection.php', data: 'myusername=billsmith&mypassword=password', 成功: function(data_returned){ drawOutput(data_returned); } }); } 无济于事,我什至没有在控制台上得到任何输出,是否有一些非常明显的东西我错过了?
  • @Mejaniks 如果你有一个console.log 电话,你会得到输出。按 F12。什么浏览器?
  • @jeroen 哈哈抱歉我刚刚测试的时候忘记把它拿出来了,非常感谢大家
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2021-03-31
    • 2023-03-29
    相关资源
    最近更新 更多