Re: [請益] 相簿封面
※ 引述《heysimon (嘿~賽門)》之銘言:
: 請問各位前輩
: 一般要在相簿中設定封面照片
: 若要另外寫一個php檔來呼叫作設定的動作
: 通常的邏輯會是如何?
: ---------------------------------------
: 我在mysql中,有兩個資料表
: 一個是放相簿,一個是放照片
: 但我想在照片的資料表中多設一個cover的項目
: 當我點選某張照片其cover便會等於1(這邊也不太會寫 ><)
: 然後要如何把所要的封面照片放回首頁也卡住了
: 謝謝!!
以下我所提的方法有點不同, 不過應該也有人採用類似的方法:
基本上資料表只要兩個:
[album]:
id,name,directory,cover_photo_id,note,...
id 代表主鍵, name 代表相簿名稱, directory代表目錄,
cover_photo_id 代表封面圖的id, 預設值設為0, 代表沒有封面圖;
若非0, 則代表有封面圖.
note 代表註解.
[photo]:
id,name,filename,album_id,note,...
id 代表主鍵, name 代表名稱(不是檔名), album_id 代表所屬album的id,
filename代表檔名, note 代表註解.
要設相簿的封面時, 就是指定album 的 cover_photo_id 的值為所選定
的 photo 的 id 即可; 若要消除封面圖, 只要把 album 的 cover_photo_id
設回為0即可.
此外, 登錄日期, 相簿所屬用戶等暫不列入考慮.
至於如何用php來設?
就寫一支程式專門來負責亦可. 假設是: set_album_cover.php
用戶在網頁上, 在id為10的album下, 選定id為3150的圖片要設為封面圖:
http;//myweb/album/set_album_cover.php?album_id=10&photo_id=3150
(以上的超連結無效, 僅用來示意)
接著是php程式內容:
<?php
//先進行資料庫連線, 取得連線物件: $link
...
//下sql語法:
$sql=sprintf(
"update album set cover_photo_id=%d where album_id=%d",
mysql_real_escape_string($_GET['photo_id']),
mysql_real_escape_string($_GET['album_id'])
);
mysql_query($sql,$link);
//再進行一些收尾處理..
?>
補充:
從上述的資料庫撈資料的sql語法:
//指定alubm的id, 撈出album的資料: photo.* 是cover_photo的詳細資料
$sql="
select album.*,photo.*
from album
left join photo on photo.id=album.cover_photo_id
where id=$album_id";
//指定album的id, 撈出其所有photo:
$sql="
select *
from photo
where album_id=$album_id";
接著, 就是依網頁設計上的需要塞資料了.
//最後介紹一個好用的資料查詢物件: 撈資料比原生的mysql函式更方便,
//可以同時撈好幾個table, 而不用特意去處理資料欄位同名相衝的問題.
//取自php官網之mysql_fetch_array的使用手冊範例
class mysql_resultset
{
var $results, $map;
function mysql_resultset($results)
{
$this->results = $results;
$this->map = array();
$index = 0;
while ($column = mysql_fetch_field($results))
{
$this->map[$index++] = array($column->table, $column->name);
}
}
function fetch()
{
if ($row = mysql_fetch_row($this->results))
{
$drow = array();
foreach ($row as $index => $field)
{
list($table, $column) = $this->map[$index];
$drow[$table][$column] = $row[$index];
}
return $drow;
}
else
return false;
}
}
An example:
<?
$sql =
"select orders.*, clients.*, productos.* ".
"from orders, clients, products ".
"where join conditions";
$resultset = new mysql_resultset(mysql_query($sql));
while ($drow = $resultset->fetch())
{
echo 'No.: '.$drow['orders']['number'].'<br>';
echo 'Client: '.$drow['clients']['name'].'<br>';
echo 'Product: '.$drow['products']['name'].'<br>';
}
?>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.183.16
推
08/19 11:55, , 1F
08/19 11:55, 1F
推
08/19 11:56, , 2F
08/19 11:56, 2F
推
08/19 21:43, , 3F
08/19 21:43, 3F
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章