ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์CMS & Free ScriptPHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
หน้า: [1] 2  ทั้งหมด   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ  (อ่าน 4914 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
minmono
คนรักเสียว
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 102



ดูรายละเอียด เว็บไซต์
« เมื่อ: 10 กุมภาพันธ์ 2018, 14:45:54 »

สวัสดีครับ
ได้สคริป php ใว้แสดงรูปที่เก็บอยู่ในเว็บมาครับ เวลาใช้งานมันจะโหลดภาพทั้งหมดที่มีออกมาแสดงเลยนะ = ช้า+เปลืองแบนด์วิชท์มาก
จะต้องแก้ไขเพื่มเติมตรงไหนให้แบ่งออกมาเป็นหน้าล่ะประมาณ6-8ภาพครับ รวมถึงให้แสดงภาพใหม่สุดก่อนไล่ไปหาเก่าด้วย
ขอความช่วยเหลือด้วยครับ
 wanwan017 wanwan023
โค๊ด:
<?php
$files 
glob("images/*.*");
for (
$i=0$i<count($files); $i++)
{
$image $files[$i];
$image2 = [$i];
$supported_file = array(
'gif',
'jpg',
'jpeg',
'png'
);

$ext strtolower(pathinfo($imagePATHINFO_EXTENSION));
if (in_array($ext$supported_file)) {

$FileName substr(basename($image), , (strrpos(basename($image), ".")));
    echo 
'<a href="view.php?id='$FileName .'" ><img src="' $image '" alt="Random image" style="width:200px" /></a>' "&nbsp;&nbsp;&nbsp;";
} else {
continue;
}
}
?>
บันทึกการเข้า

[ ขอคำแนะนำด้วยครับ ]
ThaNaButS
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 67
ออนไลน์ ออนไลน์

กระทู้: 1,197



ดูรายละเอียด
« ตอบ #1 เมื่อ: 10 กุมภาพันธ์ 2018, 17:24:16 »

ถ้าเป็นผมผมจะทำไฟล์  php เพิ่มข้อมูลรูปภาพเวลามีรูปภาพใหม่ลงฐานข้อมูล

แล้วค่อยเรียกจากฐานข้อมูลไปแสดงจะแบ่งหน้าหรือจะเรียงลำดับอะไรก้ทำตอนนี้

ผมว่าที่ช้าน่าจะเพราะมันหารูปทุกครั้งที่โหลด glob
บันทึกการเข้า
minmono
คนรักเสียว
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 102



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 10 กุมภาพันธ์ 2018, 18:14:46 »

หน้าต่างเก็บรูปผมเอามาจากที่นี่ครับ https://github.com/lfiore/upld/ ใช้ php+ฐานข้อมูล
แต่เขาไม่มีหน้าสรุปรวมให้ admin เข้าไปดู ผมเลยไปหาสคริปด้านบนมานะครับ
ถ้าอย่างนั้นทำอย่างไรให้ดึงรูปอ้างอิงดาต้าเบส,แบ่งหน้า,ใหม่-เก่า จากสคริปชุดนี้ได้ครับ wanwan017
ปล.หรือมีตัวอื่นแนะนำครับ (user upload+bb code / admin View+DELETE )
บันทึกการเข้า

[ ขอคำแนะนำด้วยครับ ]
ThaNaButS
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 67
ออนไลน์ ออนไลน์

กระทู้: 1,197



ดูรายละเอียด
« ตอบ #3 เมื่อ: 10 กุมภาพันธ์ 2018, 19:21:18 »

เท่าที่ผมดูคร่าวๆ สรุปได้ดังนี้ สคิปที่คุณเอามาใช้เข้าเก็บลงฐานข้อมูลอยู่แล้ว

ลองเข้าไปดูในฐานข้อมูล ชื่อตาราง images
ฟิวส์ id คือชื่อรูป, ext คือนามสกุลรูป, time คือเวลาที่อัพโหลด

ก็แค่สร้าง php ดึงจากฐานข้อมูลตาราง images เรียงลำดับโดย order by `time` desc
บันทึกการเข้า
hangmann2
สมุนแก๊งเสียว
*

พลังน้ำใจ: 11
ออฟไลน์ ออฟไลน์

กระทู้: 655



ดูรายละเอียด
« ตอบ #4 เมื่อ: 10 กุมภาพันธ์ 2018, 19:27:40 »

ลองดูครับ
บันทึกการเข้า

minmono
คนรักเสียว
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 102



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 10 กุมภาพันธ์ 2018, 20:31:29 »

666+ปัญหาของคนไม่เป็นเลยนะนี้ wanwan004
สคริปเขามีระบบสมาชิกให้สามารถดูรูปที่ตัวเองอัพได้ก็จริง แต่ก็ดูได้แค่ที่ตัวเองอัพเท่านั้น(แม้แต่ admin) *จะลองหาทางแก้ให้ admin ดูได้ทุกรูปดูครับ
ส่วนจะให้แสดงผล perpage / order by `time` desc นี้จบเลยผม
 wanwan009
บันทึกการเข้า

[ ขอคำแนะนำด้วยครับ ]
romance69
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 169
ออฟไลน์ ออฟไลน์

กระทู้: 2,158



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 10 กุมภาพันธ์ 2018, 21:16:31 »

ที่ admin ดูไม่ได้ เป็นเพราะ table = images > col = user มันไม่ตรงกันละมั่งครับ
หรือสคริปมันต้องเขียนหน้า page account เพิ่มมาด้วยหรือเปล่าจึงจะดูได้ว่า user ไหนอัพรูปอะไรไปบ้าง
บันทึกการเข้า
minmono
คนรักเสียว
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 102



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 10 กุมภาพันธ์ 2018, 22:40:29 »

ในหน้า account แก้ทำให้เรียงรูปใหม่/เก่าได้แล้วขอบคุณครับ

เรียงลำดับโดย order by `time` desc
ทำให้เรียงรูปใหม่/เก่าได้แล้วขอบคุณครับ
จากนั้นผมลองแก้ WHERE `user` = ? AND `removed` = "0" ให้เหลือเพียง WHERE `removed` = "0" (ตอนแรกลบออกหมด เทสลบรูปฉไหนยังแสดงชื่ออยู่ Tongue) ทำให้ดูได้ทุกรูปจริงแต่
- รายการรูปในหน้านี้ถ้าเป็นสมาชิกอัพรูปจะย่อก็บใว้ที่ thumb ถ้าบุคคลทั่วไปอัพ = ไม่ย่อ = ไม่มีรูปมาแสดง = แสดงเป็นตัวหนังสือเฉยๆ Lips Sealed อย่างนี้ต้องไปทำให้สร้างรูปย่อทุกกรณีเลยชิมินี่
- เหลือทำอย่างใรให้แสดง perpage ครับ
บันทึกการเข้า

[ ขอคำแนะนำด้วยครับ ]
minmono
คนรักเสียว
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 102



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 11 กุมภาพันธ์ 2018, 14:59:25 »

รายงานผล
- ทำให้ดูได้ทุกรูปได้โดยไม่ต้องใช้สคริป glob = OK
- ทำให้เรียงภาพใหม่มาก่อน  order by `time` desc = OK
- ให้ทำรูปย่อทุกรูป !isset($_SESSION['user']) = OK
คงเหลือ ทำอย่างไรให้แบ่งหน้าครับ  wanwan009
บันทึกการเข้า

[ ขอคำแนะนำด้วยครับ ]
ThaNaButS
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 67
ออนไลน์ ออนไลน์

กระทู้: 1,197



ดูรายละเอียด
« ตอบ #9 เมื่อ: 11 กุมภาพันธ์ 2018, 15:09:02 »

รายงานผล
- ทำให้ดูได้ทุกรูปได้โดยไม่ต้องใช้สคริป glob = OK
- ทำให้เรียงภาพใหม่มาก่อน  order by `time` desc = OK
- ให้ทำรูปย่อทุกรูป !isset($_SESSION['user']) = OK
คงเหลือ ทำอย่างไรให้แบ่งหน้าครับ  wanwan009


เอาฟังก์ชั่นจากที่นี้มาใช้ http://www.thaicreate.com/comm...nity/php-mysql-pagination.html

ข้างหลัง order by `time` desc
เอานี้ใส่เข้าไป  limit $Page_Start , $Per_Page
« แก้ไขครั้งสุดท้าย: 11 กุมภาพันธ์ 2018, 15:10:07 โดย ThaNaButS » บันทึกการเข้า
minmono
คนรักเสียว
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 102



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 11 กุมภาพันธ์ 2018, 16:40:49 »

upld เขาแยกสคริปการทำงานออกเป็น 2ส่วนนะครับ
1.account.php ลิ้งดาต้าเบส+คัดกรอง (order by `time` desc อยู่ในนี้)
โค๊ด:
<?php

require('config.php');
require(
'common.php');

if (!isset(
$_SESSION['user']))
{
exit_message('You are no authorised to access this page. Please log in.');
}

$user $_SESSION['user'];

require(
'db.php');
$images mysqli_prepare($db'SELECT `id`, `ext`, `time` FROM `images` WHERE `removed` = "0" ORDER BY `time` desc'); //ORDER BY `time` ASC'

mysqli_stmt_bind_param($images'i'$user);
mysqli_stmt_execute($images);
++
$db_queries;
mysqli_stmt_store_result($images);

if (
mysqli_stmt_num_rows($images) === 0)
{
exit_message('You haven\'t uploaded any images yet!');
}

mysqli_stmt_bind_result($images$id$ext$time);

require(
'inc/header.php');
require(
'inc/account.php');
require(
'inc/footer.php');


2.inc/account.php แสดงรูปทั้งหมดจากที่ข้อ1.กรอง (แสดงรูปยาวเป็นหางว่าว) wanwan022
โค๊ด:
<?php
if (!defined('IN_SCRIPT'))
{
header('location: ../index.php');
exit;
}

?>


<div class="box">

<p class="title">Your account</p>
<p>Welcome to your account. You can view all of your uploads here, see the upload time and delete them</p>
<div id="user-images"><!--

<?php

while (mysqli_stmt_fetch($images))
{

?>

--><div class="user-image-box">
<a href="<?php echo VIEW_PATH $id?>"><img class="user-image" src="thumbs/<?php echo $id '.jpg'?>" alt="<?php echo $id?>" /></a>
<ul class="image-actions">
<li>image ID : <?php echo $id?></li>
<li>uploaded <?php echo $time?></li>
<li><a class="delete" href="delete.php?id=<?php echo $id?>">DELETE image</a></li>
</ul>
</div><!--
<?php

}

?>

--></div>
<?php

mysqli_stmt_close
($images);
mysqli_close($db);

?>

</div>
แถมยังใช้ผสม PHP + HTML นะครับ wanwan031
บันทึกการเข้า

[ ขอคำแนะนำด้วยครับ ]
ThaNaButS
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 67
ออนไลน์ ออนไลน์

กระทู้: 1,197



ดูรายละเอียด
« ตอบ #11 เมื่อ: 11 กุมภาพันธ์ 2018, 20:08:40 »

แยกสองส่วนก็ทำได้ครับ include มันก็แค่ทำให้มันจัดการได้ง่ายขึ้นแค่นั้นเอง ใจเย็นลองค่อยๆดูครับ

1. สร้างไฟล์ใหม่ paginator.php ข้างในก็อปโค๊ดใน class Paginator มาใส่

2. (account.php) เรียกใช้งาน class Paginator
โค๊ด:
require('common.php');
require('paginator.php'); // หรือจะก็อปโค๊ดในคลาสมาใส่แทนตรงนี้ก็ได้

3. (account.php) จัดการ limit ซะ แทนที่ $images = mysqli_prepare($db, 'SELECT `id`, `ext`, `time` FROM `images` WHERE `removed` = "0" ORDER BY `time` desc'); //ORDER BY `time` ASC'
โค๊ด:
$strSQL = "SELECT `id`, `ext`, `time` FROM `images` WHERE `removed` = "0"";
$objQuery = mysql_query($strSQL);
$Num_Rows = mysql_num_rows($objQuery);

$Per_Page = 10;   //จำนวนต่อหน้า

$Page = $_GET["Page"];
if(!$_GET["Page"])
{
$Page=1;
}

$Prev_Page = $Page-1;
$Next_Page = $Page+1;

$Page_Start = (($Per_Page*$Page)-$Per_Page);
if($Num_Rows<=$Per_Page)
{
$Num_Pages =1;
}
else if(($Num_Rows % $Per_Page)==0)
{
$Num_Pages =($Num_Rows/$Per_Page) ;
}
else
{
$Num_Pages =($Num_Rows/$Per_Page)+1;
$Num_Pages = (int)$Num_Pages;
}

$strSQL .=" ORDER BY `time` desc LIMIT $Page_Start , $Per_Page";

$images = mysqli_prepare($db, $strSQL);

4. (inc/account.php) ส่วนแสดงผล html ใส่โค๊ดที่ต้องการให้แสดงลิงก์หน้า
โค๊ด:
<br>
Total <?php echo $Num_Rows;?> Record

<?php

$pages 
= new Paginator;
$pages->items_total $Num_Rows;
$pages->mid_range 10;
$pages->current_page $Page;
$pages->default_ipp $Per_Page;
$pages->url_next $_SERVER["PHP_SELF"]."?QueryString=value&Page=";

$pages->paginate();

echo 
$pages->display_pages()
?>


ปล. ผมไม่แน่ใจว่าจะใช้ได้ไหมเพราะเป็นคำสั่ง  sql คนละแบบแต่ก็ประมาณนี้ ถ้าไม่ได้ก็ลองเปลี่ยนคำสั่ง  sql ใหม่ ผมไม่ได้ลอง


ผมว่าหาสคิปใหม่ที่มีระบบครบน่าจะเหมาะกว่า
« แก้ไขครั้งสุดท้าย: 11 กุมภาพันธ์ 2018, 20:09:14 โดย ThaNaButS » บันทึกการเข้า
athikom
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 52



ดูรายละเอียด
« ตอบ #12 เมื่อ: 11 กุมภาพันธ์ 2018, 21:05:02 »

 wanwan020
บันทึกการเข้า
minmono
คนรักเสียว
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 102



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 11 กุมภาพันธ์ 2018, 21:54:40 »

 Shocked
แก้แล้วเว็บนี้สายขาวจริง(ขาวทั้งหน้าจอเลย)

wanwan020
ขอบคุณกำลังใจครับ
บันทึกการเข้า

[ ขอคำแนะนำด้วยครับ ]
infamous
ก๊วนเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 295



ดูรายละเอียด
« ตอบ #14 เมื่อ: 12 กุมภาพันธ์ 2018, 00:00:09 »

PHP pagination script ร่วมกับ mysqli นะครับ

credit: https://www.itoffside.com/php-...example-using-mysqli-database/

สำหรับสายโหดขึ้นมาหน่อย มีความรู้เรื่อง oop อยากจะเขียน class เองบ้างก็มีให้ลองครับ
https://code.tutsplus.com/tuto...ginate-data-with-php--net-2928
บันทึกการเข้า
ThaNaButS
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 67
ออนไลน์ ออนไลน์

กระทู้: 1,197



ดูรายละเอียด
« ตอบ #15 เมื่อ: 12 กุมภาพันธ์ 2018, 00:38:35 »

Shocked
แก้แล้วเว็บนี้สายขาวจริง(ขาวทั้งหน้าจอเลย)

wanwan020
ขอบคุณกำลังใจครับ


งั้นก็ขอโทษด้วยครับ ที่ทำให้เสียเวลา ผมคงไม่เก่ง
บันทึกการเข้า
minmono
คนรักเสียว
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 102



ดูรายละเอียด เว็บไซต์
« ตอบ #16 เมื่อ: 12 กุมภาพันธ์ 2018, 10:35:42 »


งั้นก็ขอโทษด้วยครับ ที่ทำให้เสียเวลา ผมคงไม่เก่ง

ชิวๆสายฟรีครับ Roll Eyes  เสียเวลาไปกับการเรียนรู้+ได้ประสบการณ์ ดีกว่าปล่อยผ่านไปเฉยๆครับ wanwan019
บันทึกการเข้า

[ ขอคำแนะนำด้วยครับ ]
thanakorn69
ก๊วนเสียว
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 428



ดูรายละเอียด
« ตอบ #17 เมื่อ: 12 กุมภาพันธ์ 2018, 12:38:23 »

ลองดูครับ
บันทึกการเข้า

minmono
คนรักเสียว
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 102



ดูรายละเอียด เว็บไซต์
« ตอบ #18 เมื่อ: 12 กุมภาพันธ์ 2018, 19:17:14 »

ไปเจอเขาใช้คำสั่ง LIMIT 1 เพื่อแสดงข้อมูลล่าสุด / ลองเอามาใส่ของเราให้เป็น 10 รูปล่าสุดดู (order by `time` desc LIMIT 10) ใช้ได้สมบูรณ์ซะงั้น wanwan002
รายงานผล
- ทำให้ดูได้ทุกรูปได้โดยไม่ต้องใช้สคริป glob = OK
- ทำให้เรียงภาพใหม่มาก่อน  order by `time` desc = OK
- ให้ทำรูปย่อทุกรูป !isset($_SESSION['user']) = OK
คงเหลือ ทำอย่างไรให้แบ่งหน้าครับ  wanwan009
- แสดงเพียง 10 รูปล่าสุดเท่านั้น = OK
+ คิดต่อไปอีกว่าจะต้องทำอย่างไรหรือใช้คำสั่งว่าอะไรครับให้แสดงรูปลำดับที่ 11-20 ได้นะครับ  wanwan016
ลองใช้เป็น (order by `time` desc  BETWEEN 11 and 20 ) แล้วไม่ได้นะครับ wanwan044
บันทึกการเข้า

[ ขอคำแนะนำด้วยครับ ]
romance69
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 169
ออฟไลน์ ออฟไลน์

กระทู้: 2,158



ดูรายละเอียด เว็บไซต์
« ตอบ #19 เมื่อ: 13 กุมภาพันธ์ 2018, 00:36:06 »

ไปเจอเขาใช้คำสั่ง LIMIT 1 เพื่อแสดงข้อมูลล่าสุด / ลองเอามาใส่ของเราให้เป็น 10 รูปล่าสุดดู (order by `time` desc LIMIT 10) ใช้ได้สมบูรณ์ซะงั้น wanwan002
รายงานผล
- ทำให้ดูได้ทุกรูปได้โดยไม่ต้องใช้สคริป glob = OK
- ทำให้เรียงภาพใหม่มาก่อน  order by `time` desc = OK
- ให้ทำรูปย่อทุกรูป !isset($_SESSION['user']) = OK
คงเหลือ ทำอย่างไรให้แบ่งหน้าครับ  wanwan009
- แสดงเพียง 10 รูปล่าสุดเท่านั้น = OK
+ คิดต่อไปอีกว่าจะต้องทำอย่างไรหรือใช้คำสั่งว่าอะไรครับให้แสดงรูปลำดับที่ 11-20 ได้นะครับ  wanwan016
ลองใช้เป็น (order by `time` desc  BETWEEN 11 and 20 ) แล้วไม่ได้นะครับ wanwan044
$page = isset($_GET['page'])? (int) $_GET['page'] : 0;
(order by `time` desc  limit $page, 10)

หรือแบบดิบๆ
(order by `time` desc  limit 11, 10)

อธิบาย
11 คือ เริ่มตั้งแต่รายการ ที่ 11
10 คือ จำนวนที่ต้องการแสดงรายการ ยกตัวอย่างแสดง 10 รายการ
« แก้ไขครั้งสุดท้าย: 13 กุมภาพันธ์ 2018, 00:36:51 โดย romance69 » บันทึกการเข้า
หน้า: [1] 2  ทั้งหมด   ขึ้นบน
พิมพ์