使用 Javascript、PHP 和 AJAX 输出 SQL 查询
Outputting SQL queries with Javascript, PHP and AJAX
我正在尝试创建一个表单,提交后 returns 无需重新加载 (AJAX) 即可将简单 SQL 查询的输出输出到页面上。我可以获得简单的输出,但是当我将 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();
?>
提前致谢
您需要处理 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);
}
我正在尝试创建一个表单,提交后 returns 无需重新加载 (AJAX) 即可将简单 SQL 查询的输出输出到页面上。我可以获得简单的输出,但是当我将 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();
?>
提前致谢
您需要处理 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);
}