วันเสาร์ที่ 30 สิงหาคม พ.ศ. 2557

การสร้าง webboard ด้วย PHP MySQL ตอนที่ 6 การแก้ไข-ลบกระทู้ และ การแก้ไข-ลบความคิดเห็น


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

วันศุกร์ที่ 22 สิงหาคม พ.ศ. 2557

Javascript นับตัวอักษร แบบรวมช่องว่างและไม่รวมช่องว่าง


     วันนี้มีโค๊ดของ Javascript ที่ฝึกทำเล่นๆมานำเสนอครับ เป็นโค๊ดง่ายๆที่เอาไว้ใช้ตรวจนับจำนวนตัวอักษรที่เรากรอก หรือข้อความต่างๆที่เราต้องการรู้จำนวนตัวอักษรที่แท้จริง เผื่อเอาไว้เป็นเครื่องมือสำหรับทำ SEO ครับ เพื่อจะได้ตรวจสอบบทความของเรามีขนาดตัวอักษรตรงกับทาง Google กำหนดหรือป่าว โค๊ดไม่มีอะไรมากครับ  ท่านสามารถนำไปประยุกต์ได้ตามต้องการ

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>นับจำนวนตัวอักษรด้วย Java Script แบบรวมช่องว่างและไม่รวมช่องว่าง</title>
<style type="text/css">
body{
font-family:Tahoma, Geneva, sans-serif;
font-size:12px; 
}
</style>
<script type="text/javascript">
 function countTextJs1(){//ฟังก์ชั่นนับจำนวนตัวอักษรรวมช่องว่าง
  var txtForJs1=document.getElementById('txtForJs1').value;
  var countTxt=txtForJs1.length;
    document.getElementById('rs_txtForJs1').innerHTML=countTxt
 }
 function countTextJs2(){//ฟังก์ชั่นนับจำนวนตัวอักษรไม่รวมช่องว่าง
  var txtForJs2=document.getElementById('txtForJs2').value;
  var countTxtNull=0;
  var countTxt=0;
  try{
   countTxtNull=txtForJs2.match(/\s/g).length;//นับจำนวนช่องว่าง
  }catch(e){}
  countTxt=txtForJs2.length-countTxtNull;//จำนวนตัวอักษรทั้งหมด-จำนวนช่องว่าง=จำนวนตัวอักษรไม่รวมช่องว่าง
    document.getElementById('rs_txtForJs2').innerHTML=countTxt
 }
</script>
</head>

<body>
<div>
ป้อนตัวอักษร (รวมช่องว่าง) <input name="txtForJs1" id="txtForJs1" type="text" size="100" onkeyup="countTextJs1()" /> <span id="rs_txtForJs1">0</span>
</div>
<br />
<div>
ป้อนตัวอักษร (ไม่รวมช่องว่าง) <input name="txtForJs2" id="txtForJs2" type="text" size="100" onkeyup="countTextJs2()" /> <span id="rs_txtForJs2">0</span>
</div>
</body>
</html>

วันพฤหัสบดีที่ 14 สิงหาคม พ.ศ. 2557

SQLite เจอปัญหา database disk image is malformed



     ผมเจอปัญหานี้ใน SQLite ครับ เพราะใช้คำสั่ง Insert Multi Record (เพิ่มข้อมูลหลายๆเรคคอร์ด โดยการวนลูป) พอจะแก้ไขข้อมูล ทำไม่ได้ขึ้นเออเร่อ database disk image is malformed  ทำเอางงอยู่เหมือนกัน เป็นงานเร่งซะด้วย ทำให้ไม่สามารถแก้ไขหรือลบข้อมูลเดิมได้ แต่สามารถเพิ่มข้อมูลใหม่ แก้ไขข้อมูลใหม่ ลบข้อมูลใหม่ได้ ข้อมูลเก่าหรือข้อมูลเดิมที่เพิ่มเข้าก่อนหน้าจะเจอปัญหานี้ ไม่สามารถแก้ไขหรือลบได้
     วิธีแก้ไขปัญหาก็เสิร์ทดูในเว็บต่างประเทศ เห็นเขาบอกให้ใช้คำสั่ง .mode insert ฯลฯ ก็ใช้ไม่ได้ผล ลองมาหมดทุกวิธี จนต้องคิดวิธีแก้ปัญหาด้วยตัวเอง คิดไปคิดมา วิธีแก้ปัญหามันช่างง่ายแสนง่าย เพราะไปเสียเวลากับวิธีแก้ปัญหาของคนอื่น

วิธีแก้ปัญหานะครับ

1.Export Database ที่มีปัญหาออกมาก่อน โดยใช้โปรแกรม SQLite Manager ซึ่งเป็น AddOn ของ Firefox ให้ติดตั้งให้เรียบร้อย วิธีใช้งานก็ดูตามนี้ http://php-for-ecommerce.blogspot.com/2013/06/sqlite-php.html  ให้เปิด Database เจ้าปัญหาออกมาก่อน และไปที่เมนู Database เลือก Export Database ดังรูป


