0

可能重复:
如何在 PHP 中获取有用的错误消息?

我已经开始了我的新年决议的一部分,并决定学习 php,作为其中的一部分,我试图解析一个 xml 提要,并回显包含在<a>标签中的事件的名称,将它们链接回 xml 提要上的事件页面地点。

我想我已经全部完成了,但我似乎不明白为什么这不起作用我只是得到一个空白页,如果有人能指出我正确的方向,那将不胜感激,干杯

<?php 
  // F1 W/H xml feed
  $xml = simplexml_load_file('http://whdn.williamhill.com/pricefeed/openbet_cdn?action=template&template=getHierarchyByMarketType&classId=5&marketSort=HH&filterBIR=N');

  foreach ($xml->response->williamhill->class->type as $type) {
    $type_attrib = $type->attributes();
    echo "<h2>".$type_attrib['name']."</h2>"; //Title - in this case f1 championship
} ?>


<ul>
  <?php 
      foreach($type->market as $event) {
          echo "<li>";
          echo "<a href="$event_attributes['url']">";
          echo $event_attributes['name'];
          echo "</a>";
          echo "</li>";
      }
  ?>
</ul>
4

6 回答 6

4
echo "<a href="$event_attributes['url']">";

尝试将该行更改为

echo "<a href=\"".$event_attributes['url']."\">";

Php 解析器对此非常有趣。通常你选择一个并坚持下去,或者随意使用单引号和双引号。请记住,带有双引号的字符串会被解析为变量。

$hello = "Hello";
echo "$hello master";

是相同的

$hello ="Hello";
echo $hello.' master';
于 2013-01-22T22:11:28.220 回答
1

当你测试你的 PHP 脚本时,你会发现打开错误很有用——然后 PHP 会告诉你为什么它没有显示任何东西:

error_reporting(E_ALL);

通常,您会错过;或输入错误的变量名。

在您的情况下,错误在这里:

echo "<a href="$event_attributes['url']">";

你不小心用双引号结束了字符串,所以 PHP 认为字符串在这里结束:

echo "<a href="

这是使用单引号非常方便的地方,因为您的双引号不会关闭字符串。

echo '<a href="' . $event_attributes['url'] . '">';

PHP 中单引号和双引号的主要区别在于,双引号具有特殊的巧妙解析规则,而单引号则没有。例如:

$myVar = "BLAH";
echo "Example $myVar"; // Example BLAH
echo 'Example $myVar'; // Example $myVar
于 2013-01-22T22:14:21.827 回答
1

在你的无序列表中,你应该使用一个点来连接你的字符串,并像这样转义你的双引号:

echo "<a href=\"".$event_attributes['url']."\">";

代替

echo "<a href="$event_attributes['url']">";

您的示例抛出错误,因为您没有使用正确的字符串连接。但是,即使使用正确的 concat,它也会呈现为<a href=http://someurl>,并且您需要根据 html 标准添加双引号。因此,您必须双引号。

于 2013-01-22T22:14:28.013 回答
1

如果您不想在使用 a'或 a之间切换而感到困扰,"那么我建议使用 php 替代语法php 替代语法

使用给定的代码,它看起来像

<?php 
// F1 W/H xml feed
$xml = simplexml_load_file('http://whdn.williamhill.com/pricefeed/openbet_cdn?action=template&template=getHierarchyByMarketType&classId=5&marketSort=HH&filterBIR=N');

foreach ($xml->response->williamhill->class->type as $type) {
    $type_attrib = $type->attributes();
    echo "<h2>".$type_attrib['name']."</h2>"; //Title - in this case f1 championship
} ?>

<ul>
    <?php foreach($type->market as $event):?>
        <li>
            <a href="<?php echo $event_attributes['url']; ?>">
                <?php echo $event_attributes['name']; ?>
            </a>
        </li>
    <? endforeach;?>
</ul>

这将带来的一个好处是它会产生更清晰的代码,因为您可以清楚地将您的php代码与您的代码区分开来html,这是以编写所有其他代码为代价的表示部分,以及<?php ?>其他人声称性能下降的代码。这是你的选择

于 2013-01-22T23:06:28.237 回答
0

改变

echo "<a href="$event_attributes['url']">";

为了

echo "<a href=".$event_attributes['url'].">";
于 2013-01-22T22:10:41.330 回答
0

你错过了你的第二个时期echo,你有你的$event_attributes['url']

<?php 
  foreach($type->market as $event) {
      echo "<li>";
      echo "<a href=".$event_attributes['url'].">";
      echo $event_attributes['name'];
      echo "</a>";
      echo "</li>";
  }

?>

我建议您启用错误日志,它可以让您知道任何脚本中存在问题的行。

于 2013-01-22T22:10:53.490 回答