【问题标题】:PHP $_Get is not receiving querystring valuePHP $_Get 没有收到查询字符串值
【发布时间】:2014-10-22 13:38:00
【问题描述】:

我正在创建一个下拉菜单,将“国家代码”发送到查询 MySQL 的 PHP 文件。然后生成一个 html 表。除了 $_GET 总是什么也没收到外,一切似乎都正常。即使我将查询字符串硬编码为代码。我错过了什么?

HTML:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
     <title>Test</title>
     <script type="text/javascript">
         function showCountry(str) {
             if (str == "") {
              document.getElementById("SurveyContainer").innerHTML = "";
              return;
             }
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } 
            else {  // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    document.getElementById("SurveyContainer").innerHTML = xmlhttp.responseText;
                }
            }

            xmlhttp.open("GET", "getSurveys.php?q=" + str, true);
            xmlhttp.send();
        }
     </script>
</head>
<body>
    <select name="countries" onchange="showCountry(this.value)">
        <option value="">Select Country:</option>
        <option value="WW">WW</option>
        <option value="AU">AU</option>
        <option value="USA">USA</option>
    </select>

    <div id="SurveyContainer"><b>Survey table</b></div>
</body>
</html>

getSurveys.php:

<?php

//Get Country Code
$q = ( isset( $_GET['q'] ) && is_numeric( $_GET['q'] ) ) ? intval( $_GET['q'] ) :'WW';

$con = mysqli_connect('localhost','myusername','mypassword','mydatabase');

if (!$con) {
    die('Could not connect: ' . mysqli_error($con));
}

mysqli_select_db($con,"mydatabase");

$sql="SELECT * FROM tblSurveys WHERE country = '".$q."'";

$result = mysqli_query($con,$sql);

echo "<table class='surveytable'>";
echo "<tr><th width='61'>Country</th><th>Link To Join Paying Survey Panel Web Site</th><th>About Survey Panel</th><th width='93'>Survey Incentives</th></tr>";

while($row = mysqli_fetch_array($result)) {
    echo "<tr><td><b>$row[country]</b></td><td><a href='$row[link]' target='_blank'>$row[name]</a></td><td>$row[description] </td><td>$row[incentives]</td></tr>";
}

echo "</table>"; 

mysqli_close($con);

?>

提前致谢!

【问题讨论】:

  • 如果你直接从浏览器的 URL 栏调用你的脚本,它可以工作吗?
  • 仅供参考,您没有表单标签。您的 HTML 无效。
  • 请修正您的getSurveys.php 内容。我的意思是mypassword'
  • @JohnConde - 不需要表单元素。
  • 什么是 给你看?

标签: php html mysql ajax


【解决方案1】:

我不确定你检查的是什么值:$q$_GET['q'],但是你的 php 脚本顶部的逻辑是错误的:

$q = ( isset( $_GET['q'] ) && is_numeric( $_GET['q'] ) ) ? intval( $_GET['q'] ) :'WW';

您正在检查数值并转换为整数,而您的查询字符串的值不是空值就是国家代码字符串。

因此,您的实际 $_GET['q'] 值将永远不会在您的脚本中使用。

你只需要:

$q = isset( $_GET['q'] ) ? $_GET['q'] :'WW';

然后你需要一个准备好的语句(或mysqli_real_escape_string()...)来防止sql注入。

【讨论】:

  • 大家的好建议。我从每个人那里都用了一点。我仍然没有得到我想要的结果并且感到困惑,直到我意识到我的缓存没有被清除并且我从来没有不查看我的更改。多哈!我清除了浏览器缓存,瞧,它起作用了!所以我不完全确定您的哪些或不是所有的答案都有帮助,但谢谢大家!
猜你喜欢
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2014-10-11
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多