ช่วยด้วยค่ะcounter download ไม่นับค่าเพิ่ม ทำยังไงดีค่ะ
กระบวนการก่อนหน้านี้ ไม่ทราบว่าจะเริ่มนับจากขั้นตอนไหน
เช่น นับจากการคลิก link / นับจากการส่งค่าจากฟอร์มทั้ง POST และ GET
ถ้าจะใช้ code เดิม ต้องดูขั้นตอนแต่แรก ถึงจะตอบได้ครับ
หรือ ใส่ `phts` ครอบ ฟิลด์
$strSQL = "UPDATE `phts` SET `numphts` = `numphts`+1 WHERE `id` = ' ".$_GET["id"]." ' ";
$objQuery = mysqli_query($strSQL);
$strSQL = "SELECT * FROM `phts` WHERE `id` = ' ".$_GET["id"]. " ' " ;
$objQuery = mysqli_query($strSQL);
$result = mysqli_fetch_array($objQuery);
Date :
2018-11-27 10:15:43
By :
apisitp
โค๊ด php ตัวรับ น่าจะใช้ได้ ถ้า request มาแบบ GET
แต่กลัวว่าจะ request มาแบบ POST มากกว่า
Code (PHP)
$strSQL = "UPDATE phts SET numphts = numphts+1 WHERE id = '".$_GET["id"]."' ";
echo $strSQL; exit; // พิมพ์มันออกมาดูด้วยตาก่อนครับ ถ้าถูกต้องค่อยลบมันออก
แต่แนะนำให้เปลี่ยนไปใช้ คำสั่ง prepare เพื่อป้องกัน sql injection นะครับ
ประวัติการแก้ไข 2018-11-27 10:52:01
Date :
2018-11-27 10:51:31
By :
Chaidhanan
หนูทำตามเว็บนี้ค่ะ หนูอยากนับตอนที่พอคลิกดาวน์โหลดแล้วนับจำนวนนที่ดาวน์โหลดเลยค่ะ
https://www.thaicreate.com/community/php-counter-download-file.html
ฐานข้อมููลของหนู
หน้า download.php
Code (PHP)
$sql = "select * from phts"; //คำสั่ง Sql ที่ใช้
$dbq=mysqli_query($conn,$sql) or die ("ไม่สามารถติดต่อฐานข้อมูลได้");
$numrow=mysqli_num_rows($dbq);
หน้า count.php
Code (PHP)
$strSQL = "UPDATE `phts` SET `numphts` = `numphts`+1 WHERE `id` = ' ".$_POST["id"]." ' ";
$objQuery = mysqli_query($strSQL);
$strSQL = "SELECT * FROM `phts` WHERE `id` = ' ".$_POST["id"]. " ' " ;
$objQuery = mysqli_query($strSQL);
$result = mysqli_fetch_array($objQuery);
หนูทำตามทั้ง2ท่านแล้วค่ะ ก็ยังไม่เพิ่มไม่รู้ว่าผิดตรงไหนค่ะ
ประวัติการแก้ไข 2018-11-27 15:31:01 2018-11-27 15:33:45 2018-11-27 15:33:53 2018-11-27 15:36:54 2018-11-27 15:39:18 2018-11-27 15:40:39
Date :
2018-11-27 15:27:06
By :
conan1
ลอง
Code (PHP)
echo $strSQL;
exit();
ให้แสดงแต่ ค่า sql ดูว่าถูกต้องมั้ย
Date :
2018-11-27 15:47:47
By :
Pong Thep
มันขึ้นแบบนี้ค่ะ ไปฐาน admin งง เลยค่ะ
SELECT * FROM admin WHERE ID = '1'
Date :
2018-11-27 15:56:41
By :
conan1
สงสัยจะแค่มองผ่าน ไม่สนใจว่าโค๊ดที่เขียนให้ไป ใช้ทำอะไรได้
ถ้าเอาโค๊ดที่ผมให้ไปทดสอบ มันต้องมี response อะไรออกมาบ้าง แหล่ะ
ถ้าไม่มี อะไรออกมาให้เห็น ก็จบข่าว
Date :
2018-11-27 15:56:53
By :
Chaidhanan
ขอโทษด้วยค่ะ ตอนหนูทดสอบ ทดสอบผิดหน้าค่ะ
ตอนนี้หนูแก้แล้วค่ะ
select * from phts
แสดงออกมาแบบนี้ค่ะ แต่ยังไม่เพิ่มจำนวนค่ะ
Date :
2018-11-27 16:07:07
By :
conan1
คห 2 ครับ ต้นกำเนิด การ update ค่า อยู่ตรงนั้น
คือแบบว่าอ่านแล้วต้องทำความเข้าใจด้วยนะครับ ผมว่าผมเขียนละเอียดแล้วนะ
ไม่เข้าใจตรงไหนครับเนี่ย
ผมสงสัยเรื่อง POST GET
แต่คุณไปทำ ส่วนที่ไม่เกี่ยวกับ POST หรือ GET
ผมให้ตรวจสอบ การนำเข้า database
คุณไปแสดงส่วนอ่านค่าจาก database
แล้วมันจะจูนตรงกันได้ยังไงล่ะครับ ต้องการที่จะอัพเดท database จริงๆ หรือเปล่าเนี่ย 5555
Date :
2018-11-27 17:20:38
By :
Chaidhanan
เมื่อแน่ใจว่าไม่เออเร่อร์
$strSQL = "UPDATE phts SET numphts = numphts+1 WHERE id = '".$_POST["id"]."' ";
$objQuery = mysqli_query($strSQL); // ตรงนี้ มีเออเร่อร์ไหมครับ เพราะตรงนี้ผิด ไวยกรณ์ ยังไงก็ต้อง error ยกเว้นจะปิด error ไว้
รูปแบบที่ถูก $objQuery = mysqli_query($link_connect, $strSQL); สีแดงคือส่วนที่หายไป
แล้วคำสั่งที่ ควรเขียนสำหรับการ update หรือ insert
Code (PHP)
$id=$_POST['id']*1; // สำหรับกรณี $_POST['id'] เป็นตัวเลข
$strSQL = 'UPDATE phts SET numphts = numphts+1 WHERE id = '.$id;
$objQuery = $link_connect->query($strSQL) or die( $sql.'<br>'.$link_connect->error);
if( $link_connect->affected_rows<1){
die ('Affected rows was zero'); // ให้มีการตรวจสอบผลที่ได้ไว้ด้วย
}
Date :
2018-11-27 18:33:05
By :
Chaidhanan
หาส่วนที่ปิด error เอาออกซะ เซทแบบข้างล่าง มันจะได้แจ้ง error
error_reporting(-1);
ini_set('display_errors', 1);
Date :
2018-11-27 19:10:46
By :
Chaidhanan
เอาโค๊ดเต็มๆ มาดูหน่อยครับ
Date :
2018-11-27 20:07:33
By :
Chaidhanan
ตอบความคิดเห็นที่ : 16 เขียนโดย : Chaidhanan เมื่อวันที่ 2018-11-27 20:07:33
รายละเอียดของการตอบ ::
ขอบคุณพี่มากนะค่ะ ที่ช่วยดูให้
download.php
<?php
include("check_admin.php");
$conn = mysqli_connect("localhost","root","123456","project");
mysqli_set_charset($conn, "utf8");
$sqll = "select * from phts"; //คำสั่ง Sql ที่ใช้
$dbq=mysqli_query($conn,$sqll) or die ("ไม่สามารถติดต่อฐานข้อมูลได้");
$numrow=mysqli_num_rows($dbq);
if($numrow > 0)
{
$i=1;
while($i <= $numrow)
{
$result=mysqli_fetch_array($dbq);
$id=$result['id'];
$Name=$result['Name'];
$topic =$result['topic'];
$files =$result['files'];
$numphts =$result['numphts'];
?>
<table width="30%">
<td width="7%" ><? echo $id ?></td>
<td width="49%"><?php echo $topic ?></td>
<td width="44%"><a href="count.php?files=46.pdf">ดาวน์โหลด</a>[<?php echo $numphts ?>]</td>
<br>
<br>
</tr>
</table>
<?php
$i++;
}
}
else
echo"<br> <br> <font color=red>ไม่พบเอกสาร ! </b>";
//echo $sqll; exit;
error_reporting(-1);
ini_set('display_errors', 1);
?>
count.php
<?php
include("check_admin.php");
$conn = mysqli_connect("localhost","root","123456","project");
mysqli_set_charset($conn, "utf8");
header("Content-type: pdf");//เช่น application/rar
header("Content-length: 500MB");//ใส่ไปเลย ตัวเลขเป็น Byte นะ ไม่ใส่ก็ได้ แต่เบราเซอร์จะแสดงขนาดเปง Unknow
header("Content-Disposition: attachment; filename=46.pdf"); //ใส่ชื่อไฟล์ที่ต้องการ ไม่ใช่ URL ของไฟล์นะ เช่น xxx.rar
mysqli_select_db($db) or die("เลือกฐานข้อมูลไม่ได้");
$id=$_POST['id']*1; // สำหรับกรณี $_POST['id'] เป็นตัวเลข
$sqll = 'UPDATE phts SET numphts = numphts+1 WHERE id = '.$id;
$objQuery = $link_connect->query($sqll) or die( $sql.'<br>'.$link_connect->error);
if( $link_connect->affected_rows<1){
die ('Affected rows was zero'); // ให้มีการตรวจสอบผลที่ได้ไว้ด้วย
}
$sqll = "SELECT * FROM `phts` WHERE `id` = ' ".$_POST[`id`]. " ' " ;
$objQuery = mysqli_query(sqll);
$result = mysqli_fetch_array($objQuery);
error_reporting(-1);
ini_set('display_errors', 1);
?>
ประวัติการแก้ไข 2018-11-27 20:24:20
Date :
2018-11-27 20:20:30
By :
conan1
เวลาเขียนโค้ดบนเครื่อง ควรปรับสภาพแวดล้อมให้เหมาะสม https://rundiz.com/?p=171
Code (PHP)
$objQuery = $link_connect->query($sqll) or die( $sql.'<br>'.$link_connect->error);
$link_connect มาจากไหนผมไม่เห็นประกาศไว้ก่อนตรงไหนเลย อยู่ๆจะจับมาใส่ก็ใส่แบบนี้ ถ้าตั้งค่าให้แสดง error ละเอียดจริงๆแบบลิ้งค์ที่ผมให้ไป มันควรจะแจ้ง undefined variable แล้ว.
https://www.thaicreate.com/php/forum/095986.html ลองดูตัวอย่างว่าเขาเขียนยังไง อะไรมาจากไหน แล้วเทียบเคียงแก้ไขเอา.
'UPDATE phts SET numphts = numphts+1 WHERE id = ' backtick (`) หายไปไหนอีกแล้ว เดิมใส่อยู่ก็ดีแล้ว และก็ควรจะใส่แม้มันจะทำงานได้หลายกรณีเมื่อไม่ใส่ก็ตาม แต่บางกรณีก็ต้องใส่จึงจะทำงานได้ ดังนั้นควรใส่ให้ชิน.
Date :
2018-11-27 21:09:57
By :
mr.v
ขอโทษผมขอโค๊ดที่คุณใช้ทำงาน จริงๆ อย่าเอาโค๊ดกำมะลอมาหลอกกันครับ
อยากได้โค้ด php counter download ระบบนับจำนวนครั้งดาวน์โหลดไฟล์ หน่อยค่ะ
เข้าไปศึกษาทุกเว็บแล้วทำไม่ได้เลยค่ะ ไม่ยอมนับที่ดาวน์โหลดไฟล์
จากคำพูดนี้ แสดงว่าคุณต้อง download ได้แสดงข้อมูล pdf ได้แล้ว แค่ต้องการการนับจำนวน download มาเท่านั้น
แต่โค๊ดที่คุณเอามาลง มันทำงานไม่ได้จริง วางตำแหน่งก็ผิดที่ผิดทาง
ถ้าเป็นแบบนี้จริง แนะนำให้ไปอ่านที่ลิงค์นี้เลยครับ เริ่มจาก ก ข ค ใหม่เลยจะดีกว่าจะได้เป็น
https://www.thaicreate.com/php.html
อย่างเพ่ิ่งมาสร้างงานเองเลยครับ ทดลองตามตัวอย่างให้ได้ตามตัวอย่างก่อน
จะลงโค๊ดให้ดูเป็นตัวอย่างซักหน่อยก็แล้วกัน ยังไงก็ขอให้ศึกษาโค๊ดอย่างจริงๆจังๆ ด้วยนะครับ
อันไหนไม่เข้าใจให้เปิด document ดูก่อนไม่ใช่อึกอักอะไรก็มาให้คนอื่นทำให้
ถ้าคุณถามด้วยความบริสุทธิ์ใจ ต้องขวนขวายอีกมาก ต้องเหนื่อยอีกเยอะ สู้ๆ ก็แล้วกันนะครับ
ตัวอย่างเป็นวิธีการ เรียกใช้ class mysqli แบบ oop ง่ายและสั้นกว่าแบบ procedural
Code (PHP)
<?php // เปิด tag php เต้มรูปแบบทุกครั้ง
// download.php
include("check_admin.php"); // อันนี้เอาออกไปก่อนก็ได้ เพื่อจะได้ทดลองโค๊ด โดยไม่มีอุปสรรคจากโค๊ดเก่า
error_reporting(-1); // กำหนดให้เขียน error ลงไฟล์ php_error_log
ini_set('display_errors', 1); // กำหนดให้แสดง error
// เปิด connection
$conn = mysqli_connect("localhost","root","123456","project") or die('ไม่สามารถ ติดต่อกับฐานข้อมูลได้<br>'.$conn->error);
// กำหนดรหัสภาษาสำหรับ mysql
$conn->set_charset('utf8');
// เปิดคิวรี่เรียกใช้ข้อมูล
$dbq=$conn->query('select * from phts') or die ($conn->error);
// ตรวจสอบ จำนวนเรคคอร์ดที่ได้
if($dbq->num_rows){ /*ถ้ามีจำนวนมากกว่า 0 สถานะเป็นจริง */ ?>
<table width="30%">
<?php while( $r=$dbg->fetch_object()){ /* วนลูปแสดงข้อมูลและลิงค์ download*/?>
<tr>
<td width="7%" ><?=$r->$id?></td>
<td width="49%"><?=$r->$topic?></td>
<td width="44%"><a href="count.php?id=<?=$r->id?>.pdf">ดาวน์โหลด </a>
<?=$r->Name?>[<?=$r->numphts?>]</td> <!-- กำหนดให้ใช้ id เป็นเลขลิงค์ -->
</tr>
<?php } // เปิด tag php เต้มรูปแบบทุกครั้ง
?>
</table>
<?php }else{?>
<br><br><font color=red >ไม่พบเอกสาร ! </b>
<?php // เปิด tag php เต้มรูปแบบทุกครั้ง
}
?>
Code (PHP)
<?php
//count.php
include("check_admin.php"); // อันนี้เอาออกไปก่อนก็ได้ เพื่อจะได้ทดลอง โค๊ด แบบไม่มีอุปสรรคจากโค๊ดเก่าๆ
error_reporting(-1);
ini_set('display_errors', 1);
$conn = mysqli_connect("localhost","root","123456","project") or die('ไม่สามารถ ติดต่อกับฐานข้อมูลได้<br>'.$conn->error);
$conn->set_charset('utf8');
$id=isset($_POST['id'])? $_POST['id']*1:0; // สำหรับกรณี $_POST['id'] เป็นตัวเลข
$sqll = 'UPDATE phts SET numphts = numphts+1 WHERE id = '.$id;
$objQuery = $conn->query($sqll) or die( $sql.'<br>'.$conn->error);
if( $conn->affected_rows<1){
die ('Affected rows was zero'); // ให้มีการตรวจสอบผลที่ได้ไว้ด้วย
}
$sqll = 'SELECT * FROM `phts` WHERE `id` = ' . $id;
$rs = $conn->query($sqll) or die($sqll.'<br>'.$conn->error);
if($rs->num_rows){
$r = $rs->fetch_object();
$content=file_get_contents($r->file); // อันนี้เดาเอา เพราะไม่รู้เก็บแบบไหน เป็นการอ่านไฟล์มาเก็บในตัวแปร
header('Content-type: pdf');//เช่น application/rar
header('Content-length: '.str_len($content));//ใส่ไปเลย ตัวเลขเป็น Byte นะ ไม่ใส่ก็ได้ แต่เบราเซอร์จะแสดงขนาดเปง Unknow
header('Content-Disposition: attachment; filename='.$r->files); //ใส่ชื่อไฟล์ที่ต้องการ ไม่ใช่ URL ของไฟล์นะ เช่น xxx.rar
echo $content;
}else{
echo "No Contents found";
}
ประวัติการแก้ไข 2018-11-27 21:40:16
Date :
2018-11-27 21:33:19
By :
Chaidhanan
ผมแค่พูดถึงตัวแปร variable กับคำสั่ง sql UPDATE.
ไม่ได้พูดถึงว่าให้เปลี่ยนวิธีเขียนจากฟังก์ชั่นเป็น oop เลยครับ.
Date :
2018-11-27 21:58:36
By :
mr.v
ขอโทษทุกท่านด้วยนะค่ะ ที่ไม่ค่อยเข้าใจรายละเอียดของphp เท่าไร
แต่อยากศึกษาจริงๆ และพยายามทำความเข้าใจอยู่ค่ะ
Date :
2018-11-28 10:49:22
By :
conan1
อยากสอบถามหน่อยค่ะ หากมันเป็นไฟล์ pdf แล้วเวลาเรากดปุ่มดาวน์โหลด
มันสามารถนับจำนวนคนที่มาดาวน์โหลดได้หรือเปล่าค่ะ ซึ่งไฟล์จะอยู่ในโฟเดอร์ของเครื่องเวลาอัพโหลดเข้ามาค่ะ
มันคือ
คำสั่งนับจำนวนหน้า Count Page ของไฟล์ PDF หรือเปล่าค่ะ
แล้วต้องทำยังไงบ้างค่ะ
ประวัติการแก้ไข 2018-11-28 10:59:28
Date :
2018-11-28 10:52:31
By :
conan1
นี่คุณก็ไม่ได้อ่านอยู่ดี โค๊ดตัวอย่างที่ให้ไป หรือ โค๊ดของคุณ มัน นับการดาวน์โหลดอยู่แล้ว
เพียงแต่โค๊ดของคุณยังรันไม่ได้ เพราะมีผิดเยอะหลายที ก็ลองเอาโค๊ดที่ผมให้ไปศึกษา ดูครับ
ก็ขอจบการตอบสำหรับ topic นี้แค่นี้นะครับ เพราะเขียนอะไรไปก็ไม่อ่าน ไม่ทดสอบ ไม่เปิด document
ถ้าอยากจะได้แต่ผลลัพธ์อย่างเดียว คงต้องจ้างแล้วล่ะครับ
Date :
2018-11-28 11:01:17
By :
Chaidhanan
Load balance : Server 02