2012-08-14 75 views
0

我不断收到这样的警告:不断得到为的foreach()提供了无效的论点

警告:这里 为的foreach()提供了无效的参数是我的全部代码performe从MySQL的函数列表输出和寻呼它10输出每页,错误出现在最后一页

<?php 
    require_once('dbconnect.php'); 

    $yesterday = date("Y-m-d", strtotime("yesterday")); 
    $page=intval($_POST['p']); 
    if($page=='') 
    { 
     $page=1;  
    } 
    $dbadd=($page-1)*10; 

    $query = "SELECT * FROM ranking"; 
    $totalposts=mysql_num_rows(mysql_query($query)); 
    $totalpages=ceil($totalposts/10); 
    $query = "SELECT r.ranking,r.screenname,r.name,r.followers,r.tweets,r.location,r.`join date`,r.avatar, h.date, r.followers-h.followers followers_diff, r.tweets-h.tweets tweets_diff FROM ranking r, ranking_hist h WHERE r.screenname=h.screenname and h.date='$yesterday' AND r.ranking>$dbadd AND r.ranking<($dbadd+11) ORDER BY ranking ASC LIMIT 10 "; 

    $result = mysql_query($query); 

    if(!$result) { 
    die("Error: " . mysql_error()); 
    } 

    while($row = mysql_fetch_assoc($result)) { 
    $tweep = $row['screenname']; 
    $tweeps[$tweep] = $row; 
    } 

    $query = "SELECT r.ranking,r.screenname,r.name,r.followers,r.tweets,r.location,r.`join date`,r.avatar FROM ranking r WHERE r.screenname NOT IN (SELECT DISTINCT screenname from ranking_hist) AND r.ranking>$dbadd AND r.ranking<($dbadd+11) ORDER BY ranking ASC LIMIT 10"; 

    $result = mysql_query($query); 
    if(!$result) { 
    die("Error: " . mysql_error()); 
    } 

    while($row = mysql_fetch_assoc($result)) { 
    echo ""; 
    $tweep = $row['screenname']; 
    $tweeps[$tweep] = $row; 
    } 

    mysql_free_result($result); 

    $i = 0; 
    $total_amount = count($tweeps); 

    foreach ($tweeps as $tweep) { 
     $i++; 
     if ($total_amount == $i) { 
      $class = 'divrow divrowlast'; 
     } else { 
      $class = 'divrow'; 
     } 

     $col5 = ""; 
    if($tweep['followers_diff'] > 0) {     
     $col5 = "<span style='color:green; display:inline;'> +" . $tweep['followers_diff'] . "▲ </span>"; 
     } 
    else if($tweep['followers_diff'] < 0) { 
     $col5 = "<span style='color:red; display:inline;'> -" . $tweep['followers_diff'] . "▼ </span>"; 
     } 

     $html_table .= '<div class="'.$class.'"><ul>' . 
      "<li class='row100rank'> " . $tweep['ranking'] . "</li>" .  
      "<li class='row100user'> 
      <div class='avatar'><img width='32' height='32' src='" . $tweep['avatar'] . "' alt='" . $tweep['screenname'] ."' /></div> 
      <div class='feature-author'><a class='text_bigger' href='http://www.twitter.com/" . $tweep['screenname'] . "/'>@".$tweep['screenname']."</a></div> 
     <div class='row100description'>".$tweep['name']."<br />".$tweep['location']."</div></li>" . 
       "<li class='pad'><div class='stat'> <span>" . $tweep['followers'] . " $col5</span> followers</div></li>" . 
       "<li class='pad rowTwitte'><div class='stat'> <span>" . $tweep['tweets'] . " $col6</span> tweets</div></li>" . 
       "<li class='pad rowJoionDate'><div class='stat'> <span>" . date ('d M y', strtotime($tweep['join date'])) . "</span> joindate</div></li>" . 
       "</ul></div>"; 
      } 

     echo $html_table; 

?> 

