รบกวนช่วยดู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>";
        }
        }
?>
        
 
  


New Love 11-11-2018 11:10:48

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

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

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 {


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


New Love 11-11-2018 18:40
 ความคิดเห็นที่ 3
การใช้งาน if else คือคำตอบ ตั้งคำถามกับเงื่อนไข เราจะได้คำตอบ
การกระโดดข้ามไปทำอีกเงื่อนไขหนึ่ง แทนที่จะเป็นเงื่อนไขที่เราต้องการ
เป็นไปได้สองกรณีเบื้องต้น เช่น เรากำหนดเงื่อนไขไม่ถูกต้อง หรือ อีกกรณี
ค่าไม่เป็นไปตามเงื่อนไข แต่เราคิดเองโดยยังไม่ได้ตรวจสอบให้ละเอียด และเข้าใจ
ผิดว่าค่าเป็นไปตามเงื่อนไข
 
อย่าง เราปล่อย password ว่าง ทำไมไม่เข้าเงื่อน นั่นก็แสดงว่า password ไม่ได้ว่างอย่าง
ที่เราเข้าใจ จึงไม่เข้าเงื่อนไข
 
<?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 ตัวแปรนั้น
 
การตรวจสอบเงื่อนไขว่าเรากำหนดถูกต้องหรือไม่ ให้กำหนดค่าสมมติให้กับตัวแปร อย่างง่าย
 
<?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 เราถูกต้อง
 
ต่อไป ตรวจสอบค่าของข้อมูลว่าถูกต้องหรือไม่
 
<?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
 
$cus_password = mysqli_real_escape_string($con, md5($_POST['cus_password']));
จะเห็นว่า ค่ามีการใช้งานคำสั่งอื่นมาก่อน และเป็นไปได้ที่ แม้ว่า $_POST['cus_password']
จะเป็นค่าว่าง แต่การใช้งานร่วมกับ md5() ก็อาจจะทำให้ค่าเปลี่ยนไป 
 
<?php

$data ="";
echo md5($data);
// นี่คือค่าผลลัพธ์ ทั้งที่ $data เป็นค่าว่าง แต่การใช้ md5() ทำให้ค่าเปลี่ยนไป
// d41d8cd98f00b204e9800998ecf8427e
 
 
ดังนั้นวิธีการ เราอาจจะทำการตรวสอบข้อมูลก่อน แล้วค่อยจัดรูปแบบ ซึ่งเงื่อนไขนี้
ที่ว่าจัดรูปแบบก่อนค่อยตรวจสอบ หรือตรวจสอบก่อนค่อยจัดรูปแบบ ก็ขึ้นกับเรากำหนด
 
แนวทาง
 
<?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";
    }
}
?>
 
 


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


New Love 12-11-2018 18:52
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