<?php // ดึงรหัสอุปกรณ์มาโชว์ใน select $sql = " SELECT * FROM tb_device where section='".$_SESSION['section']."' "; $q = mysqli_query( $con, $sql ); echo "<select name='code'>"; while( $f = mysqli_fetch_assoc( $q ) ) { echo "<option value='".$f['name']."'>".$f['name']."</option>"; } echo "</select>"; ?>
<?php // ดึงรหัสอุปกรณ์มาโชว์ใน select $sql = " SELECT *, turslc , case when fielduse='ใช้แล้ว' then 'disabled' else '' end disx FROM tb_device where section=? "; $stm=$con->prepare($sql); $stm->bind_param('s', $_SESSION['section']); $stm->execute(); ?> <select name="code"> <?php while( $f = $stm->fetch_object() ) { ?> <option value="<?=$f->name?>" <?=$f->disx?> ><?=$f->name?></option> <?php } ?> </select>
$idcard=$_POST['idcard']; // ค่าที่ได้รับจาก textbox idcard $idcard=mysqli_real_escape_string($_SESSION['idcard']);
Quote:Is mysqli_real_escape_string safe?
วิธีป้องกัน ผมใช้ code นี้ แปะไว้ส่วนบนของไฟล์ php ทุกไฟล์ # ป้องกัน sql injection จาก $_GET foreach ($_GET as $key => $value) { $_GET[$key]=addslashes(strip_tags(trim($value))); } if ($_GET['id'] !='') { $_GET['id']=(int) $_GET['id']; } extract($_GET); บรรทัดที่ 2 หมายความว่า ทุกๆค่าที่ถูกส่งมาด้วยการ GET ให้ตัดช่องว่างด้านหน้าและด้านหลัง แล้วตัดเครื่องหมาย html ออก คำสั่ง strip_tags นี้ช่วยให้ การแทรก code javascipt ทำงานผิดพลาด เช่นมีคนแทรก javascript มาว่า <script>alert('555');</script> คำสั่ง strip_tags จะทำเหลือแต่ข้อความ alert('555') ซึ่งทำงานไม่ได้ เพราะไม่ได้ระบุว่าเป็น javascript หลังจากนั้นก็ addslashes เข้าไปอีกชั้นนึง ถ้ามีคนส่งค่า 1'or'1=1 เข้ามา จะถูกแปลงเป็น 1'or'1=1 ทำให้คำสั่ง SQL ล้มเหลว ประมวลผลผิด และตบท้ายด้วยการเช็คค่า id ถ้าไม่ใช่ช่องว่าง ให้แปลง id เป็น integer เท่านั้น และปิดด้วยคำสั่ง extract($_GET) เพื่อรับค่าจากการ GET ทั้งหมด วิธีนี้ป้องกัน SQL Injection จากทุกหน้าที่รับค่าด้วยการ GET ส่วนหน้าไหนที่มี form submit รับค่าจากการ POST ก็ใช้หลักการเดียวกัน ยังมีอีกส่วนที่เราต้องป้องกัน คือ การกรอก user, password ตัวแปรที่รับค่าจะต้อง addslashes เข้าไปด้วย เช่น $username = addslashes(trim($_POST['user'])); $password= addslashes(trim($_POST['pwd']));
$sql='select * from tbname where id=? or name=?'; // เครื่องหมาย ? กำหนดตำแหน่งตัวแปร $stm=$con->prepare($sql); // เตรียม statment $stm->bind_param('is', $_POST['id'], $_POST['name'] ); // นำตัวแปรมาใส่ตามตำแหน่ง และรูปแบบ // parameter รูปแบบ // s = แทนที่ด้วย string // i = แทนทีี่ด้วย interger // ตัวอย่างพอสังเขป อื่นๆ อ่านจาก doc เอานะ $stm->execute(); // สั่งรันคิวรี่ while( $ro=$stm->fetch_object() ){ // $stm เป็น object รวมคำสั่งใช้งาน แทน result จากการคิวรี่ }
เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง