2013-05-10 43 views
0

這裏有一個快速解釋:雖然在一個while循環導致陣列的一部分消失

我第一次從數據庫中拉四個電視節目。我的第二個發現是否當前用戶對他們中的任何一個進行了評分。 有趣的是,如果我的第二個while循環沒有找到從db中拉出的四個電視節目之一的分數,那麼未分級的電視節目根本不會顯示(所以如果用戶給出了三個分數的分數,第四個未分級的人消失了。)...爲什麼是這樣?

下面我有一個電臺表格,我想要預先檢查用戶給電視節目的分數(我會檢查分數是否存在並將「checked」添加到相應的HTML行)。

<?php 
try { 
    $conn = new PDO('mysql:host=localhost;dbname=mytvbox', $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $stmt = $conn->prepare('SELECT * FROM shows WHERE id > (SELECT MAX(id) - 4 FROM shows)'); 
    $stmt->execute(array('id' => $id)); 

    while($row = $stmt->fetch()) { 



    $show_id = $row[0]; 

    $requete = "SELECT * FROM show_score WHERE show_id = $show_id AND user_id = $user_id"; 
    $score = $conn->prepare($requete); 
    $score->execute(array('show_id' => $show_id)); 

    while($row_score = $score->fetch()) { 
      var_dump($row_score); 


?> 


<div id="index-last-shows" class="three columns"> 
<div class="tip"> 
    <a href="<?php echo $row[0]; ?>"><img src="<?php echo $row[4]; ?>" /></a> 
</div> 
<div class="tip-content"> 
    <div class="tip-container"> 
     <div class="tip-header"> 
      <h1> <?php echo $row[1]; ?>  </h1> 
     </div> 
     <div class="row"> 
      <div class="twelve columns"> 
      <div id="flash"></div> 
       <form id="<?php echo $row[0]; ?>"> 
        <div class="your-score"> 
         <div class="">Your Score</div> <div id="flash"></div> 
         <input class="hover-star" type="radio" name="tvshowrating" value="1" title="1"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="2" title="2"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="3" title="3"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="4" title="4"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="5" title="5"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="6" title="6"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="7" title="7"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="8" title="8"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="9" title="9"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="10" title="10"/>  
         <input type="hidden" id="show_id-<?php echo $row[0]; ?>" value="<?php echo $row[0]; ?>" /> 
         <input type="hidden" id="user_id-<?php echo $row[0]; ?>" value="<?php echo $user_id ?>" /> 
         <span id="hover-test" style="margin:0 0 0 20px;"></span> 
         <input id="submitscore" type="submit" value="Submit scores!" onclick="addScore(<?php echo $row[0]; ?>);" /> 
        </div> 
       </form> 
      </div> 
     </div> 
    </div> 
</div> 

編輯:語言更清晰一點。

編輯2:我會放一些屏幕截圖。如果我把右括號中的var_dump後,我得到這個:http://i.imgur.com/CrnsnIe.jpg,如果我把他們在最後就像我需要他們,我得到這個http://i.imgur.com/zVqMOiX.jpg

+1

有丟失括號,不是? – 2013-05-10 16:54:12

+0

唯一的輸出行是'var_dump'。有更多的代碼嗎? – andrewsi 2013-05-10 16:54:32

+0

我已經添加了HTML。基本上,如果我在表單末尾的第二個while循環中放置右括號,我只能得到三個電視節目而不是四個。 – CharlieAus 2013-05-10 17:10:30

回答

1

我想我明白了。這是關於你的第二個,而和括號。

while($row_score = $score->fetch()) { 
    var_dump($row_score); 

當你做到這一點,只有在有東西在下面獲取內容將被打印出來。如果用戶沒有得分,fetch()將返回false並且表單不會被打印。

一兩件事你可以做的是在如果來獲取你的分數一樣,

if($row_score = $score->fetch()) 
    var_dump($row_score); 

有了你給我們的代碼,這將是這樣的,也許:

<?php 
try { 
    $conn = new PDO('mysql:host=localhost;dbname=mytvbox', $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $stmt = $conn->prepare('SELECT * FROM shows WHERE id > (SELECT MAX(id) - 4 FROM shows)'); 
    $stmt->execute(array('id' => $id)); 

    while($row = $stmt->fetch()) { 

     $show_id = $row[0]; 

     $requete = "SELECT * FROM show_score WHERE show_id = $show_id AND user_id = $user_id"; 
     $score = $conn->prepare($requete); 
     $score->execute(array('show_id' => $show_id)); 

     if($row_score = $score->fetch()) 
      var_dump($row_score); 


?>  

<div id="index-last-shows" class="three columns"> 
<div class="tip"> 
    <a href="<?php echo $row[0]; ?>"><img src="<?php echo $row[4]; ?>" /></a> 
</div> 
<div class="tip-content"> 
    <div class="tip-container"> 
     <div class="tip-header"> 
      <h1> <?php echo $row[1]; ?>  </h1> 
     </div> 
     <div class="row"> 
      <div class="twelve columns"> 
      <div id="flash"></div> 
       <form id="<?php echo $row[0]; ?>"> 
        <div class="your-score"> 
         <div class="">Your Score</div> <div id="flash"></div> 
         <input class="hover-star" type="radio" name="tvshowrating" value="1" title="1"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="2" title="2"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="3" title="3"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="4" title="4"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="5" title="5"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="6" title="6"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="7" title="7"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="8" title="8"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="9" title="9"/> 
         <input class="hover-star" type="radio" name="tvshowrating" value="10" title="10"/>  
         <input type="hidden" id="show_id-<?php echo $row[0]; ?>" value="<?php echo $row[0]; ?>" /> 
         <input type="hidden" id="user_id-<?php echo $row[0]; ?>" value="<?php echo $user_id ?>" /> 
         <span id="hover-test" style="margin:0 0 0 20px;"></span> 
         <input id="submitscore" type="submit" value="Submit scores!" onclick="addScore(<?php echo $row[0]; ?>);" /> 
        </div> 
       </form> 
      </div> 
<?php } //End While 
} //End Try ?> 
+0

感謝您的這一點,但不幸的是,這是行不通的。我會放置一些屏幕截圖。如果我在var_dump之後加上右括​​號,我會得到這個:http://i.imgur.com/CrnsnIe.jpg,如果我把它們放在最後,就像你一樣,我會得到這個http://i.imgur.com/ zVqMOiX.jpg – CharlieAus 2013-05-10 18:14:16

+0

它在http://i.imgur.com/CrnsnIe.jpg上工作,不是嗎? – 2013-05-10 18:22:20

1

如果我的第二個while循環沒有找到得分四個電視節目之一從數據庫拉,沒有任何顯示

因爲你沒有打印什麼,當沒有得分?

地址:

if ($score->num_rows() === 0 { 
    echo "no score"; 
} 
+0

我的意思是說,如果我從$ row [1]中的第一個查詢獲得了tvshows,而不是有四個想要的節目,我只能得到三個。 (所以這沒有幫助!) – CharlieAus 2013-05-10 17:11:38