繁体   English   中英

在id为0的MySQL数据库中选择记录

[英]Selecting records in a MySQL database where id != 0

我的网站出现问题。

我有一张带ID的照片表。 当用户将文件上传到服务器时,将填充此表,这很好。 我也有一个论坛,可以在其中发布图像,并将图像发送到同一张照片桌上。 主页上的某个部分显示了此表中的一张照片,并在其下面显示了分页链接。

现在,当有人在论坛上发帖并且他们不包含图片时,它就会损坏。 该线程不会显示,因为它正在寻找不存在的photo_id 0。 所以我上传了一个虚拟图像,将id值更改为零,然后尝试

$sql = "SELECT * FROM photographs HAVING id != 0 ";
$sql .= "LIMIT {$per_page} ";
$sql .= "OFFSET {$pagination->offset()}";

哪个可行,图像不再显示,但分页仍然认为那里有记录。 它显示了该图像的链接,当用户单击该图像时,它断开并删除了许多其他链接,结果一团糟。

是否可以从数据库中选择所有内容而不是0记录,或者可以从分页链接中删除该链接? 这是代码:

//1. the current page number ($current_page)
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;

//2. records per page ($per_page)
$per_page = 1;

//3. total record count ($total_count)
$total_count = Photograph::count_all();


//Find all photos
//use Pagination instead
//$photos= Photograph::find_all();

$pagination = new Pagination($page, $per_page, $total_count);

//Instead of finding all records, just find the records
//for this page
$sql = "SELECT * FROM photographs HAVING id != 0 ";
$sql .= "LIMIT {$per_page} ";
$sql .= "OFFSET {$pagination->offset()}";
$photos = Photograph::find_by_sql($sql);

//Need to add ?page=$page to all links we want to
//maintain the current page(or store $page in $session)
?>

    <div id="right">
    <?php
    foreach($photos as $photo): 
    ?>
<h3 style="margin: 0;"></h3>
<div style="padding: 5px;">
    <a href="photo.php?id=<?php echo $photo->id; ?>"><img src="<?php echo $photo->image_path(); ?>" width="200" alt="Photo Share Photo" /></a>
   <p align="center"><?php echo $photo->caption; ?></p>
   </div>
   <?php }
endforeach; 
?>

   <div id="pagination" style="clear: both;" align="center">
   <?php
if($pagination->total_pages() > 1) {

    if($pagination->has_previous_page()) {
        echo "<a href=\"index.php?page=";
        echo $pagination->previous_page();
        echo "\">&laquo; Previous</a> ";
    }

    for($i=1; $i <= $pagination->total_pages(); $i++) {
        if($i == $page) {
            echo " <span class=\"selected\">{$i}</span> ";
        } else {
        echo " <a href=\"index.php?page={$i}\">{$i}</a> ";
    }
    }

    if($pagination->has_next_page()) {
        echo " <a href=\"index.php?page=";
        echo $pagination->next_page();
        echo "\">Next &raquo;</a> ";
    }
}
?><br />
<div align="center">
<a href="photo_upload.php">Upload a new photograph</a>
</div>

[编辑]

分页代码。

class Pagination {

    public $current_page;
    public $per_page;
    public $total_count;

    public function __construct($page=1, $per_page=20, $total_count=0){
        $this->current_page = (int)$page;
        $this->per_page = (int)$per_page;
        $this->total_count = (int)$total_count;
    }

    public function offset() {
        //Assuming 20 items per page:
        //page 1 has an offset of 0                           (1-1) * 20
        // page 2 has an offset of 20       (2-1) * 20
        //in other words, page 2 starts with item 21
        return ($this->current_page - 1) * $this->per_page;
    }

    public function total_pages() {
        return ceil($this->total_count/$this->per_page);
    }

    public function previous_page() {
        return $this->current_page - 1;
    }

    public function next_page() {
        return $this->current_page +1;
    }

    public function has_previous_page() {
        return $this->previous_page() >= 1 ? true : false;
    }

    public function has_next_page() {
        return $this->next_page() <= $this->total_pages() ? true : false;
    }
}

如果可行,我将调查total_pages并与您联系。 我想我可以在count_all方法的末尾添加WHERE id!= 0。 除了照片共享外,我认为没有其他东西可以使用它。 我将不得不研究代码。

感谢您的帮助。

直流电

我只是添加:

public static function count_all() {
    global $database;
    $sql = "SELECT COUNT(*) FROM ".self::$table_name." WHERE `id` **!= 0 AND `show` != 0";**
    $result_set = $database->query($sql);
    $row = $database->fetch_array($result_set);
    return array_shift($row);
}

我将此添加到照片对象。 现在,用户可以选择是否希望其图像显示在“照片共享”部分中,如果他们不上传带有其帖子的图像,则会自动为其分配ID0。如果不清楚,则有人需要帮助它,让我知道。

正如G-Nugget所述。 NULL更适合于此。 您的查询也看起来很奇怪。 通常的语法是:

SELECT * FROM photographs WHERE id != 0

具有用于对GROUP BY查询进行过滤。

编辑:它看起来像您在这里从分页使用$ total_count:

$total_count = Photograph::count_all();

<snip>

for($i=1; $i <= $pagination->total_pages(); $i++) {
        if($i == $page) {
            echo " <span class=\"selected\">{$i}</span> ";
        } else {
        echo " <a href=\"index.php?page={$i}\">{$i}</a> ";
}

由于$ total_count包含0记录,因此将显示一个链接,显示的页面数超过了现有页面数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM