【问题标题】:Change PHP to get image urls from mysql database instead of a .txt file更改 PHP 以从 mysql 数据库而不是 .txt 文件获取图像 url
【发布时间】:2011-10-25 00:37:03
【问题描述】:

我对 mysql 非常陌生(今天才开始) - 我正在从使用 .txt 文件切换。目前,我正在使用一个 PHP 脚本,该脚本从 .txt 文件中获取图像链接并将它们加载到幻灯片中,根据您在分页中所处的页面。

我已经设法让分页工作,它显示来自数据库表的内容。我只是不确定如何添加图像以便它们随着分页而变化?我如何将多个图像与它们一起使用的内容链接起来(例如,动态制作的第 1 页从表格行中获取数据,并在幻灯片中加载了 5 张图像)? :S

使用 .txt 文件的当前脚本:

<?php
    echo "<div id='portfolioslider'><div class='slider'>";
    $photos=file("work.txt");
    foreach($photos as $image){
        $item=explode("|",$image);
        if($item[0]==$fields[0]){
            $photo=trim($item[1]);
            echo"<div><img src='images/work/$photo' alt='' /></div>\n";
        }
    }
    echo "</div></div>"
?>

【问题讨论】:

  • 你使用什么库让 PHP 连接到 mysql? mysql_* 函数,mysqli,PDO,还有什么?
  • 嗯,我正在使用 phpmyadmin? ^^;
  • PHPMyAdmin 与此无关。

标签: php mysql pagination text-files


【解决方案1】:

为此,我将使用三个 SQL 表(由于规范化)我们这样做是为了在 MySQL 中没有数据重复,photos 表与pages 具有多:1 关系(即有多张照片与一个页面相关联,虽然我们不想在 pages 表中多次复制照片 ID。我们也不想在照片表中添加多个页面 ID。所以我们使用第三个表 location 来绑定两个一起规范化数据库。

table 1 (photos): 
    columns: photo_id(p-key), filename
    (maybe further fields such as description, alt, etc.)

table 2 (pages): 
    columns: page_id(p-key), page_info

table 3 (location): 
    columns: unique_key(p-key), page_id, photo_id

注意:表 3 是唯一可以包含重复数据的表,即

unique_key        page_id        photo_id
1                 1              1
2                 1              2
3                 1              3
4                 2              6
5                 2              7
6                 2              8

通过这种方式,您可以将实际包含数据的两个表中的数据保持完全没有任何重复,从而允许您在每一行中添加所需的额外字段。

不要忘记规范化规则适用于每个字段。如果您在photos 中输入一个新列,并意识到新列可以应用于多张照片,那么是时候开始查看该列的新表和规范化表以将重复降至最低。

这条规则很少有例外,遵循它将使在 PHP 中设计 SQL 数据库应用程序变得更加简单。

我们现在可以使用 PHP 中的一系列 SQL 查询来获取每个页面所需的确切信息。我们知道我们所在的页面,因此我们将确保 page_id 与我们所在的页面匹配,并从 location 获取所有关联的 photo_id

$connect = mysql_connect(HOST,USER,PASS) or die(mysql_error());

$query = mysql_query(
         "SELECT location.photo_id WHERE location.page_id=" . $page, $connect) or die(mysql_error());

while ($row = mysql_fetch_array($query, MYSQL_ASSOC) {
    $images[] = $row['photo_id'];
}

您现在可以使用 foreach 循环遍历 $images 数组并获取照片网址

foreach ($images as $image) {

    $query = mysql_query(
             "SELECT filename FROM `photos` WHERE photo_id =" . $image, $connect) or die(mysql_error());

    $image_loc[] = mysql_fetch_row($query); // only one row should exist now!

}

您知道有一个数字数组 $image_loc,其中包含与您所在页面关联的所有图像链接。

你去吧,关于数据库规范化和如何设置你的 SQL 表的快速速成课程! :)

编码愉快! (这里的代码都是手动写的,如有错误请见谅!)

【讨论】:

  • 哇哦!非常感谢您花时间向我解释这一切!我想我有点明白了!! :D 今天晚些时候我会试着把它放在一起! :) 只是另一个 n00b 问题,复制这两个表然后合并它们以创建第三个表的最简单方法是什么,这样我就不必再次输入所有数据? ^^;
  • 不用担心 Jess,当您使用 PHPMyAdmin 创建/管理表时,您可以使用它复制它们,然后随意删除/添加列。
  • 嗯我尝试使用该脚本,但我得到了一个 Parse 错误:语法错误,第 10 行上的意外 - 在 while ($row. 的开头。有什么想法吗?^^;
  • 我明白了,while 语句后缺少一个 ')'。 while ($row = mysql_fetch_array($query, MYSQL_ASSOC))
【解决方案2】:

听着,您需要打印所有图像,并将除前 5 个图像之外的所有图像都隐藏起来。

然后打印分页链接/数字(1,2,3...) 并且每次点击都将使用 jquery 更改为显示状态

【讨论】:

  • 听着,你需要弄清楚如何做出一个好的答案。目前,这是评论标准。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2021-09-01
  • 1970-01-01
相关资源
最近更新 更多