หน้าหลัก โค้ด-บทความ php โค้ด-บทความ javascript โค้ด-บทความ css สารบัญ สารบัญ

ทักทายครับ

สวัสดีครับ หลังจากที่ blog นี้หยุดการอัพเดททบความเกี่ยวกับโค้ดในการใช้ทำเวปไปนานไม่ว่าจะเป็น code php, html, javascript, css, ajax เนื่องจากผมไม่ค่อยมีเวลาจนลืม blog นี้ไปเลย นึกขึ้นได้ตอนปีใหม่ ไปค้นหาใน google แล้วตกใจ เนื่องจาก blog นี้ไปอยู่ลำดับที่ 1 ของการค้นหา ไม่เชื่อลองดู เลยขอถือโอกาสเริ่มต้นใหม่ในช่วงปีใหม่นี้เริ่มอัพเดทบทความตั้งแต่ตอนนี้เป็นต้นไป หวังเป็นอย่างยิ่งว่าจะมีผู้ติดตามบทความของผมต่อไปน่ะครับ ปล.ท่านใดสนใจลงโฆษณาสามารถติดต่อได้ที่ hotcodephp@gmail.com

30 ก.ค. 2555

PHP กับเทคนิคการแปลง IP ให้เป็น .xxx

code php วันนี้ขอกล่าวถึงเรื่องของ IP ซึ่งเป็นการแปลงค่า IP ให้เป็น .xxx เพื่อป้องกันผู้ใช้งานเห็นค่า IP ที่แท้จริง อาจนำโค้ด php ตัวนี้ไปประยุกต์ใช้ในการทำระบบงาน การทำเว็บบอร์ด หรือการโพสข้อความ ก็ได้ เรามาดูตัวอย่าง code php เลยดีกว่า จะมีด้วยกัน 3 วิธีน่ะครับ


วีธีที่1 
$ip='192.168.10.100';
$new =preg_replace('/^((\d+\.){3})(.*)/','\\1xxx',$ip);
echo $new;

วีธีที่2  
$ip='192.168.20.200';
$show=explode(".",$ip);
echo $show['0'],".",$show['1'],".",$show['2'],".xxx";

วีธีที่3 
$ip='192.16.30.253';
echo substr($ip,0,strrpos($ip,".")).".xxx";
Read more >>

26 ก.ค. 2555

PHP กับการป้องกันการลงทะเบียนอัตโนมัติด้วย CAPTCHA

บทความ php วันนี้ขอนำเสอนเจ้าต้ว CAPTCHA มันช่วยให้การใช้เน็ตของคุณปลอดภัยด้วยวัตถุประสงค์สำคัญของมันก็เพื่อความปลอดภัยโดยเฉพาะเว็บไซต์ที่ ต้องมีการป้อนข้อมูลส่วนตัว  เช่นการลงทะเบียนผู้ใช้งาน, การโพสข้อมูลใน webboard ฯลฯ เนื่องจากพวกแฮกเกอร์ส่วนใหญ่จะใช้สิ่งที่เรียกว่า bots ในการโจมตีผู้ใช้ ซึ่ง bots ที่ว่านี้สามารถสร้างขึ้นโดยคอมพิวเตอร์ แต่เนื่องจากคอมพิวเตอร์ไม่สามารถแก้ปัญหาการทดสอบด้วย CAPTCHA ได้ จะต้องอาศัยมนุษย์ที่เพ่งดูกราฟฟิกยุ่งเหยิงเหล่านี้ และแกะตัวอักษรออกมาเพื่อพิมพ์ยืนยันอีกที ทำให้ผู้ใช้ปลอดภัยจาก bots เหล่านี้ไปโดยปริยาย ซึ่งวิธีการสร้างและใช้งาน CAPTCHA ผมขอยกตัวอย่างโค้ด php ให้เอาไปประยุกต์ใช้กันนะครับ
ขั้นตอนแรกให้สร้างไฟล์ captcha.php ภายในไฟล์เขียนโค้ด php ดังนี้

