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 变量?

使用触发 javascript 验证的 POST 表单和 AJAX 登录到 PHP 文件。无法将数据存储到 PHP

使用 Ajax 在 Javascript 文件中传递和使用 PHP 变量