2014-02-18 185 views
0

我希望你能幫我解決我的問題。我的驗證表單的腳本(檢查文本框是否爲空,如果它是一個數字;注意:在我的區域中,我們使用十進制數字逗號不指向,PHP只能使用小數點)不能正常工作。 HTML:if-else語句不運行

... 
<form action="http://localhost/kalkulacka.php" method="post" name="formular"> 
    <table> 
    <tr> 
     <td>1 dávka(g):</td> 
     <td><input type="text" name="davka" maxlength="7" size="7"></td> 
    </tr> 
    <tr> 
     <td>Bielkoviny v 1 dávke(g):</td> 
     <td><input type="text" name="bielkoviny" maxlength="7" size="7"></td> 
    </tr> 
    <tr> 
     <td>Sacharidy v 1 dávke(g):</td> 
     <td><input type="text" name="sacharidy" maxlength="7" size="7"></td> 
    </tr> 
    <tr> 
     <td>Balenie(g):</td> 
     <td><input type="text" name="balenie" maxlength="7" size="7"></td> 
    <tr> 
     <td>Cena za balenie(€):</td> 
     <td><input type="text" name="cena" maxlength="7" size="7"></td> 
    </tr> 
    <tr> 
     <td><input type="submit" value="Vypočítaj"></td> 
    </tr> 
    </table> 
</form> 

PHP:

<?php 

$davka=$_POST['davka']; 
$bielkoviny=$_POST['bielkoviny']; 
$sacharidy=$_POST['sacharidy']; 
$balenie=$_POST['balenie']; 
$cena=$_POST['cena']; 
$is_valid=true; 

function vypocitaj($serving, $proteins, $pack, $price) 
{ 
    $proteins_percentage=($proteins/$serving)*100; 
    $price_per_gram=$price/($pack/100*$proteins_percentage); 
    printf("1 gram bielkoviny stoji: %.3f", $price_per_gram); 
} 

if (empty($davka)||empty($bielkoviny)||empty($sacharidy)||empty($balenie)||empty($cena)) 
{ 
    echo "Some boxes are empty!"; 
    $is_valid=false; 
} 
else /*when I remove this whole "else" block, script at least verifies if are boxes empty by if statement above, but when I add this block, it not even verifies if are boxes empty*/ 
{ 
    if (!is_numeric($davka)) 
    { 
     $davka=str_replace(",", ".", $davka); 
     if (!is_numeric($davka) 
     { 
      $is_valid=false; 
     } 
    } 
    if ($is_valid==true && !is_numeric($bielkoviny)) 
    { 
     $bielkoviny=str_replace(",", ".", $bielkoviny); 
     if (!is_numeric($bielkoviny) 
     { 
      $is_valid=false; 
     } 
    } 
    if ($is_valid==true && !is_numeric($sacharidy)) 
    { 
     $sacharidy=str_replace(",", ".", $sacharidy); 
     if (!is_numeric($sacharidy) 
     { 
      $is_valid=false; 
     } 
    } 
    if ($is_valid==true && !is_numeric($balenie)) 
    { 
     $balenie=str_replace(",", ".", $balenie); 
     if (!is_numeric($balenie) 
     { 
      $is_valid=false; 
     } 
    } 
    if ($is_valid==true && !is_numeric($cena)) 
    { 
     $cena=str_replace(",", ".", $cena); 
     if (!is_numeric($cena) 
     { 
      $is_valid=false; 
     } 
    } 
    if ($is_valid) 
    { 
     vypocitaj($davka, $bielkoviny, $balenie, $cena); 
    } 
    else 
    { 
     echo "Only number are accepted!"; 
    } 
} 
?> 

用JavaScript編寫的語法相同的腳本正常工作在JavaScript,但PHP將無法正常工作。當我刪除主「else」語句時,主要的「if」語句起作用,但是當我添加它時,整個代碼都不起作用。當我分別嘗試每個功能時 - 他們工作。

我在此停留了好幾天,我無法動彈。我想知道它不能正常工作的原因。我很欣賞任何建議。謝謝;) 對不起,我的英文。

+0

您正在使用,如果不止一次。你能否在你的代碼中添加註釋來清楚說明你的意思? –

+2

以什麼方式不起作用?變量不是預期值嗎?有錯誤嗎?你有沒有試過簡化你的代碼?例如,在你的'main else'塊中,用一個簡單的'echo'ELSE到達''來代替所有的代碼,看看這段代碼是否已經到達(即你的if條件是否按你期望的方式工作)。 – Etzeitet

+0

我建議你用'isset()' – Martijn

回答

2

我剛剛粘貼代碼到我的IDE它告訴我,有一個缺少右括號:

if (!is_numeric($davka)) 
{ 
    $davka=str_replace(",", ".", $davka); 
    if (!is_numeric($davka) 
         //^missing brace here 
    { 
     $is_valid=false; 
    } 
} 

...應該是:

if (!is_numeric($davka)) 
{ 
    $davka=str_replace(",", ".", $davka); 
    if (!is_numeric($davka)) 
    { 
     $is_valid=false; 
    } 
} 

如果解決該問題,請使用一個語法突出顯示的編輯器...

+0

非常感謝;)最後我可以安然入睡。兩天我搜索了一個密鑰錯誤。我覺得很蠢 – user3320983

+1

@ user3320983那麼,你應該做的下一件事是安裝[Netbeans](https://netbeans.org/),[Sublime](http://www.sublimetext.com/)或其他一些IDE或編輯會立即爲您找到這些錯誤。 – feeela

+0

我會做的。時間對於這些錯誤是如此昂貴 – user3320983