【问题标题】:Ajax, PHP, SQL, and JavaScriptAjax、PHP、SQL 和 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 注入。不过,感谢您注意到这一点。

标签: javascript php html sql ajax


【解决方案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 的单引号 (' ')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2014-09-02
      • 2015-07-02
      • 1970-01-01
      • 2013-07-09
      相关资源
      最近更新 更多