2017-03-15 97 views
1

虽然我在过去很多次使用过stackoverflow的答案,但这是我第一次在stackoverflow上的问题。我研究了很多关于我的问题,并无法得到这个具体问题的答案。希望发布实际问题可能会有帮助PHP if语句里面的for循环和追加结果的div

所以在这里,它是: 我有2周的div在artwork.php

呼应'<div id="on_going_art"></div>';

echo '<div id="completed_art"></div>';

我的DB有2个表:艺术品和user_hour_log 每个USER_ID可以有多个art_id分配给它的每个art_id可以有多个user_hour_log条目。 说$艺术[]是与它的多个art_id一个数组,我从饼干越来越USER_ID:

for ($i=0; $i<count($art); $i++){ 

      $query2= "SELECT *, SUM(total_time) AS total_time FROM user_hour_log WHERE user_id = '".$user_id."' && art_id = '".$art[$i]."'"; 
      $result2 = mysqli_query($conn, $query2); 

      $row2 = $result2 -> fetch_assoc(); 
      $hours_completed_artwork = $row2['total_time']; 

      $query3= "SELECT * FROM artwork WHERE winner_user_id = '".$user_id."' && art_id = '".$art[$i]."'"; 
      $result3 = mysqli_query($conn, $query3); 
      $row3 = $result3 -> fetch_assoc(); 
      $highest_bid_hours = $row3['highest_bid_hours']; 

我在这里检查,如果$ hours_completed_artwork低于$ highest_bid_hours少,那么在#on_goin_art追加其他附加在#completed_art分别为:

if($hours_completed_artwork < $highest_bid_hours) { 
        echo '<script type="text/javascript"> 
          $(document).ready(function() { 
           $("#on_going_art").append(" 
            echo "<div class=\"row box1\">"; 
            echo "<div class=\"col-xs-4 col-sm-4 col-md-4\">"; 
            echo "<img class=\"img-responsive thumbnail\" src=\"http://i.imgur.com/jYea7Id.jpg?1\">"; 
            echo "</div>"; 
            echo "<div class=\"col-xs-8 col-sm-8 col-md-8\">"; 
            echo "<h6 >"'.$row3['artwork_name'].'"<span id=\"percentage\">"'.number_format($hours_completed_artwork/ $highest_bid_hours *100,0).'"%</span> </h6>"; 
            echo "</div>"; 
            echo "</div>"; 
           "); 
          }); 
         </script>'; 
    } else if($hours_completed_artwork >= $highest_bid_hours) { 
         echo '<script type="text/javascript"> 
           $(document).ready(function() { 
            $("#completed_art").append(" 
             echo "<div class=\"row box1\"> \n"; 
             echo "<div class=\"col-xs-4 col-sm-4 col-md-4\"> \n"; 
             echo "<img class=\"img-responsive thumbnail\" src=\"http://i.imgur.com/jYea7Id.jpg?1\"> \n"; 
             echo "</div> \n"; 
             echo "<div class=\"col-xs-8 col-sm-8 col-md-8\"> \n"; 
             echo "<h6 >'.$row3['artwork_name'].'<span id=\"percentage\">100% </span> </h6> \n"; 
             echo "</div> \n"; 
             echo "</div>"; 
            "); 
           }); 
          </script>'; 

的问题是追加不工作,如果我只是追加字符串,例如:“不完整”和“完整”它完美地附加在右侧的div但它不与我的代码做到这一点。

我试图在包含脚本标记之前关闭php标记,该脚本标记也可以工作。 我已经包含Google CDN jQuery链接,试图改变脚本标签的位置。

对不起,这么长的问题。希望它是有道理的。

+0

转换$ ROW3 [“ARTWORK_NAME”]这些单引号里面的双引号,然后再试一次。 –

+0

事实上,这不是问题,因为如果我检查DOM,它会将$ row3 ['artwork_name']的值附加到正确的div,但不会转换HTML标记。它只是将所有div标签和img标签附加相同的代码,而不解析它们来显示。我得到错误:“参数列表后面的”Uncaught SyntaxError:missing“),但根本没有语法错误。 –

+1

你也使用每行回声,删除它,一个主回声就足够了。 –

回答

0

这里是一个工作片段:

$row3['artwork_name'] = 'Some name'; 
$hours_completed_artwork = 40; 
$highest_bid_hours = 50.00; 

$percentage = $hours_completed_artwork < $highest_bid_hours ? number_format($hours_completed_artwork/ $highest_bid_hours *100,0) : 100; 
$html = '<div class="row box1">\'+ 
     \'<div class="col-xs-4 col-sm-4 col-md-4">\'+ 
     \'<img class="img-responsive thumbnail" src="http://i.imgur.com/jYea7Id.jpg?1">\'+ 
     \'</div>\'+ 
     \'<div class="col-xs-8 col-sm-8 col-md-8">\'+ 
     \'<h6 >'.$row3['artwork_name'].'<span id="percentage">'.$percentage.'%</span> </h6>\'+ 
     \'</div>\'+ 
     \'</div>'; 


$snippet = '<script type="text/javascript"> 
$(document).ready(function() { 
    $("#on_going_art").append(\''.$html.'\'); 
}); 
</script>'; 

echo '<div id="on_going_art"></div>'; 
echo $snippet; 

我重构代码,使其更易于维护。在JavaScript中,你不能只是将HTML引入追加函数。新行需要使用+和单引号或引号进行连接。这是现在内置的。此外,由于只有百分比是100或变量,我把这个批次放到一个变量中。

+0

非常感谢你这段代码工作得很好。我在PHP中编写脚本,但从来没有像使用“echo $ snippet;”那样调用它,并且当我在代码中引入该部分时,它可以正常工作,对我的追加字符串进行一些重构。 –

+0

谢谢大家你的回复太糟糕了,我现在不能评价任何人,只有不到15名的声望 –

+0

只需用新行(主要出错的部分)回显html元素,就会产生一个呃JavaScript中的ror呻吟意外令牌或类似的东西。因为在结果和显示的javascript中append()函数中缺少引号,并且新行必须使用单引号或双引号连接。例如。 “

字符串行1

”+“

字符串行2

” – Yolo

-1

你的报价搞砸了。 而你在字符串内部有多个回声,我想你只是复制了代码并将其放入字符串中。

它会更容易先构建HTML,把它变成一个变种,然后使用它:

if($hours_completed_artwork < $highest_bid_hours) { 
    $html = "<div class=\"row box1\"> 
      <div class=\"col-xs-4 col-sm-4 col-md-4\"> 
      <img class=\"img-responsive thumbnail\" src=\"http://i.imgur.com/jYea7Id.jpg?1\"> 
           </div> 
           <div class=\"col-xs-8 col-sm-8 col-md-8\"> 
           <h6 >".$row3['artwork_name']."<span id=\"percentage\">".number_format($hours_completed_artwork/ $highest_bid_hours *100,0)."%</span> </h6> 
        </div> 
        </div>"; 

    echo "<script type=\"text/javascript\"> 
      $(document).ready(function() { 
       $(\"#on_going_art\").append('".$html."'); 
      }); 
     </script>"; 

//.... 

更妙的是使用HEREDOC或NEWDOC

反正结构似乎对我来说有点奇怪。为什么不在第一时间通过php包含html?它真的不得不通过JavaScript以后添加吗?

+0

这将抛出javascript错误 – Yolo