<div class="dataTables_paginate paging_full_numbers" ><span class="first paginate_button" ><a class="pagelinks" href="javascript:void(0);" pageid="1" onClick="changepage(1);">First</a></span> 
       <span class="previous paginate_button" ><a class="pagelinks" href="javascript:void(0);" pageid="<?php echo $page>1?($page-1):1;?>" onClick="changepage(<?php echo $page>1?($page-1):1;?>);" >Previous</a></span> 

<span> 
<?php 
    switch($page){ 
     case 1: 
      $it=1; 
      $itl=6; 
      break; 
     case 2: 
      $it=1; 
      $itl=6; 
     break; 
     case $totalpages: 
     $it=$totalpages-4; 
     $itl=$totalpages+1; 
      break; 
     case $totalpages-1: 
     $it=$totalpages-4; 
     $itl=$totalpages+1; 
     break; 
     default: 
     $it=$page-2; 
     $itl=$page+3; 
    } 

    for(;$it<$itl;$it++){ 
?> 
    <span class="<?php echo $page== $it?'paginate_active':'paginate_button'; ?>"> 
     <a class="pagelinks" href="javascript:void(0);" pageid="<?php echo $it;?>" onClick="changepage(<?php echo $it;?>);" ><?php echo $it; ?></a></span> 
<?php 
    } 
?> 

    </span> 
    <span class="next paginate_button" ><a class="pagelinks" href="javascript:void(0);" pageid="<?php echo $page<$totalpages?($page+1):$page;?>" onClick="changepage(<?php echo $page<$totalpages?($page+1):$page;?>);">Next</a> 
    </span> 

    <span class="last paginate_button" > 
     <a class="pagelinks" href="javascript:void(0);" pageid="<?php echo $totalpages;?>" onClick="changepage(<?php echo $totalpages;?>);">Last</a> 
    </span></div> 

    <div class="dataTables_info"> 
     Showing <?php echo ($page-1)*10+1;?> to <?php echo ($page-1)*10+10;?> of <?php echo $totalposts;?> 
    </div> 
+0

$ tweeps一定不能是数组或对象。尝试var_dumping它或类似的东西,看看它到底是什么。 – Telgin 2012-08-14 11:17:39

+0

你能告诉我们什么$ tweeps包含? – DonSeba 2012-08-14 11:17:44

+1

'$ tweeps'不是数组或对象。你能告诉我们在哪里定义? – Leri 2012-08-14 11:18:34

回答

1

尝试打码。您的$ tweeps在某些情况下可能不是数组或对象,请检查数组是否为空并且is_array($tweeps)

$i = 0; 
$total_amount = count($tweeps); 
if(is_array($total_amount) && !empty($tweeps)) 
{ 
    foreach ($tweeps as $tweep) 
    { 
     $i++; 
     if ($total_amount == $i) 
     { 
      $class = 'divrow divrowlast'; 
     } 
     else 
     { 
      $class = 'divrow'; 
     } 
    } 
} 
+1

'count()'不起作用。例如。对于字符串,它返回1. – PeeHaa 2012-08-14 11:23:26

+0

我修改了我的帖子再次检查它,当我用你的代码修改时,分页不工作 – LeoSam 2012-08-14 11:31:03

+0

我更新了代码 – 2012-08-14 11:36:49

0

您的问题很可能是查询不重新调用任何数据。

您正在将新条目填充到循环内的$tweeps数组中,但如果没有数据,它将不会进入该循环。

您没有在其他地方初始化$tweeps变量,所以如果它没有进入循环,$tweeps将不会是一个数组,它将是未定义的。如果你尝试在foreach()中使用它,这会给你一个错误。

您需要添加一行开始填充它之前初始化变量:

$tweeps = array(); 

这地方去的循环,你先开始填充$tweeps以上。

希望有所帮助。

+0

当我添加数组,在我的循环之前,分页不能正常工作,它只是拉第一个10 $ tweeps下一页显示为空! – LeoSam 2012-08-14 11:41:17

+0

我想在代码中还有其他的错误。我没有看那么远。上面的答案试图解决原始问题,这是foreach()中的错误。 – SDC 2012-08-14 12:20:04

相关问题