2014-01-13 30 views
0

您好,我正在编写一个用于在MySQL表中插入数据的模块。这很容易,但在我的模块,我收到四个手机号码。第一个是用户的手机号码,另外三个是手机号码。用户的手机号码是必填字段,但是引用不是。这次我通过在PHP中使用isset()empty()函数来检查每个参考手机号码。 但我必须写多个if-else块。像针对mysql插入查询的优化代码

if(isset($_POST['mobileno_1']) && !empty($_POST['mobileno_1'])){ 
     $mobileno1 = $_POST['mobileno_1']; 
    }else{ 
     $mobileno1 = 0; 
    } 
    if(isset($_POST['mobileno_2']) && !empty($_POST['mobileno_2'])){ 
     $mobileno2 = $_POST['mobileno_2']; 
    }else{ 
     $mobileno2 = 0; 
    } 
    if(isset($_POST['mobileno_3']) && !empty($_POST['mobileno_3'])){ 
     $mobileno3 = $_POST['mobileno_3']; 
    }else{ 
     $mobileno3 = 0; 
    } 
    $sql = "INSERT INTO refferencemobile(mobileno, mobile1, mobile2, mobile3) VALUES($mobileno, $mobileno1, $mobileno2, $mobileno3)"; 

是否有任何优化的方式来做到这一点,因此,它可以减少if-else块的数量。

回答

1

像这样的东西可能:

$mobileno3 = (isset($_POST['mobileno_3']) && !empty($_POST['mobileno_3'])) 
    ? $_POST['mobileno_3'] 
    : 0; 

你甚至可以把它变成一个功能。

function GetMobileNo($mobileNo) 
{ 
    return (isset($mobileNo) && !empty($mobileNo)) ? $mobileNo : 0; 
} 

$mobileno3 = GetMobileNo($_POST['mobileno_3']); 
2

empty已经检查变量是否已设置,这样可以简化if语句。

您也可以使用三元条件。这些看起来像:

$someCondition ? 'a' : 'b'; 

这将评估为“A”,如果$someCondition是真实的,“B”,否则。

把这个一起我们可以得到:

//If $_POST['mobileno_1'] isset and has a non false value use $_POST['mobileno_1'] 
    $mobileno1 = !empty($_POST['mobileno_1']) ? $_POST['mobileno_1'] : 0; 
    $mobileno2 = !empty($_POST['mobileno_2']) ? $_POST['mobileno_2'] : 0; 
    $mobileno3 = !empty($_POST['mobileno_3']) ? $_POST['mobileno_3'] : 0; 

正如user1281385在您直接在查询中使用贴值评论中指出。您需要确保这些已经过消毒,或者更好的是,使用准备好的陈述。

+0

+1,但记住一定要mobileno_1 2和3的安全查询字符串也。 – exussum

0

样品/测试代码在这里http://codepad.org/5ybUcmcN

$mobileno1 = getMobileNo($_POST['mobileno_1']); 
$mobileno2 = getMobileNo($_POST['mobileno_2']); 
$mobileno3 = getMobileNo($_POST['mobileno_3']); 

/* example 
$mobileno1 = getMobileNo('abc'); 
$mobileno2 = getMobileNo('111'); 
$mobileno3 = getMobileNo(''); 
*/ 

$sql = "INSERT INTO refferencemobile(mobileno, mobile1, mobile2, mobile3) VALUES($mobileno, $mobileno1, $mobileno2, $mobileno3)"; 

function getMobileNo($mobileNo){ 

    // check for if its set or not OR empty OR not an integer 
    if(!isset($mobileNo) || empty($mobileNo) || !is_int($mobileNo)){ 
     return 0; 
    } 

    return $mobileNo; // valid number 
} 
+1

我会在这里使用ctype_digit而不是is_int,is_int将总是失败,因为后变量是字符串 – exussum

+0

感谢您的信息,也是我的新东西。 – codepiper

+0

避免is_numeric太多,因为它允许小数点和科学计数 – exussum