下一个图像链接循环


Next image link loop

我正试图在循环中获取下一个图像,以便它们返回到图像列表的开头。我可以让图片从列表一直到最后一张图片,然后我的最后一张照片在链接上没有显示PID。

我有

 <div id="photolistholder">
 <?php if(isset($_GET['pid'])){?>
 <?php
    //Now we'll get the list of the specified users photos
    $var =$_GET['pid'];
    $sql = "SELECT * FROM coverphotos WHERE coverphoto_id='$var'";
    $query = mysqli_query($mysqli,$sql)or die(mysqli_error($mysqli));
    while($photo = mysqli_fetch_array($query)){
       $user=rawfeeds_user_core::getuser($photo['coverphoto_userid']);
 ?>
    <p class="frontpage_description"><a href="profile.php?username=<?php echo $user['username']; ?>">
 <?php 
    $id=$_SESSION['id'];
    if($user['id']){
       echo "<img border='"0'" src='"userimages/cropped".$user['id'].".jpg'" onerror='this.src='"img/no_profile_img.jpeg'"' width='"40'" ><br/>".$user['fullname']."'s</a> Album: </p>";
    }else{
       echo "<img border='"0'" src='"userimages/cropped".$id.".jpg'" onerror='this.src='"img/no_profile_img.jpeg'"' width='"40'" ><br/>".$user['fullname']." </a></p>";
    }
    $id=$_SESSION['id'];
    $var = $_GET['pid'] ;
    $photo_sql = "SELECT coverphoto_id FROM coverphotos WHERE (coverphoto_id < ".$var." OR coverphoto_id > ".$var.") AND coverphoto_userid = ".$user['id']." ORDER BY coverphoto_id DESC LIMIT 1";
    $photo_query = mysqli_query($mysqli,$photo_sql)or die(mysqli_error($mysqli));
    $photo_prev=mysqli_fetch_array($photo_query);
    if($photo_prev>1){
        echo"<a href='coverimagephoto.php?pid=".$photo_prev['coverphoto_id']."'>Previous</a> | ";
    }else{
        echo " ";
    }

    $var = $_GET['pid'] ;   
    $photo_sqls = "SELECT coverphoto_id FROM coverphotos WHERE (coverphoto_id > ".$var." OR coverphoto_id < ".$var.") AND coverphoto_userid = ".$user['id']." ORDER BY coverphoto_id ASC LIMIT 1";
    $photo_querys = mysqli_query($mysqli,$photo_sqls)or die(mysqli_error($mysqli));
                    $photo_next=mysqli_fetch_array($photo_querys);
    if($photo_next>1){
       echo "<a href='coverimagephoto.php?pid=".$photo_next['coverphoto_id']."'>Next</a>";  
    }else{
       echo "";
    }
    $user1_id=@$_SESSION['id'];
    $user2_id=$user['id'];
    if($user1_id==@$_SESSION['id']){ 
       echo " | <a href='include/photo_delete.php?pid=".$photo['coverphoto_id']."'>Delete</a>";
    }else{
       echo"";
    }
 ?>
    <center>
 <?php
        //echo "<div class='photo_captionholder'><b>Name</b> : ".$photo['photo_name']." | <b>Caption</b> : ".$photo['photo_caption']." |                
        //<b>Uploaded</b> : ".$photo['photo_datetime']."</div>";
    echo "<img id='"coverimage'" border='"0'" src='coverimages/".$photo['coverphoto']."?".time()."' onerror='this.src='"coverimages/nocover.png'"'>";
    }}
 ?>
        </body>

我试过使用

$var = $_GET['pid'] ;
    $photo_sql = "SELECT coverphoto_id FROM coverphotos WHERE (coverphoto_id > ".$var." OR coverphoto_id < ".$var.") AND coverphoto_userid = ".$user['id']."";
    $photo_query = mysqli_query($mysqli,$photo_sql)or die(mysqli_error($mysqli));
    $photo_next=mysqli_fetch_array($photo_query);
    if($photo_next>1){
        echo"<a href='coverimagephoto.php?pid=".$photo_prev['coverphoto_id']."'>Next</a> | ";
    }else{
            echo " ";
    }

但这种联系只是在两个图像之间跳跃。图像不在1,2,3,4,5中,如果用户删除图像,则可以在图像PID 3或5上启动,则可以是1,2,4,5。

如果您只使用第一个查询,然后将所有结果提取到一个数组中,然后上下处理该数组,那么编码和理解并将查询(往返服务器)从N+1个查询减少到1个查询(其中N=(照片数)会不会简单得多

快速模型:

<div id="photolistholder">
<?php 
   if( isset($_GET['pid']) ) {
       // validate the pid
       $_GET['pid'] = some_validation_please($_GET['pid']);
       $id=$_SESSION['id'];
       $sql = "SELECT * FROM coverphotos WHERE coverphoto_id='$_GET['pid']'";
       $result = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
       $photos = array();
       while($row = mysqli_fetch_array($result)){
          $photos[] = $row;
       }
       foreach( $photos as $idx => $photo ) {
          // add all your image html with the prev and next links
          // using $idx-1 for prev image
          // using $idx+1 for next image
          // and checking if $idx = 0 for first image 
          //   so you can use count($photos)-1 to know you are on last image
          //   so you use photos[0] as the next image to get continuous loop
          // and if $idx == 0 next image is count($photos)-1
       }
 ?>

很抱歉,我没有时间从你发布到浏览器的内容中挑出要点,因为我一定会犯一个愚蠢的错误,并为此受到困扰。

我已经找到了一种更好的方法,可以完美地工作。只需使用UNION

$var = mysqli_escape_string($_GET['pid']) ;
$photo_sql = "(SELECT coverphoto_id FROM coverphotos WHERE  coverphoto_id < ".$var."  AND coverphoto_userid = ".$user['id']." AND album=1 ORDER BY coverphoto_id DESC LIMIT 1)";
$photo_sql.= " UNION (SELECT coverphoto_id FROM coverphotos WHERE  coverphoto_id > ".$var."  AND coverphoto_userid = ".$user['id']." AND album=1 ORDER BY coverphoto_id DESC LIMIT 1)";
$photo_query = mysqli_query($mysqli,$photo_sql)or die(mysqli_error($mysqli));
$photo_prev=mysqli_fetch_array($photo_query);
if($photo_prev>1){
    echo"<a href='coverimagephoto.php?pid=".$photo_prev['coverphoto_id']."'>Previous</a> | ";
}else{
        echo " ";
}

$var = $_GET['pid'] ;   
$photo_sqls = "(SELECT coverphoto_id FROM coverphotos WHERE  coverphoto_id > ".$var." AND coverphoto_userid = ".$user['id']." AND album=1 ORDER BY coverphoto_id ASC LIMIT 1)";
$photo_sqls.= " UNION (SELECT coverphoto_id FROM coverphotos WHERE  coverphoto_id < ".$var."  AND coverphoto_userid = ".$user['id']." AND album=1 ORDER BY coverphoto_id ASC LIMIT 1)";
$photo_querys = mysqli_query($mysqli,$photo_sqls)or die(mysqli_error($mysqli));
                $photo_next=mysqli_fetch_array($photo_querys);
if($photo_next>1){
echo "<a href='coverimagephoto.php?pid=".$photo_next['coverphoto_id']."'>Next</a>"; 
}else{
        echo " ";
}