PHP其他如果方法不起作用?

时间:2014-01-23 01:59:13

标签: php if-statement

你好,我试图在他们支付之后实施支票,检查他们付了多少钱,并用if方法在sql数据库中输入不同的变量。

问题: 问题是所有if方法都返回到第一个选项(插入paid = 1和30days)不确定问题是什么,我的if方法是否被破坏了?有什么问题请解释一下!谢谢!

if(number_format($amount, 2) == 8.00) 
{
    $mysqli = new mysqli(******);
    $stmt = $mysqli->prepare("UPDATE `as_users` SET paid='1', reg_date=CURRENT_TIMESTAMP, end_date=DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) WHERE username = ?");
    $stmt->bind_param('s', $username);
    $stmt->execute();
} elseif (number_format($amount, 2) == 10.00) 
{
    $mysqli = new mysqli(******);
    $stmt = $mysqli->prepare("UPDATE `as_users` SET paid='2', reg_date=CURRENT_TIMESTAMP, end_date=DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) WHERE username = ?");
    $stmt->bind_param('s', $username);
    $stmt->execute();
} elseif (number_format($amount, 2) == 100.00) 
{
    $mysqli = new mysqli(******);
    $stmt = $mysqli->prepare("UPDATE `as_users` SET paid='2', reg_date=CURRENT_TIMESTAMP, end_date=DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL 365 DAY) WHERE username = ?");
    $stmt->bind_param('s', $username);
    $stmt->execute();
}

修改:我尝试使用$amount并尝试使用下拉菜单中的数组名称

array("Basic Package-Monthly", "8.00", "Month", "1", "0", "0"),
array("Premium Package-Monthly", "10.00", "Month", "1", "0", "0"),
array("Premium Package-Annually", "100.00", "Year", "1", "0", "0"),

2 个答案:

答案 0 :(得分:6)

为什么要担心条件语句,让交换机处理它。充分利用您的prepared声明。

$mysqli = new mysqli('******');
$paid = false;
$recurring = false;

switch(number_format($amount, 2)):
    case '8.00':
        $paid = 1;
        $recurring = 30;
        break;
    case '10.00':
        $paid = 2;
        $recurring = 30;
        break;
    case '100.00':
        $paid = 2;
        $recurring  = 365;
        break;
endswitch;

$stmt = $mysqli->prepare("UPDATE `as_users` SET paid=?, reg_date=CURRENT_TIMESTAMP, end_date=DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL ? DAY) WHERE username = ?");
$stmt->bind_param('dis', $paid, $recurring, $username);
$stmt->execute();

答案 1 :(得分:1)

尝试使用

number_format($amount, 2, '.', '')而不是number_format($ amount,2),用于返回没有千位分隔符的英文符号。

  

没有千位分隔符的英文符号

$number = 1234.56;
$english_format_number = number_format($number, 2, '.', '');
  

1234.56

并比较两个浮点值使用BC数学函数

$b = 10.00;
$a = number_format($amount, 2, '.', '');
    bccomp($a, $b)==0  // returns true if both values are 10.00