จะได้ไฟล์ .sql ให้เราSaveเก็บไฟล์ไว้ตรงไหนก็ได้ ดังรูป

Reset Dreamweaver ให้เป็นค่าเริ่มต้น


ปัญหานี้เจอมากับตัวเลยครับ ทำให้เข้าใจผิดว่าไปเผลอกดSetค่าอะไรกับDramweaverของเราหรือป่าว ทำให้ไม่สามารถSaveไฟล์งาน สร้างไฟล์ใหม่ (New...) หรือใช้คุณสมบัติ Undo,Redo ไม่ได้
ปัญหานี้เกิดจากความผิดพลาดของ Cache Dramweaverเองครับ วิธีแก้ก็คือ

1.ถ้าหากคุณกำลังเปิดโปรแกรมDreamweaverอยู่ ให้ปิดโปรแกรมDramweaverก่อนครับ
2.เปิดFolderที่เก็บไฟล์ cache ของDreamweaver ตามPathนี้
C:\Documents and Settings\ชื่อUserของคุณ\Application Data\Adobe\Dreamweaver CS4\en_US\Configuration (ผมใช้ Dreamweaver เวอร์ชั่น 4 ครับ) จะเห็นไฟล์ชื่อ  WinFileCache-xxx.dat ในเครื่องของเรา (xxx คือรหัสที่ Dreamweaver กำหนดให้ครับ )
3. ลบไฟล์ WinFileCache-xxx.dat แล้วเปิด Dreamweaver อีกครั้งก็ใช้งานได้ปกติแล้วครับ

เพิ่มเติมสำหรับผู้ที่ใช้งานระบบปฏิบัติการ Window 8,8.1 ให้เปิด Folder Options เป็น Show hiden files, Folder  and drives ก่อนนะครับ แล้วเข้าไปที่ C:\Users\ชื่อ user\AppData\Roaming\Adobe\โฟลเดอร์ Dreamweaver ของคุณ \en_US\Configuration  แล้วลบไฟล์ WinFileCache-xxx.dat ออก หรือจะลบโฟลเดอร์ Dreamwearver ทิ้งทั้งหมดก็ได้ครับ แล้วมันจะสร้างโฟลเดอร์ให้เราใหม่ แต่เวลาเปิดเข้า Dreamweaver ครั้งแรกจะโหลดช้านิดหน่อย เพราะต้องรอให้Updateแคชก่อนครับ

วันอังคารที่ 12 สิงหาคม พ.ศ. 2557

การสร้าง Webboard ด้วย PHP MySQL ตอนที่ 5 แสดงกระทู้,ตั้งกระทู้,ตอบกระทู้

 
     หลังจากที่เราได้หน้าโฮมเพจมาแล้ว จากที่ได้สอนในบทความก่อนหน้า (สอนทำ Webboard ด้วย PHP MySQL ตอนที่ 4 เพิ่ม/แสดง/ลบ/แก้ไข หมวดกระทู้ และแสดงหมวดกระทู้ในหน้าโฮมเพจ  ) ต่อไปจะเป็นส่วนหน้าแสดงกระทู้ต่อจากหน้าหลักที่แสดงหมวดของกระทู้ก่อน ซึ่งหน้าแสดงกระทู้จะแสดงกระทู้ในหมวดนั้นๆที่เราคลิกเลือกจากหน้าหลักครับ จากนั้นในหน้าแสดงกระทู้ สามารถให้สมาชิกเข้าไปตั้งกระทู้หรือตอบกระทู้ได้ สำหรับบุคคลทั่วไป สามารถเข้ามาอ่านเนื้อหาของกระทู้ได้เท่านั้น

     สำหรับไฟล์ที่ใช้ในบทความนี้ จะมีอยู่ 3 ไฟล์ คือ showboard.php (แสดงกระทู้จากหมวดกระทู้ที่เลือกจากเว็บหลัก (Home Page)) , board_add.php (ตั้งกระทู้) , viewboard.php (แสดงเนื้อหากระทู้ และสามารถแสดงความคิดเห็น(ตอบกระทู้)ได้จากหน้านี้)

วันพฤหัสบดีที่ 7 สิงหาคม พ.ศ. 2557

สอนทำ Webboard ด้วย PHP MySQL ตอนที่ 4 เพิ่ม/แสดง/ลบ/แก้ไข หมวดกระทู้ และแสดงหมวดกระทู้ในหน้าโฮมเพจ

     บทความนี้จะสอนเขียนโค๊ด จัดการกับหมวดหมู่กระทู้ของ Webboard กันครับ เพื่อนำข้อมูลของหมวดกระทู้ มาแสดงผลในหน้าเว็บหลัก หรือหน้าโฮมเพจของเรานั่นเอง ตามที่ผมได้ออกแบบไว้ตั้งแต่ตอนที่ 1 บทความนี้จะสอนในส่วนของการ เพิ่ม ,ลบ,แก้ไข ,แสดงหมวดกระทู้ ซึ่งจะเป็นส่วนจัดการของผู้ดูแลระบบ สมาชิกไม่สามารถเข้ามาจัดการในส่วนนี้ได้

