เรืองการให้คะแนนโดยจำกัดระยะเวลา

เรืองการให้คะแนนโดยจำกัดระยะเวลา
อยากให้จำกัดระยะเวลาได้อ่ะ ขอนู่มันให้คะแนนอย่างเด๋ว 







<?


 if($_POST['update'] ==null){


  $sql ="select Score_friend,Username from member  where Username = '$_SESSION[friend]'  and status in (1,4)";


$result = mysql_query($sql) or die (mysql_error());


$i=0;


while(($row = mysql_fetch_array($result))!=false){


// echo "{$row['Username']} คะแนน {$row[Score_friend]}";


}


 }else{


  // echo $_POST[scroe_friend];


 //echo $_SESSION[friend];


  // if(isset($_COOKIE[lastGiveScore])==false && (isset($_SESSION[lastGiveScore]) ==false){  //$_SESSION[lastGiveScore] < date()+24 ชั่วโมง


// setcookie('lastGiveScore','1',time()+60*60*24);


// $_SESSION[lastGiveScore]=date();


// ob_end_flush();


$sql ="update member set Score_friend=Score_friend+({$_POST[scroe_friend]}) where Username = '$_SESSION[friend]'  and status in (1,4)";


// echo $sql;


$result = mysql_query($sql) or die (mysql_error());


//}


 }


          ?>


          <?


if($_POST['SumScore']== null) {


  $result=mysql_query("select Score_friend from  member where username = '$_SESSION[friend]'  and status in (1,4)") ;


while($row=mysql_fetch_array($result)){


// echo "$row[Score_friend]<br/>";


}


}


        ?>


        <?


        if($_GET[f]!=null)


            $_SESSION[friend]=$_GET[f];


$result=mysql_query("select * from  member where username = '$_SESSION[friend]'  and  status in (1,4,6)");


while(($row = mysql_fetch_array($result))!=false){


echo "<tr><td rowspan=\"4\"> <img src ='$row[Picture_member]' width=150 height =100></center> </td>";


echo"<td>NAME:$row[Username] </td>";


echo"<td><B><center>คะแนนโหวต</B></td></tr>";


echo"<tr><td>Birthday:$row[Birthday]</td></tr>";


echo"<tr><td> Occupation:$row[Occupation]</td>";


echo"<td><center>$row[Score_friend]  คะแนน</h2> </td></tr>";


echo"<tr><td> Country:$row[Country]</td><td><select name=\"scroe_friend\"><option value=\"1\">1</option>


<option value=\"2\">2</option>


<option value=\"3\">3</option>


<option value=\"4\">4</option>


<option value=\"5\">5</option>


<option value=\"6\">6</option>


<option value=\"7\">7</option>


<option value=\"8\">8</option>


<option value=\"9\">9</option>


<option value=\"10\">10</option>


<option value=\"-1\">-1</option>


<option value=\"-2\">-2</option>


<option value=\"-3\">-3</option>


<option value=\"-4\">-4</option>


<option value=\"-5\">-5</option>


<option value=\"-6\">-6</option>


<option value=\"-7\">-7</option>


<option value=\"-8\">-8</option>


<option value=\"-9\">-9</option>


<option value=\"-10\">-10</option>


</select><input type=\"submit\"value=\"update\" name=\"update\"/></td></tr>";


}


?>


          


            </tr>


            </table>


            </form>

18 ต.ค. 2553 5 1,681

เอาแนวคิดไปนะ



อย่างแรก ต้องบันทึกเวลา ที่ทำการให้คะแนน หรือ vote เก็บไว้ด้วย เพื่อไว้อ้างอิง เวลาที่ vote ล่าสุด

อย่างที่สอง ตอนที่ vote ให้ตรวจสอบเวลาก่อนครับ ว่า vote ล่าสุดเมื่อไร (ตามข้อแรก) ถ้าครบกำหนดแล้ว ก็ให้บันทึก vote ได้ แต่ถ้าไม่ ก็อาจแจ้งเตือน



จุดทีสำคัญ ผมแนะนำให้บันทึก เวลา vote ในรูป mktime เนื่องจากเก็บเป็นตัวเลข จะคำนวณเวลาง่าย (ด้วย PHP) และอาจต้องทำการบันทึก id ของ หน้าที่ vote เอาไว้ด้วย หากมีหลาย vote 



ส่วนการเก็บเวลา สามารถเก็บไว้ได้หลายรูปแบบครับ อย่างง่ายสุด ก็ เก็บบน cookie ของ ผู้ใช้ ถ้ายากกว่านั้นสักหน่อยก็อาจบันทึก server ลงในฐานข้อมูลหรืออืนใดก็ได้ตามถนัด



ในด้านความปลอดภัย ผมว่า การโกง vote นั้น ทำไม่ยากครับ ไม่ว่าจะด้วยวิธีใดก็ตาม หากเก็บบน cookie จะโกง ง่ายสุด  ด้วยการลบ cookie ก็สามารถ vote ใหม่ได้แล้ว หรือ หากเก็บบนฐานข้อมูล ไม่ว่าจะบันทึก session หรือ ip เก็บไว้ดวยก็ตาม ทั้ง 2 ค่าก็ยังถูกแก้ไขได้ (ไม่ยากนัก) หนทางที่ดูดีที่สุด สำหรับการป้องกันการโกง vote คือ ระบบสมาชิกครับ เนื่องจาก สมาชิก 1 คน สวามารถมีได้แค่ 1 vote เท่านั้น ครับ
#1

ต้องไปแก้ตรงไหนอ่ะ มันติดที่$_COOKIE ป่าวอ่ะ 
#2

โค้ดด้านบน ใช้ ทั้ง session และ cookie ลองตรวจสอบดูสิครับ ว่า ค่าทั้ง 2 มี หลังจาก ที่บันทึกแล้ว หรือไม่



ถ้าไม่มี ลองดูว่า



<?php

// ใช้งาน cookie

ob_start();

// ใช้งาน session

session_start();

?>



ทั้ง 2 คำสั่ง มีหรือไม่ ถ้ายังไม่เข้่าใจ ลองหาอ่าน บทความ เกี่ยวกับ cookie session ดูครับ
#3

มันบันทีกตอนให้คะแนนอ่ะ แต่ตอนจำกัดระยะไม่ได้อ่ะ คือเขียนโค้ดจำกัดเวลาผิดแน่เลยนะค่ะ แก้โด้ดแก้เวลาให้หน่อยนะค่ะ
#4

ติดตรงที่เช็คนะค่ะ มันไม่เช็คค่าวันไหน ติดตรงไหน ดูให้หน่อยนะค่ะ ว่า if เช็คค่าแบบบนี้ถูกไหม



if(isset($_COOKIE[lastGiveScore])==false && (isset($_SESSION[lastGiveScore]) ==false){ 

$_SESSION[lastGiveScore] < date()+24 ชั่วโมง

      setcookie('lastGiveScore','1',time()+60*60*24);

    $_SESSION[lastGiveScore]=date();

      ob_end_flush();
#5
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^