变量导致意外的T_VARIABLE错误

时间:2014-12-31 22:00:32

标签: javascript php jquery wordpress iframe

我正在我的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>

3 个答案:

答案 0 :(得分: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工作在&#34;双引号块,但这是一个不好的做法。使用" text { $_GET['tname'] } text "代替" text $_GET[tname] text ",它向后兼容,不依赖于变量插值

答案 1 :(得分:0)

$smallmap = '[iframe  src="http://trailmeister.com/TOPO_VIEWS/showmap2.php";

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

答案 2 :(得分:0)

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