1.เริ่มกันที่ไฟล์แรกคือ ไฟล์ category_add.php  เป็นไฟล์สำหรับให้แอดมินเพิ่มข้อมูลหมวดกระทู้  ให้สร้างไฟล์นี้ไว้ตำแหน่งเดียวกับไฟล์ index.php ให้พิมพ์คำสั่งดังนี้

<?php
session_start();
require('check_admin.php');
if(!empty($_POST['btSave'])){//มีการคลิกที่ปุ่มบันทึก
    require('bin/connectdb.php');//เรียกไฟล์เชื่อมต่อกับฐานข้อมูล
    $msgError='';
    if(!empty($_POST['cg_name'])){
        $cg_name=$_POST['cg_name'];//ชื่อหมวด
        $cg_des=$_POST['cg_des'];//คำอธิบายหมวด
  $cg_order=$_POST['cg_order'];//เรียงลำดับการแสดงผล
  mysql_query("INSERT INTO tbl_category(cg_name,cg_des,cg_order) VALUES('$cg_name','$cg_des','$cg_order')");              
    }else{
        $msgError.="กรุณากรอกชื่อหมวดกระทู้ด้วย <br>";
    }
    if(empty($msgError)){
  //หากสมาชิกพิมพ์ข้อมูลถูกต้อง ให้Redirect หน้าไปที่ไฟล์ category.php
        header("Location:category.php");
    }else{
  //หากกรอกข้อมูลไม่ถูกต้อง ให้สร้างตัวแปร session มารับค่าเพื่อแจ้งให้ทราบถึงปัญหาที่เกิดขึ้น
        $_SESSION['message_error']=$msgError;
    }
}
?>
<html>
<head>
        <?php require('head.php'); ?>
        <link rel="stylesheet" type="text/css" href="btvalidate/dist/css/bootstrapValidator.min.css"/>
        <script type="text/javascript" src="btvalidate/dist/js/bootstrapValidator.min.js"></script>
        <title>เพิ่มหมวดกระทู้</title>
    </head>
    <body>
        <?php require('menu.php'); ?>
        <div class="container">
            <?php require('header.php'); ?>
            <div class="row ws-content">
                <div class="col-md-4  col-sm-4 col-md-offset-4 col-sm-offset-4">
                    <h1>เพิ่มหมวดกระทู้</h1>
                    <?php
                    if (!empty($_SESSION['message_error'])) {
      //แสดงปัญที่เกิดขึ้นจากการไม่กรอกชื่อหมวดกระทู้
                        ?>
                        <div class="alert alert-danger" role="alert">
                            <?php echo $_SESSION['message_error']; ?>
                        </div>
                        <?php
                        $_SESSION['message_error'] = '';
                    }
                    ?>
                    <form  method="post" enctype="multipart/form-data" id="categoryForm" name="categoryForm" action="">
                        <div class="form-group">
                            <label for="Category Name">ชื่อหมวดกระทู้</label>
                            <input type="text" class="form-control" id="cg_name" name="cg_name" placeholder="ชื่อหมวดกระทู้">
                        </div>
                        <div class="form-group">
                            <label for="Category Description">คำอธิบาย</label>
                            <textarea class="form-control" id="cg_des"  name="cg_des" placeholder="คำอธิบายหมวดกระทู้" rows="5"></textarea>
                        </div>
                        <div class="form-group">
                            <label for="Category Order">เรียงลำดับ</label>
                            <input type="text" class="form-control" id="cg_order" name="cg_order" style="width:20%;" value="1">
                        </div>
                       
                        <div class="form-group">
                        <input type="submit" class="btn btn-primary" name="btSave" value="บันทึก" >
                        </div>
                    </form>
                </div>
            </div>
            <?php require('footer.php'); ?>
        </div>
        <script>
           $(document).ready(function() {//คำสั่งเช็ค การกรอกชื่อหมวดกระทู้ ภาษา Javascript โดยใช้ BootstrapValidator ปลั๊กอิน
                $('#categoryForm').bootstrapValidator({
                    feedbackIcons: {
                        valid: 'glyphicon glyphicon-ok',
                        invalid: 'glyphicon glyphicon-remove',
                        validating: 'glyphicon glyphicon-refresh'
                    },
                    fields: {
                        cg_name: {
                            validators: {
                                notEmpty: {
                                    message: 'กรุณากรอก ชื่อหมวดกระทู้ ด้วย'
                                }
                            }
                        }
                    }
                });
            });
        </script>    
    </body>
</html>