ThaiSEOBoard.com

พัฒนาเว็บไซต์ => CMS & Free Script => ข้อความที่เริ่มโดย: minmono ที่ 10 กุมภาพันธ์ 2018, 14:45:54



หัวข้อ: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: minmono ที่ 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;
}
}
?>


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: ThaNaButS ที่ 10 กุมภาพันธ์ 2018, 17:24:16
ถ้าเป็นผมผมจะทำไฟล์  php เพิ่มข้อมูลรูปภาพเวลามีรูปภาพใหม่ลงฐานข้อมูล

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

ผมว่าที่ช้าน่าจะเพราะมันหารูปทุกครั้งที่โหลด glob


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


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: ThaNaButS ที่ 10 กุมภาพันธ์ 2018, 19:21:18
เท่าที่ผมดูคร่าวๆ สรุปได้ดังนี้ สคิปที่คุณเอามาใช้เข้าเก็บลงฐานข้อมูลอยู่แล้ว

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

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


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: hangmann2 ที่ 10 กุมภาพันธ์ 2018, 19:27:40
ลองดูครับ


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: minmono ที่ 10 กุมภาพันธ์ 2018, 20:31:29
666+ปัญหาของคนไม่เป็นเลยนะนี้ :wanwan004:
สคริปเขามีระบบสมาชิกให้สามารถดูรูปที่ตัวเองอัพได้ก็จริง แต่ก็ดูได้แค่ที่ตัวเองอัพเท่านั้น(แม้แต่ admin) *จะลองหาทางแก้ให้ admin ดูได้ทุกรูปดูครับ
ส่วนจะให้แสดงผล perpage / order by `time` desc นี้จบเลยผม
 :wanwan009:


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: romance69 ที่ 10 กุมภาพันธ์ 2018, 21:16:31
ที่ admin ดูไม่ได้ เป็นเพราะ table = images > col = user มันไม่ตรงกันละมั่งครับ
หรือสคริปมันต้องเขียนหน้า page account เพิ่มมาด้วยหรือเปล่าจึงจะดูได้ว่า user ไหนอัพรูปอะไรไปบ้าง


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: minmono ที่ 10 กุมภาพันธ์ 2018, 22:40:29
ในหน้า account แก้ทำให้เรียงรูปใหม่/เก่าได้แล้วขอบคุณครับ

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


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: minmono ที่ 11 กุมภาพันธ์ 2018, 14:59:25
รายงานผล
- ทำให้ดูได้ทุกรูปได้โดยไม่ต้องใช้สคริป glob = OK
- ทำให้เรียงภาพใหม่มาก่อน  order by `time` desc = OK
- ให้ทำรูปย่อทุกรูป !isset($_SESSION['user']) = OK
คงเหลือ ทำอย่างไรให้แบ่งหน้าครับ  :wanwan009:


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภา&
เริ่มหัวข้อโดย: ThaNaButS ที่ 11 กุมภาพันธ์ 2018, 15:09:02
รายงานผล
- ทำให้ดูได้ทุกรูปได้โดยไม่ต้องใช้สคริป glob = OK
- ทำให้เรียงภาพใหม่มาก่อน  order by `time` desc = OK
- ให้ทำรูปย่อทุกรูป !isset($_SESSION['user']) = OK
คงเหลือ ทำอย่างไรให้แบ่งหน้าครับ  :wanwan009:


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

ข้างหลัง order by `time` desc
เอานี้ใส่เข้าไป  limit $Page_Start , $Per_Page


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: minmono ที่ 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:


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภา&
เริ่มหัวข้อโดย: ThaNaButS ที่ 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 ใหม่ ผมไม่ได้ลอง


ผมว่าหาสคิปใหม่ที่มีระบบครบน่าจะเหมาะกว่า


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: athikom ที่ 11 กุมภาพันธ์ 2018, 21:05:02
 :wanwan020:


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: minmono ที่ 11 กุมภาพันธ์ 2018, 21:54:40
 :o
แก้แล้วเว็บนี้สายขาวจริง(ขาวทั้งหน้าจอเลย)

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


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: infamous ที่ 12 กุมภาพันธ์ 2018, 00:00:09
PHP pagination script ร่วมกับ mysqli นะครับ

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

สำหรับสายโหดขึ้นมาหน่อย มีความรู้เรื่อง oop อยากจะเขียน class เองบ้างก็มีให้ลองครับ
https://code.tutsplus.com/tutorials/how-to-paginate-data-with-php--net-2928


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: ThaNaButS ที่ 12 กุมภาพันธ์ 2018, 00:38:35
:o
แก้แล้วเว็บนี้สายขาวจริง(ขาวทั้งหน้าจอเลย)

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


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


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: minmono ที่ 12 กุมภาพันธ์ 2018, 10:35:42

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

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


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: thanakorn69 ที่ 12 กุมภาพันธ์ 2018, 12:38:23
ลองดูครับ


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: minmono ที่ 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:


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภา&
เริ่มหัวข้อโดย: romance69 ที่ 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 รายการ


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภา&
เริ่มหัวข้อโดย: minmono ที่ 13 กุมภาพันธ์ 2018, 10:12:23
ขอบคุณครับ :-*  :wanwan017:
$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 รายการ

 แถมยังช่วยชี้แจงอีกว่าเลขตัวแรก,ตัวหลังคืออะไร (เคยลอง limit 0, 5 / limit 0, 10 โดยไม่รู้ผลลัพธ์ :P) และแล้วก็สิ้นสุดโครงงานเล็กๆโครงงานหนึ่ง :wanwan003:
  :wanwan017: :wanwan017: :wanwan017: ขอขอบคุณอีกครั้งในทุกๆคำตอบจะใช้ได้หรือไม่ได้นั้นไม่เป็นไรครับอย่างน้อยก็ยังดีกว่าตอบว่า"ไม่มีใครว่างพอ ที่จะทำตามสิ่งที่คุณขอมา" :-X / The End.


หัวข้อ: Re: PHP เขียนยังไงให้แบ่งหน้าแสดงรูป+เรียงภาพใหม่สุดมาก่อนครับ
เริ่มหัวข้อโดย: minmono ที่ 13 กุมภาพันธ์ 2018, 13:16:51
โค๊ด:
$images = mysqli_prepare($db, 'SELECT `id`, `ext`, `time` FROM `images` WHERE `removed` = "0" ORDER BY `time` desc limit  $page, 10 ' );
สคริปเดิมเขาเยอะเลยต้องใช้ limit $page เป็น  limit '.$page.', 10 '  :P