2014-01-23 99 views
0

你好,我試圖執行後,他們支付它檢查他們支付了多少錢,並輸入sql數據庫中的不同變量與if方法。PHP其他如果方法不工作?

問題: 問題是所有的,如果方法返回這個第一個選項(插入支付= 1,30天)不知道是什麼問題,是我的,如果方法破了什麼問題,請解釋一下?!謝謝!

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

你只需要'$ = mysqli的新的mysqli(***** *);'一次,在if語句之上。 –

+0

哦,好吧謝謝羅伯特,你有什麼想法解決問題嗎? – Ghandour

+0

與'number_format($ amount,2)'相同。如果你把結果放在一個變量中,你可以在你的'if'語句中引用這個變量。它具有將數值放在一個位置以便檢查它的額外好處。 –

回答

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(); 
+0

智能方法,但2是每月和100 $版本是每年 – Ghandour

+0

@ user3158844一個小疏忽。上面已經解決了。 – Ohgodwhy

+0

我收到了 致命錯誤:調用成員函數prepare()在一個非對象中(啓動準備語句的行) – Ghandour

1

嘗試使用

number_format($amount, 2, '.', '')代替number_format的($量,2)無千位分隔符返回英語書寫。

english notation without thousands separator

$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 
+0

這也可以解決我的問題問題謝謝! – Ghandour