รบกวนช่วยดูcodeตรวจสอบค่าว่างให้หน่อยครับว่าผิดพลาดตรงไหน
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา รบกวนช่วยดูcodeตรวจสอบค่าว่างให้หน่อยครับว่าผิดพลาดตรงไหน
รบกวนช่วยดูcodeตรวจสอบค่าว่างให้หน่อยครับว่าผิดพลาดตรงไหน
คือ ตาม code ผมต้องการให้มีการตรวจสอบค่าว่าตอน Login น่ะครับ ซึ่งถ้าเป็นในส่วนของ email มีค่าว่าง มันก็จะเตือนขึ้นมาว่า "กรอก email" เเต่พอเป็นในส่วนของ password มีค่าว่าง มันกลับเด้งไปทำตรง else บรรทัดสุดท้ายเลยครับ "Email หรือ Password ไม่ถูกต้อง" ซึ่งผมไม่เเน่ใจว่ามันผิดตรงส่วนไหน<?php
include 'connect.php';
$cus_email = mysqli_real_escape_string($con,$_POST['cus_email']);
$cus_password = mysqli_real_escape_string($con, md5($_POST['cus_password']));
// ตรวจสอบว่าชื่อ Username ไม่เป็นค่าว่างๆ
if ($cus_email == '') {
echo "<script>alert('กรอก Email ');window.location='Login.php';</script>";
} elseif ($cus_password == '') {
echo "<script>alert('กรอก Password ');window.location='Login.php';</script>";
} else {
// ตรวจสอบกับฐานข้อมูลว่า Username และรหัสผ่านถูกต้อง
$sql = "SELECT * FROM customer WHERE cus_email=? AND cus_password=?";
$stmt = mysqli_prepare($con, $sql);
mysqli_stmt_bind_param($stmt, "ss", $cus_email , $cus_password);
mysqli_execute($stmt);
$result_user = mysqli_stmt_get_result($stmt);
if($result_user->num_rows == 1){
session_start();
$row_user = mysqli_fetch_array($result_user,MYSQLI_ASSOC);
$_SESSION['cus_id'] = $row_user['cus_id'];
$_SESSION['cus_status'] = $row_user['cus_status'];
if($_SESSION["cus_status"]==0){ //ถ้าเป็น user ให้กระโดดไปหน้า admin_page.php
header("Location: main1.php");
}elseif ($_SESSION["cus_status"]==1) { //ถ้าเป็น admin ให้กระโดดไปหน้า admin_page.php
header("Location: main2.php");
}elseif ($_SESSION["cus_status"]==2) { //ถ้าเป็น Boss ให้กระโดดไปหน้า admin_page.php
header("Location: main3.php");
}
} else {
echo "<script>alert('Email หรือ Password ไม่ถูกต้อง');window.location='Login.php';</script>";
}
}
?>

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
ความคิดเห็นที่
1
ถ้าไม่จบการทำงานโค้ด php ก็จะรันต่อ ทำให้โค้ดที่อยู่ด้านล่างเข้าเงื่อนไข
ลองเพิ่ม exit; เข้าไปหลังจากแจ้งเตือน แล้วให้หลุดการทำงานส่วนด้านล่าง
เช่น
1 2 3 4 5 6 7 | if ( $cus_email == '' ) { echo "<script>alert('กรอก Email ');window.location='Login.php';</script>" ; exit ; } elseif ( $cus_password == '' ) { echo "<script>alert('กรอก Password ');window.location='Login.php';</script>" ; exit ; } else { |

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

ความคิดเห็นที่
3
การใช้งาน if else คือคำตอบ ตั้งคำถามกับเงื่อนไข เราจะได้คำตอบ
การกระโดดข้ามไปทำอีกเงื่อนไขหนึ่ง แทนที่จะเป็นเงื่อนไขที่เราต้องการ
เป็นไปได้สองกรณีเบื้องต้น เช่น เรากำหนดเงื่อนไขไม่ถูกต้อง หรือ อีกกรณี
ค่าไม่เป็นไปตามเงื่อนไข แต่เราคิดเองโดยยังไม่ได้ตรวจสอบให้ละเอียด และเข้าใจ
ผิดว่าค่าเป็นไปตามเงื่อนไข
อย่าง เราปล่อย password ว่าง ทำไมไม่เข้าเงื่อน นั่นก็แสดงว่า password ไม่ได้ว่างอย่าง
ที่เราเข้าใจ จึงไม่เข้าเงื่อนไข
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php if ( $cus_email == '' ) { echo "1" ; } elseif ( $cus_password == '' ) { echo "2" ; } else { if ( $result_user_num == 1){ echo "3" ; } else { echo "4" ; } } ?> |
ตัวแปรอะไรก็ตาม ที่เรานำมาใช้เป็น if เราต้องรู้ให้แน่ชัดว่า ค่านั่นเป็นค่าที่เราต้องการหรือไม่
โดยการ echo ค่า หรือ var_dump ตัวแปรนั้น
การตรวจสอบเงื่อนไขว่าเรากำหนดถูกต้องหรือไม่ ให้กำหนดค่าสมมติให้กับตัวแปร อย่างง่าย
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php $cus_email = "" ; $cus_password = "" ; $result_user_num = "" ; if ( $cus_email == '' ) { echo "1" ; } elseif ( $cus_password == '' ) { echo "2" ; } else { if ( $result_user_num == 1){ echo "3" ; } else { echo "4" ; } } ?> |
ทดสอบโครงสร้าง if else โดยการเปลี่ยนค่าตัวแปรด้านบน ถ้าเข้าเงื่อนไข ตามที่ต้องการ
แสดงว่าโครงสร้าง if else เราถูกต้อง
ต่อไป ตรวจสอบค่าของข้อมูลว่าถูกต้องหรือไม่
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php $cus_email = "" ; $cus_password = "" ; $result_user_num = "" ; echo $cus_email ; // หรือ var_dump($cus_email); echo $cus_password ; // หรือ var_dump($cus_password); echo $result_user_num ; // หรือ var_dump($result_user_num); if ( $cus_email == '' ) { echo "1" ; } elseif ( $cus_password == '' ) { echo "2" ; } else { if ( $result_user_num == 1){ echo "3" ; } else { echo "4" ; } } ?> |
รูปแบบการตรวจสอบข้างต้น จะทำให้เรารู้ค่าของข้อมูลจริง และเทียบกับการเข้าเงื่อนไข
การตรวจสอบข้างต้นเป็นแนวทางอย่างง่ายเท่านั้น การตรวจสอบข้อมูล ยังมีอีกหลายวิธี
อย่างเช่น เป็นประเภทตัวแปรที่ถูกต้องหรือไม่ ไม่ใช่ค่า null หรือไม่ ตรงนี้ต้องหารความรู้เพิ่มเติม
if(!null()) if(!empty() if(isset() .......
ดูเพิ่มเติม
กลับมาที่คำถาม การที่ทำไมไม่เข้าเงื่อนไข password ว่าง นั่นอาจเป็นได้ว่า ค่า passwrod ไม่ได้
เป็นค่าว่างตามที่เราคิด ให้เราย้อนกลับไปที่ ที่มาของตัวแปร $cus_password
1 | $cus_password = mysqli_real_escape_string( $con , md5( $_POST [ 'cus_password' ])); |
จะเห็นว่า ค่ามีการใช้งานคำสั่งอื่นมาก่อน และเป็นไปได้ที่ แม้ว่า $_POST['cus_password']
จะเป็นค่าว่าง แต่การใช้งานร่วมกับ md5() ก็อาจจะทำให้ค่าเปลี่ยนไป
1 2 3 4 5 6 | <?php $data = "" ; echo md5( $data ); // นี่คือค่าผลลัพธ์ ทั้งที่ $data เป็นค่าว่าง แต่การใช้ md5() ทำให้ค่าเปลี่ยนไป // d41d8cd98f00b204e9800998ecf8427e |
ดังนั้นวิธีการ เราอาจจะทำการตรวสอบข้อมูลก่อน แล้วค่อยจัดรูปแบบ ซึ่งเงื่อนไขนี้
ที่ว่าจัดรูปแบบก่อนค่อยตรวจสอบ หรือตรวจสอบก่อนค่อยจัดรูปแบบ ก็ขึ้นกับเรากำหนด
แนวทาง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php $cus_email = (isset( $_POST [ 'cus_email' ]))?trim( $_POST [ 'cus_email' ]):NULL; $cus_password = (isset( $_POST [ 'cus_password' ]))?trim( $_POST [ 'cus_password' ]):NULL; if ( empty ( $cus_email )) { // เป็นค่าว่าง หรือ NULL echo "1" ; } elseif ( empty ( $cus_password )) { // เป็นค่าว่าง หรือ NULL echo "2" ; } else { $cus_email = mysqli_real_escape_string( $con , $cus_email ); $cus_password = mysqli_real_escape_string( $con , md5( $cus_password )); if ( $result_user_num == 1){ echo "3" ; } else { echo "4" ; } } ?> |

ความคิดเห็นที่
4
ขอขอบคุณสำหรัความรู้เพิ่มเติมน่ะครับ

ขอบคุณทุกการสนับสนุน
![]()