<?php
session_start();
  
 class CaptchaSecurityImages {
  
    var $font = 'font.ttf';  // เปลี่ยน font ได้ตามต้องการ
  
    function generateCode($characters) {
    $possible = 'abcdefghjkmnpqrstvwxyz';  // ตัวอักษรที่ต้องการจะเอาสุ่มเป็น Captcha
    $code = '';
    $i = 0;
    while ($i < $characters) { 
    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;
    }
    return $code;
    }
  
    function CaptchaSecurityImages($width='120',$height='40',$characters='6') {
    $code = $this->generateCode($characters);
    $font_size = $height * 0.9;  // font size ที่จะโชว์ใน Captcha
    $image = imagecreate($width, $height) or die('Cannot initialize new GD image stream');
    $background_color = imagecolorallocate($image, 255, 255, 255);  // กำหนดสีในส่วนต่่างๆ
    $text_color = imagecolorallocate($image, 141, 192, 42);
    $noise_color = imagecolorallocate($image, 172, 208, 95);
    for( $i=0; $i<($width*$height)/5; $i++ ) { // สุ่มจุดภาพพื้นหลัง
    imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
    }
    for( $i=0; $i<($width*$height)/200; $i++ ) { // สุ่มเส้นภาพพื้นหลัง
    imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
    }
    /* สร้าง Text box และเพิ่ม Text */
    $textbox = imagettfbbox($font_size, 0, $this->font, $code) or die('Error in imagettfbbox function');
    $x = ($width - $textbox[4])/2;
    $y = ($height - $textbox[5])/2;
    imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');
    /* display captcha image ไปที่ browser */
    header('Content-Type: image/jpeg');
    imagejpeg($image);
    imagedestroy($image);
    $_SESSION['security_code'] = $code;
    }
  
 }
  
 $width = isset($_GET['width']) && $_GET['height'] < 600 ? $_GET['width'] : '120';
 $height = isset($_GET['height']) && $_GET['height'] < 200 ? $_GET['height'] : '40';
 $characters = isset($_GET['characters']) && $_GET['characters'] > 2 ? $_GET['characters'] : '6';
  
 $captcha = new CaptchaSecurityImages($width,$height,$characters); 

?>



ขั้นตอนที่สอง สร้างไฟล์ getdata.php ใว้ใน Folder เดียวกันกับ captcha.php โดยภายใน code php เขียนดังนี้
<?php
session_start();
if($_REQUEST['task']=='add'){ //หากมีการ Submit ข้อมูลผ่าน From มา
 if($_SESSION['security_code']!=$_POST['secret_code']) { // Check 
  echo "<p>คุณใส่รหัสตัวอักษรไม่ถูกต้องกรุณากรอกใหม่</p>";
 }else{
  echo "<p>รหัสถูกต้อง (สามารถใส่โค๊ดบันทีก หรือโค๊ดอะไรก็ได้ที่ต้องการ)</p>";
 }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form method="post" action="?task=add">
<input name="name" type="text" /><br /><br />
<input name="detail" type="text" /><br /><br />
<iframe name="a"src="captcha.php?width=100&height=40&characters=5" alt="captcha" frameborder="0" width="120" height="60" scrolling="no"></iframe>
<a href="captcha.php?width=100&height=40&characters=5" target="a"><img src="refresh.gif" width="13" height="13"  border="0" /></a><br />
<br />
พิมพ์อักขระ ตามที่คุณเห็นในภาพ  วิธีการนี้จะช่วยป้องกันการลงทะเบียนโดยอัตโนมัติ<br />
<input name="secret_code" type="text" /><br /><br />
<input  type="submit" value="submit" />
</form>
</body>
</html>

ต่อมาก็ดาวน์โหลด font.ttf และ refresh.gif ตามไฟล์ลิ้งค์ครับ http://bc46.com/forum/index.php?action=dlattach;topic=67.0;attach=77 เอาไปใว้ใน Folder เดียวกับไฟล์ getdata.php ,captcha.php เสร็จแล้วก็ลองรันไฟล์ getdata.php ทดสอบดูเลยครับ นี่เป็นเพียงตัวอย่างเฉยๆ ลองนำไปประยุกต์ใช้ดูครับ

Read more >>

24 ก.ค. 2555

PHP กับการทำ form login แบบป้องกันการไม่ได้ login

จากบทความ php เรื่อง  PHP กับการทำ form login อย่างง่าย จะเป็นการ login ที่มีรูปแบบธรรมดา แต่ก็มีปัญหาว่าหากผู้ใช้งานเข้าหน้าหลักของระบบโดยที่ไม่ได้ผ่านการ login ได้หรือไม่ ก็ต้องบอกว่ามีความเป็นไปได้ แล้วเราจะทำหน้า login ไว้ป้องกันทำไม ดังนั้นวันนี้เรามาดูวิธีแก้ไขกันดีกว่า ลักษณะโค้ด php มันก็จะคล้าย ๆ กับ บทความ PHP กับการทำ form login อย่างง่าย แต่จะมีการใช้คำสั่งที่เกี่ยวกับ session เข้ามาเกี่ยวข้อง มาดูตัวอย่างโค้ดกันเลยครับ
1. โค้ด login.php

<?
ob_start();
session_start();

?>
<form name="form1" method="post" action="check.php">
<table width="300" height="27" border="0" align="center" cellpadding="0" cellspacing="10">
<tr> 
<td>รหัสผู้ใช้งาน</td>
<td> 
  <div align="center">
    <input type="text" name="user">
  </div></td>
</tr>
<tr> 
<td>รหัสผ่าน</td>
<td> 
  <div align="center">
    <input type="password" name="pass">
  </div></td>
</tr>
<tr> 
<td colspan="2"><p align="center"><br>
  <input type="submit" name="Submit" value="ตกลง">
  &nbsp;
  <input type="reset" name="Submit2" value="ยกเลิก">
  </p>
  </td>
</tr>
</table>
</form>

จากด้านบนตัวสีแดงเป็นการเปิดคำสั่ง session ให้เริ่มทำงาน ส่วนโค้ดอื่น ๆ ก็เป็นโค้ด form สำหรับ login ธรรมดา ๆ
2. สร้างฐานข้อมูลเพื่อจัดเก็บข้อมูลรหัสผู้ใช้งาน และรหัสผ่าน ซึ่งในที่นี้ผมใช้ MS Access ในการจัดเก็บ
3. สร้าง code php เพื่อใช้ในการตรวจสอบว่าข้อมูลรหัสผู้ใช้งาน และรหัสผ่านที่ผู้ใช้งานกรอกมาตรงกับฐานข้อมูลที่มีอยู่หรือไม่ ดูตัวอย่าง code check.php ด้านล่างเลยครับ

<?php
ob_start();
session_start();
$dsn = "login"; // กำหนดชื่อ DSN
$user_name =""; // กำหนดชื่อล็อกอิน
$pass_word =""; // กำหนดรหัสผ่าน

$connect = odbc_connect($dsn, $user_name, $pass_word) or die("ติดต่อ DSN ไม่ได้");

$sql = "SELECT user.team, *
FROM [user]
WHERE (((user.username)='$user') AND ((user.password)='$pass'))";
$exec = odbc_exec($connect, $sql); // เริ่มเอ็กซิคิวต์คำสั่ง SQL
$num_rows = odbc_result($exec, 1); // ตัวแปรจำนวนเรกคอร์ด

if(empty($num_rows)) 
{
echo"<br><center>user หรือ password ไม่ถูกต้อง</center></br>";
}
else
{
session_start();
$_SESSION[id]=session_id();
$_SESSION[username]=$user;
header('location:main1.php');
}
odbc_close($connect); // ปิดการเชื่อมต่อ
?>

จาก code จะมีลักษณะการทำงานคือ เมื่อตรวจสอบข้อมูลกับฐานข้อมูลแล้ว หากไม่มีผู้ใช้งานนี้ในฐานข้อมูลก็จะมีข้อความเตือนขึ้นมา แต่ถ้ามีข้อมูลในฐานข้อมูลก็จะเรียกใช้งาน session เพื่อเก็บข้อมูล sess_id และ username ไว้ในเครื่องเพื่อนำมาเรียกใช้งานครั้งต่อไป และเมื่อเก็บแล้วก็ให้ไปที่หน้าหลักของระบบต่อไป
4. การป้องกันการเข้าหน้าหลักโดยไม่ได้ผ่านการ login ซึ่งจำเป็นที่จะต้องใส่ code php นี้ในทุกหน้าที่เรามี หากไม่ได้ login เมื่อเข้ามาก็จะกลับไปหน้า login อีกครั้ง ตัวอย่างด้านล่างครับ

<?
session_start();
$sess_id=$_SESSION[id];
$sess_username=$_SESSION[username];
if ($sess_id<>session_id() or $sess_username=="")
{
echo "กรุณา Login ";
echo "<meta http-equiv=\"refresh\" content=\"3;URL=login.php\" target=mainFrame\">";
exit();
}
?>

5. หลังจากการใช้งานระบบทุกครั้งจะต้อง logout ออกทุกครั้ง เพื่อเป็นการล้าง session ออกจากความจำของเครื่องเพื่อป้องกันคนอื่นมาใช้งานเครื่องเราต่อ ตัวอย่างโค้ด logout.php ด้านล่างเลยครับ

<?php
session_start();
session_destroy();
header("Location: login.php");
?>

ลองนำไปประยุกต์ใช้กันน่ะครับ

Read more >>

23 ก.ค. 2555

PHP กับการทำ form login อย่างง่าย

บทความนี้จะขออธิบายเรื่องของการทำระบบ login โดยใช้ภาษา php ในการเขียนโค้ด php ซึ่งการทำระบบ login ส่วนใหญ่จะใช้ในกรณีที่เราทำระบบขึ้นมาระบบหนึ่งแล้วต้องการให้ผู้ใช้งาน login เข้าระบบทุกครั้งที่เข้าใช้งาน เพื่อป้องกันข้อมูล หรือแสดงตัวตนของผู้ใช้งานก่อน สำหรับหลักการก็ง่าย ๆ ครับ คือ
          1. ทำ form login ขึ้นมา form หนึ่ง เพื่อให้ผู้ใช้งานกรอกข้อมูล หน้าตาก็จะง่าย ๆ ละกันส่วนโค้ดก็ด้านล่างเลย
ตัวอย่าง code ชื่อไฟล์ login.php

<form name="form1" method="post" action="bcheck.php">
      <table width="300" height="27" border="0" align="center" cellpadding="0" cellspacing="10">
<tr>
<td>รหัสผู้ใช้งาน</td>
<td>
  <div align="center">
    <input type="text" name="user">
  </div></td>
</tr>
<tr>
<td>รหัสผ่าน</td>
<td>
  <div align="center">
    <input type="password" name="pass">
  </div></td>
</tr>
<tr>
<td colspan="2"><p align="center"><br>
  <input type="submit" name="Submit" value="ตกลง">
  &nbsp;
  <input type="reset" name="Submit2" value="ยกเลิก">
  </p>
  </td>
</tr>
</table>
</form>

          2. ให้จัดทำฐานข้อมูลเพื่อจัดเก็บรหัสผู้ใช้งาน และรหัสผ่าน ในบทความนี้ผมใช้ MS Access เป็นฐานข้อมูลน่ะครับ
          3. สร้างโค้ดเพื่อตรวจสอบข้อมูลจากฐานข้อมูล ซึ่งผมใช้โค้ด php ในการตรวจสอบ วิธีตรวจสอบก็คือ เมื่อผู้ใช้งานกรอกรหัสผู้ใช้งาน และรหัสผ่าน พอกดตกลงแล้วให้ไปที่หน้า check.php เพื่อตรวจสอบว่ามีข้อมูลในฐานเราหรือเปล่าถ้าไม่มีก็ให้มีข้อความเตือนขึ้นมา แต่ถ้ามีก็ให้ไปหน้าหลักของระบบ ตัวอย่างโค้ดก็ด้านล่างครับ

<?php
$dsn = "login";// กำหนดชื่อ DSN
$user_name ="";// กำหนดชื่อล็อกอิน
$pass_word ="";// กำหนดรหัสผ่าน
$connect = odbc_connect($dsn, $user_name, $pass_word) or die("ติดต่อ DSN ไม่ได้");
$sql = "SELECT * FROM user where username = '$user' and  password = '$pass' ";
$exec = odbc_exec($connect, $sql);// เริ่มเอ็กซิคิวต์คำสั่ง SQL
$Num_fields = odbc_num_fields($exec);// ตัวแปรจำนวนฟิลด์
$sql_count = "SELECT Count(user.username) AS CountOfusername
FROM [user]
WHERE (((user.username)='$user') AND ((user.password)='$pass'))";
$exec_count = odbc_exec($connect, $sql_count);// เริ่มเอ็กซิคิวต์คำสั่ง SQL
$num_rows = odbc_result($exec_count, 1);// ตัวแปรจำนวนเรกคอร์ด
if(empty($num_rows))
{
echo"<br><center>user หรือ password ไม่ถูกต้อง</center></br>";
}
else
{
echo "<meta http-equiv=\"refresh\" content=\"3;URL=check.php\" target=_self\">";
}
odbc_close($connect);// ปิดการเชื่อมต่อ
?>

ลองนำไปใช้ดูน่ะครับมีปัญหาก็ถามได้ครับ ไว้คราวหน้าผมจะเอาโค้ด php ในการ login อีกแบบหนึ่งมาให้ดูซึ่งจะซับซ้อนกว่าและมีการป้องกันความปลอดภัยกว่าที่ดีกว่า
Read more >>

20 ก.ค. 2555

การทำ form ให้เลือกที่ radio buttom ก่อนถึงจะใส่ข้อมูลใน text field ได้

ใครเคยเขียนโค้ด php ทำ form ที่ให้ผู้ใช้งานบันทึกข้อมูลแล้วมีให้เลือกตรง radio buttom ไหมครับ แล้วเคยเจอปัญหาไหมว่าบางครั้งเราทำทั้ง radio buttom และ text field ในตัวเลือกเดียวกัน แต่ผู้ใช้งานบางคนเลือกแค่ radio buttom แต่ไม่ใส่ข้อมูลใน text field บางคนใส่ข้อมูลใน text field แต่ไม่เลือก radio buttom แล้วเราจะมีวิธีเขียน code ป้องกันยังไง ลองอ่านบทความนี้ดูครับ ก่อนอื่นดูรูปด้านล่างครับเพื่อจะได้ไม่งงกัน

คราวนี้มาดูโค้ดตัวอย่างกันครับ

<body>
<form id="form" name="form" method="post" action="add1.php" >
  <table width="100%" border="2" cellpadding="10" cellspacing="0" bordercolor="#000099">
    <tr>
      <td><strong>การดำเนินการ</strong><br />
        <input name="case1" type="radio" id="rdo2" onclick="document.form.case11.disabled=true;" value="กรณีที่ 1" />
        กรณีที่ 1
        <br />
        <input name="case1" type="radio" id="rdo3" onclick="document.form.case11.disabled=true;" value="กรณีที่ 2" />
        กรณีที่ 2<br />
        <input name="case1" type="radio" id="rdo4" onclick="document.form.case11.disabled=true;" value="กรณีที่ 3" />
        กรณีที่ 3<br />
        <input name="case1" type="radio" id="rdo5" onclick="document.form.case11.disabled=false;" value="อื่นๆ" />
        อื่น ๆ โปรดระบุ 
      <input  type="text" id="case11" size="60"  name="case11" disabled /></td>
    </tr>
  </table>
  <br />
  <p align="center">
    <input type="submit" name="Submit" value="บันทึก" />
    &nbsp;
    <input type="reset" name="Submit2" value="ยกเลิก" />
  </p>
</form>
</body>

จากโค้ดตัวคำสั่งหลักที่สำคัญก็คือตัวหนังสือสีแดงที่ใช้ onclick เข้ามาช่วย หลักการง่าย ๆ คือถ้าเราเลือกที่ช่อง กรณี 1 - กรณี 3 ช่อง อื่น ๆ โปรดระบุ ก็จะเป็น disabled แต่ถ้าเลือกที่ช่อง อื่นๆ ช่อง อื่น ๆ โปรดระบุ ก็จะเป็น abled ลองนำไปประยุกต์ใช้ดูน่ะครับ หวังว่าโค้ดตัวนี้คงเป็นประโยชน์กับทุกคน



Read more >>

19 ก.ค. 2555

การทำ jump menu เพื่อเปิดหน้าต่างใหม่


บทความ php นี้ขอพูดถึง jump menu ซึ่งเชื่อว่าหลายคนเคยใช้มากันบ้านแล้ว แต่เคยสงสัยหรือมีปัญหากันบ้างไหมว่าทำไมพอเวลาเลือกรายการใน jump menu เพื่อเปิดหน้าต่างใหม่นั้น มันจะเปิดแบบ target เป็นแบบ _blank ซึ่งบางครั้งมันจะไม่ค่อยสะดวกต่อการใช้งาน มันจะเปิดแบบ target เป็นแบบ _self ได้ไหม ก็ต้องได้สิครับเรามาดูโค้ดปกติก่อนนะครับ ผมขอเป็นแบบโค้ด php น่ะ


<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
<title>Untitled Document</title>
<script type="text/JavaScript">
<!--
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}
//-->
</script>
</head>

<body>
<form name="form1" id="form1">
  <select name="menu1" onchange="MM_jumpMenu('parent',this,0)">
   <option selected="selected">ระบุ</option>
        <option value="http://www.google.com">google</option>
  </select>
</form>
</body>

จาก code ด้านบนที่เป็นตัวสีแดงจะเป็นการทำงานในส่วนของการเปิดหน้าต่างใหม่ เราก็แก้ไขเป็นโค้ดด้านล่างนี้แทน
onchange="window.open(this.options[this.selectedIndex].value,'_blank')"
คราวนี้เราก็จะได้ jump menu ที่เปิดหน้าต่างใหม่เป็นแบบ _self แล้วครับ

Read more >>