【问题标题】:Can someone tell me what's wrong with this simple PHP有人能告诉我这个简单的 PHP 有什么问题吗
【发布时间】:2012-08-15 04:15:45
【问题描述】:
    <?php
  header("Content-type: text/xml");
  $names = array (
   "John Smith", "John Jones", "Jane Smith", "Jane Tillman",
   "Abraham Lincoln", "Sally Johnson", "Kilgore Trout",
   "Bob Atkinson","Joe Cool", "Dorothy Barnes",
   "Elizabeth Carlson", "Frank Dixon", "Gertrude East",
   "Harvey Frank", "Inigo Montoya", "Jeff Austin",
   "Lynn Arlington", "Michael Washington", "Nancy West" );
if (!$query) {
   $query=$_GET['query'];
}
echo "<?xml version=\"1.0\" ?>\n";
echo "<names>\n";
while (list($k,$v)=each($names)) {
   if (stristr($v,$query)) {
      echo "<name>$v</name>\n";
   }
}
echo "</names>\n";
?>

如您所见,此 PHP 只是在数组中查找名称。
我将此 php 文件放在我的 xampp 根目录中,然后在浏览器中键入 search.php?query=John,然后它告诉我
此页面包含以下错误: 第 2 行第 1 列的错误:文档末尾的额外内容 下面是出现第一个错误之前的页面渲染。
怎么了?

【问题讨论】:

  • 这个错误与php无关。打开页面内容,查看生成的xml是否有效
  • 如何打开页面内容?我正在使用 chrome.@zerkms
  • @cloudygoose,$query 是什么,它有什么价值?
  • 我认为它只是 HTTP GET 请求中的一个变量。 @萨宾
  • 是的,您看到的是 XML 呈现错误,而不是 PHP 错误。在 Chrome 中查看源代码,您应该会在那里看到一些 XML。 XML 错误可能是由于有关 $query 未定义的 PHP 警告。

标签: php


【解决方案1】:

我认为问题出在 -

if (!$query) {
   $query=$_GET['query'];
}

当我运行您的代码时,上面的代码出现错误。代码块不会做任何事情,因为 $query 似乎没有设置。

试试这个并确保设置了 $_GET["query"] 变量:

  $query=NULL;
    if (isset($_GET["query"])) {
       $query=$_GET['query'];
    }

【讨论】:

    【解决方案2】:

    试试这个:

     <?php
      header("Content-type: text/xml");
      $names = array (
       "John Smith", "John Jones", "Jane Smith", "Jane Tillman",
       "Abraham Lincoln", "Sally Johnson", "Kilgore Trout",
       "Bob Atkinson","Joe Cool", "Dorothy Barnes",
       "Elizabeth Carlson", "Frank Dixon", "Gertrude East",
       "Harvey Frank", "Inigo Montoya", "Jeff Austin",
       "Lynn Arlington", "Michael Washington", "Nancy West" );
    var $query = NULL;
    
    if (isset($_GET['query'])) {
       $query=$_GET['query'];
    }
    echo "<?xml version=\"1.0\" ?>\n";
    echo "<names>\n";
    while (list($k,$v)=each($names)) {
       if (stristr($v,$query)) {
          echo "<name>$v</name>\n";
       }
    }
    echo "</names>\n";
    ?>
    

    【讨论】:

    • 如果查询字符串中未设置query,这仍可能引发通知级错误。
    • 你应该详细说明他为什么要尝试——至少告诉他问题出在哪里。
    【解决方案3】:

    您必须在使用变量$query = null; 之前对其进行初始化。

    【讨论】:

    • 这并不能解决逻辑(相对于语法)错误。 $query = null; if (!$query) {} 显然不是他的本意。
    【解决方案4】:

    改变

    if (!$query) {
       $query= $_GET['query'];
    }
    

    if (!isset($query)) {
       $query= $_GET['query'];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多