minmono
คนรักเสียว
พลังน้ำใจ: 0
ออฟไลน์
กระทู้: 102
|
|
« เมื่อ: 10 กุมภาพันธ์ 2018, 14:45:54 » |
|
สวัสดีครับ ได้สคริป php ใว้แสดงรูปที่เก็บอยู่ในเว็บมาครับ เวลาใช้งานมันจะโหลดภาพทั้งหมดที่มีออกมาแสดงเลยนะ = ช้า+เปลืองแบนด์วิชท์มาก จะต้องแก้ไขเพื่มเติมตรงไหนให้แบ่งออกมาเป็นหน้าล่ะประมาณ6-8ภาพครับ รวมถึงให้แสดงภาพใหม่สุดก่อนไล่ไปหาเก่าด้วย ขอความช่วยเหลือด้วยครับ <?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($image, PATHINFO_EXTENSION)); if (in_array($ext, $supported_file)) {
$FileName = substr(basename($image), 0 , (strrpos(basename($image), "."))); echo '<a href="view.php?id='. $FileName .'" ><img src="' . $image . '" alt="Random image" style="width:200px" /></a>' . " "; } 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 เข้าไปดู ผมเลยไปหาสคริปด้านบนมานะครับ ถ้าอย่างนั้นทำอย่างไรให้ดึงรูปอ้างอิงดาต้าเบส,แบ่งหน้า,ใหม่-เก่า จากสคริปชุดนี้ได้ครับ ปล.หรือมีตัวอื่นแนะนำครับ (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+ปัญหาของคนไม่เป็นเลยนะนี้ สคริปเขามีระบบสมาชิกให้สามารถดูรูปที่ตัวเองอัพได้ก็จริง แต่ก็ดูได้แค่ที่ตัวเองอัพเท่านั้น(แม้แต่ admin) *จะลองหาทางแก้ให้ admin ดูได้ทุกรูปดูครับ ส่วนจะให้แสดงผล perpage / order by `time` desc นี้จบเลยผม
|
|
|
บันทึกการเข้า
|
[ ขอคำแนะนำด้วยครับ ]
|
|
|
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" (ตอนแรกลบออกหมด เทสลบรูปฉไหนยังแสดงชื่ออยู่ ) ทำให้ดูได้ทุกรูปจริงแต่ - รายการรูปในหน้านี้ถ้าเป็นสมาชิกอัพรูปจะย่อก็บใว้ที่ thumb ถ้าบุคคลทั่วไปอัพ = ไม่ย่อ = ไม่มีรูปมาแสดง = แสดงเป็นตัวหนังสือเฉยๆ อย่างนี้ต้องไปทำให้สร้างรูปย่อทุกกรณีเลยชิมินี่ - เหลือทำอย่างใรให้แสดง perpage ครับ
|
|
|
บันทึกการเข้า
|
[ ขอคำแนะนำด้วยครับ ]
|
|
|
minmono
คนรักเสียว
พลังน้ำใจ: 0
ออฟไลน์
กระทู้: 102
|
|
« ตอบ #8 เมื่อ: 11 กุมภาพันธ์ 2018, 14:59:25 » |
|
รายงานผล - ทำให้ดูได้ทุกรูปได้โดยไม่ต้องใช้สคริป glob = OK- ทำให้เรียงภาพใหม่มาก่อน order by `time` desc = OK- ให้ทำรูปย่อทุกรูป !isset($_SESSION['user']) = OKคงเหลือ ทำอย่างไรให้แบ่งหน้าครับ
|
|
|
บันทึกการเข้า
|
[ ขอคำแนะนำด้วยครับ ]
|
|
|
ThaNaButS
Verified Seller
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 67
ออนไลน์
กระทู้: 1,197
|
|
« ตอบ #9 เมื่อ: 11 กุมภาพันธ์ 2018, 15:09:02 » |
|
รายงานผล - ทำให้ดูได้ทุกรูปได้โดยไม่ต้องใช้สคริป glob = OK- ทำให้เรียงภาพใหม่มาก่อน order by `time` desc = OK- ให้ทำรูปย่อทุกรูป !isset($_SESSION['user']) = OKคงเหลือ ทำอย่างไรให้แบ่งหน้าครับ เอาฟังก์ชั่นจากที่นี้มาใช้ 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.กรอง (แสดงรูปยาวเป็นหางว่าว) <?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 นะครับ
|
|
|
บันทึกการเข้า
|
[ ขอคำแนะนำด้วยครับ ]
|
|
|
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 » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
minmono
คนรักเสียว
พลังน้ำใจ: 0
ออฟไลน์
กระทู้: 102
|
|
« ตอบ #13 เมื่อ: 11 กุมภาพันธ์ 2018, 21:54:40 » |
|
แก้แล้วเว็บนี้สายขาวจริง(ขาวทั้งหน้าจอเลย) ขอบคุณกำลังใจครับ
|
|
|
บันทึกการเข้า
|
[ ขอคำแนะนำด้วยครับ ]
|
|
|
|
ThaNaButS
Verified Seller
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 67
ออนไลน์
กระทู้: 1,197
|
|
« ตอบ #15 เมื่อ: 12 กุมภาพันธ์ 2018, 00:38:35 » |
|
แก้แล้วเว็บนี้สายขาวจริง(ขาวทั้งหน้าจอเลย) ขอบคุณกำลังใจครับ งั้นก็ขอโทษด้วยครับ ที่ทำให้เสียเวลา ผมคงไม่เก่ง
|
|
|
บันทึกการเข้า
|
|
|
|
minmono
คนรักเสียว
พลังน้ำใจ: 0
ออฟไลน์
กระทู้: 102
|
|
« ตอบ #16 เมื่อ: 12 กุมภาพันธ์ 2018, 10:35:42 » |
|
งั้นก็ขอโทษด้วยครับ ที่ทำให้เสียเวลา ผมคงไม่เก่ง
ชิวๆสายฟรีครับ เสียเวลาไปกับการเรียนรู้+ได้ประสบการณ์ ดีกว่าปล่อยผ่านไปเฉยๆครับ
|
|
|
บันทึกการเข้า
|
[ ขอคำแนะนำด้วยครับ ]
|
|
|
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) ใช้ได้สมบูรณ์ซะงั้น รายงานผล - ทำให้ดูได้ทุกรูปได้โดยไม่ต้องใช้สคริป glob = OK- ทำให้เรียงภาพใหม่มาก่อน order by `time` desc = OK- ให้ทำรูปย่อทุกรูป !isset($_SESSION['user']) = OKคงเหลือ ทำอย่างไรให้แบ่งหน้าครับ - แสดงเพียง 10 รูปล่าสุดเท่านั้น = OK+ คิดต่อไปอีกว่าจะต้องทำอย่างไรหรือใช้คำสั่งว่าอะไรครับให้แสดงรูปลำดับที่ 11-20 ได้นะครับ ลองใช้เป็น (order by `time` desc BETWEEN 11 and 20 ) แล้วไม่ได้นะครับ
|
|
|
บันทึกการเข้า
|
[ ขอคำแนะนำด้วยครับ ]
|
|
|
romance69
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 169
ออฟไลน์
กระทู้: 2,158
|
|
« ตอบ #19 เมื่อ: 13 กุมภาพันธ์ 2018, 00:36:06 » |
|
ไปเจอเขาใช้คำสั่ง LIMIT 1 เพื่อแสดงข้อมูลล่าสุด / ลองเอามาใส่ของเราให้เป็น 10 รูปล่าสุดดู (order by `time` desc LIMIT 10) ใช้ได้สมบูรณ์ซะงั้น รายงานผล - ทำให้ดูได้ทุกรูปได้โดยไม่ต้องใช้สคริป glob = OK- ทำให้เรียงภาพใหม่มาก่อน order by `time` desc = OK- ให้ทำรูปย่อทุกรูป !isset($_SESSION['user']) = OKคงเหลือ ทำอย่างไรให้แบ่งหน้าครับ - แสดงเพียง 10 รูปล่าสุดเท่านั้น = OK+ คิดต่อไปอีกว่าจะต้องทำอย่างไรหรือใช้คำสั่งว่าอะไรครับให้แสดงรูปลำดับที่ 11-20 ได้นะครับ ลองใช้เป็น (order by `time` desc BETWEEN 11 and 20 ) แล้วไม่ได้นะครับ $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 »
|
บันทึกการเข้า
|
|
|
|
|