Ajax、PHP、SQL 和 JavaScript
Posted
技术标签:
【中文标题】Ajax、PHP、SQL 和 JavaScript【英文标题】:Ajax, PHP, SQL, and JavaScript 【发布时间】:2017-09-14 05:45:23 【问题描述】:我遇到了一个我找不到答案的问题,我很少在这里提问,但我很困惑。任何帮助将不胜感激。
这是接收 Ajax 调用的 PHP。
<?php
session_start();
$_SESSION["my_data"] = $_POST['action'];
$DB_HOSTNAME = 'localhost';
$DB_USERNAME = 'username';
$DB_PASSWORD = 'password';
$link2 = mysqli_connect($DB_HOSTNAME,$DB_USERNAME,$DB_PASSWORD) or die('Unable to establish a DB1 connection');
mysqli_select_db($link2, '$DB_USERNAME');
$orderQuery = mysqli_query($link2, "SELECT * FROM table WHERE id='".$_SESSION['my_data']."'");
$orderQuery = mysqli_fetch_assoc($orderQuery);
$orderInfo = "
<table class='table table-striped'>
<tbody>
<tr>
<td>#: </td>
<td>". $_SESSION['my_data'] ."</td>
</tr>
<tr>
<td> Full name: </td>
<td>". $orderQuery['firstname'] . " " . $orderQuery['lastname'] ."</td>
</tr>
<tr>
<td> Address: </td>
<td> ". $orderQuery['shipping_address_1'] ."<br> ". $orderQuery['shipping_city'] . " " . $orderQuery['shipping_zone'] . " " . $orderQuery['shipping_postcode'] ." </td>
</tr>
<tr>
<td> Card Expiry Date Month: </td>
<td> 08 </td>
</tr>
</tbody>
</table><br>
";
echo $orderInfo/* . $_POST['action']*/; ?>
这是进行调用的脚本。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
var myWindow;
function myFunction()
myWindow = window.open('', '_blank');
myWindow.document.write("<link rel='stylesheet' type='text/css' href='stylesheet.css'>");
var orderNum;
orderNum = document.getElementsByClassName('summary_value')[0].innerhtml;
orderNum = orderNum.replace("#", "");
$.ajax( type : 'POST',
data : 'action':orderNum,
url : 'process.php',
success: function ( data )
myWindow.document.write( data );
,
error: function ( xhr )
alert( "error" );
);
myWindow.document.write("<br>");
myWindow.document.write(document.getElementById("payInfor").innerHTML);
</script>
<button onclick='myFunction()' class="btn btn-default">Print Pay Info</button>
这可能是一个简单的问题,但我看不到。
我知道 Ajax 正在工作,因为它显示了一些信息 ($_SESSION['my_data'])
,所以我认为这与我的 SQL 语句有关,但语法看起来是正确的。
【问题讨论】:
你遇到了什么错误?mysqli_select_db($link2, '$DB_USERNAME');
当你有单引号时,它不会是一个变量,而是那个确切的字符串。然后,为 PHP 启用错误报告并检查控制台是否有任何 JS 错误,让 MySQLi 使用mysqli_error()
告诉您那里的任何错误(或设置 MySQLi 以抛出异常)。通过获取脚本向您抛出的错误进行调试始终是第一站!那么你应该使用参数化查询,你已经有一个支持它的API。
接受信用卡付款的网站上存在 SQL 注入漏洞?哇
@andrew 一旦代码正常运行,我就会添加清理和安全性。此外,此页面受管理员密码保护,并且有权访问的人不够精通技术,不知道什么是 sql 注入。不过,感谢您注意到这一点。
【参考方案1】:
乍一看我认为mysqli_select_db($link2, '$DB_USERNAME');
这里是错误。
必须是mysqli_select_db($link2, $DB_USERNAME);
或mysqli_select_db($link2, $DB_NAME);
【讨论】:
引号内的变量将充当变量,因此这似乎不是错误 那个是双引号,这个是单引号【参考方案2】:mysqli_select_db()
期望参数一是连接,参数二是数据库名称。在您的情况下,您传递的是'$DB_USERNAME'
。因此,由于单引号,您的代码将连接到名为 '$DB_USERNAME'
的数据库。改为将其更改为数据库名称。 $DB_NAME
或 'database_name'
应该可以工作。在开发模式下,尝试启用error_reporting(E_ALL)
来捕获此类错误。
【讨论】:
【参考方案3】:尝试用mysqli_fetch_array
替换这个mysqli_fetch_assoc
和($link2, "SELECT * FROM table WHERE id='".$_SESSION['my_data']."'")
($link2, "SELECT * FROM table WHERE id=".$_SESSION['my_data']."")
注意:删除 id 的单引号 (' ')
【讨论】:
以上是关于Ajax、PHP、SQL 和 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP 和 Ajax 将数组传递给 Javascript?
html PHP代码片段: - AJAX基本示例:此代码演示了使用PHP和JavaScript实现的基本AJAX功能。
这是正确使用 ajax 和 php - mysql - javascript 吗?
如何使用 Javascript 和 Ajax 将 HTML 单选按钮值传递给 PHP 变量?