【问题标题】:variable causing unexpected T_VARIABLE error导致意外 T_VARIABLE 错误的变量
【发布时间】:2014-12-31 22:00:31
【问题描述】:

我正在我的 Wordpress 网站中编写一些可以运行的 php 代码直到我尝试在脚本中使用一个变量。操作说明:

  • 系统显示需要充当可点击元素的 iframe
  • iframe 加载需要几秒钟,导致它覆盖标签,因此 iframe 不可点击。
  • 最后会重置 css 并在延迟后分配 href 属性,使 iframe 再次可点击。
  • 如果我对 URL 进行硬编码,一切都很好,但如果我使用变量(以便可以动态分配 url),我会收到“意外的 '$MYURL' (T_VARIABLE)”错误。李>
  • 此脚本段中未设置的所有变量均已预先设置,并且在没有 $MYURL 变量的情况下都可以正常工作

违规行是 348,或接近底部,并且是

$(this).attr('href', '<?php echo $MYURL; ?>');

这是之前在第 314 行定义的,即

$MYURL = "http://trailmeister.com/TOPO_VIEWS/showmap.php?gpx={$row[gpx_file]}&trail={$_GET[tname]}";

我很难过。在否决我之前,如果您需要更多信息,请告诉我。这段代码的关键部分在最后的部分。这是代码:

<?php
if ( is_user_logged_in() ) {
    $routequery = mysql_query("SELECT * from wp_routes WHERE trail_id = ".$trailid."");
    $MYURL = "http://example.com/showmap.php?gpx=$row[gpx_file]&trail=$_GET[tname]";
    echo "<h2>Rider's Routes</h2><a href='/submit-route?trail=$_GET[trail]'><b>";
    echo "[ Submit a new route ]</b></a><br>";
    if (mysql_num_rows($routequery)){
        require_once('GPXIngest.class.php');    
        while ($row = mysql_fetch_array($routequery)) {
            $user = get_user_by( 'id', '1' );
            echo "<div style='float:left;margin-right:5px;'>";
            $smallmap = '[iframe  src="http://trailmeister.com/TOPO_VIEWS/showmap2.php';
            $smallmap .= '?gpx='.$row[gpx_file].'&trail='.$_GET[tname].'"]';
            echo "<a id='bigmap' href='http://trailmeister.com/TOPO_VIEWS/showmap.php?";
            echo "gpx=$row[gpx_file]&trail=$_GET[tname]' style='border:1px red solid; ";
            echo "margin-right: -150px; z-index:999; position:absolute; display:inline-block;";
            echo " width:150px; height:150px;'></a>";
            echo do_shortcode($smallmap);
            echo "</div>";
            echo "<div><a href='http://trailmeister.com/TOPO_VIEWS/GPX/download.php?";
            echo "gpx=$row[gpx_file]'><b>[ Download this route ]</b></a><br>";
            echo "Submitted $row[submitted] by " .$user->user_nicename."<br>";
            echo "Route Difficulty: $row[difficulty]   |  ";
            echo "Trail Length: $row[trail_length] <br>";
            echo "<i>$row[comments]</i></div>";
            }
        }   
    }
?>
<script>
$('#bigmap')
      .delay(4000)
      .queue( function(next){ 
        $(this).css({
    'border':'1px red solid',
'margin-right': '-150px',
'z-index':'999', 
'position':'absolute',
'display':'inline-block',
'width':'150px',
'height':'150px'
});
$(this).attr('href', '<?php echo $MYURL; ?>');
 
        next();     
      });
</script>

【问题讨论】:

  • 看颜色编码。这看起来很不对。
  • 你得到的行号和确切的错误信息是什么?
  • 解析错误:语法错误,E:\web\public_html\case42\TRAILMEISTER\wp-content\plugins\php-code-for-posts\PHPPostCode 中出现意外的 '$MYURL' (T_VARIABLE)。 php(85) : eval()'d 代码在第 348 行 -
  • 我假设您不想看到所有 400 多行代码,而工作与不工作之间的唯一区别是包含 $MYURL。如果我错了,请在否决我之前告诉我。
  • 你能指出在你的 400 行代码中行号映射到哪一行吗? :)

标签: javascript php jquery wordpress iframe


【解决方案1】:

首先这是一团糟,这是问题的很大一部分,我建议从一开始就清理它并为你的 while 循环使用模板语法

   while ($row = mysql_fetch_array($routequery)) {
        $user = get_user_by( 'id', '1' );
        echo "<div style='float:left;margin-right:5px;'>";
        $smallmap = '[iframe  src="http://trailmeister.com/TOPO_VIEWS/showmap2.php';
        $smallmap .= '?gpx='.$row[gpx_file].'&trail='.$_GET[tname].'"]';
        echo "<a id='bigmap' href='http://trailmeister.com/TOPO_VIEWS/showmap.php?";
        echo "gpx=$row[gpx_file]&trail=$_GET[tname]' style
 //...

变成

   <?php
        $user = get_user_by( 'id', '1' ); //why is this in the loop with static values?

        while($row = mysql_fetch_array($routequery)):
   ?>

        <div style='float:left;margin-right:5px;'>
        <?php
            $smallmap = '[iframe  src="http://trailmeister.com/TOPO_VIEWS/showmap2.php';
            $smallmap .= '?gpx='.$row["gpx_file"].'&trail='.$_GET["tname"].'"]';
        ?>
        <a id='bigmap' href='http://trailmeister.com/TOPO_VIEWS/showmap.php? "gpx=$row["gpx_file"]&trail=$_GET["tname"]' style
 //...
  <?php endwhile; ?>

一旦你这样做了,问题就会更容易发现。模板语法是这样的:

  <?php while( $bla ) : ?> 
      html
  <?php endwhile; ?> 

  <?php if( $bla ) : ?> 
      html
  <?php endif; ?> 

查看语法荧光笔甚至 notpad++,因为其他人说过在数组键周围加上引号

 $_GET["tname"]

没有

 =$_GET[tname]

PHP 将后者视为未定义的常量。这 may 在 " 双引号块中工作,但使用它是一种不好的做法。使用 " text { $_GET['tname'] } text " 而不是 " text $_GET[tname] text ",它向后兼容并且不依赖于变量插值

【讨论】:

  • 静态值使此功能目前仅对管理员可见。我会试试模板语法。
  • 这帮助我解决了问题,我基本上重新构建了整个东西。我仍然必须在我的代码中创建和引用变量,而 javascript 一直给我带来麻烦。原来是一个简单的不平衡报价。感谢所有看到这个的人。一次编码太多小时的疲劳眼睛只有睡觉才能治愈。
【解决方案2】:
$smallmap = '[iframe  src="http://trailmeister.com/TOPO_VIEWS/showmap2.php";

请注意,您用单引号打开该行,但用双引号将其关闭。使它们保持一致——无论是单引号还是双引号。

【讨论】:

  • 这是我的一个错字,试图在狭窄的视口中使代码在此处更具可读性 - 我的引号是一致的。
【解决方案3】:

你的第一个 $smallmap 没有关闭(注意在那之后所有的回声都是绿色的吗?)

【讨论】:

  • 这里是一个错字,而不是我在服务器上的代码 - 我的浏览器由于某种原因没有对其进行颜色编码。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多