2011-04-12 63 views
1

我一直在努力工作一個簡單的基於窗體的溫度轉換器,但我目前正在獲得一個白色的屏幕,我看不出有什麼問題的代碼。此外,任何有關最佳實踐的想法/建議都非常受歡迎!運行PHP溫度轉換器的問題

<?php // convert.php 

if (isset($_POST['temperature'])) 
    $temp = sanitize_string($_POST['temperature']); 

if (isset($_POST['scale'])) 
{ 
    if ($_POST['scale'] == 'fah') 
     $conv = 'fah'; 
     $output = intval((5/9) * ($temp - 32)); 
    elseif ($_POST['scale'] == 'cel') 
     $conv = 'cel'; 
     $output = intval((9/5) * ($temp + 32)); 
    else 
     $output = ''; 
} 
?> 

<html> 

<head> 
    <title>Temperature converter</title> 
</head> 

<body> 
    <?php 
    if (isset($_POST['submitted']) and isset($conv)) 
    { 
     if ($conv == 'fah') 
      print("$temp degrees Fahrenheit is $output degrees Celcius"); 
     elseif ($conv == 'cel') 
      print("$temp degrees Celcius is $output degrees Fahrenheit"); 
    } 
    ?> 

<form method="post" action="convert.php"> 
    <label>Temperature <input type="text" name="temperature"></label> 
    <label>Celcius <input type="radio" name="scale" value="cel"></label> 
    <label>Fahrenheit <input type="radio" name="scale" value="fah"></label> 
    <input type="hidden" name="submitted" value="yes"> 
    <input type="submit"> 
</form> 
</body> 

</html> 

<?php 
print_r($_POST); 

function sanitize_string($var) 
{ 
    $var = stripslashes($var); 
    $var = htmlentities($var); 
    $var = strip_tags($var); 
    return $var; 
} 
?> 
+1

打開php.ini中的錯誤報告。 – 2011-04-12 14:43:41

回答

4

你忘了使用在內部大括號如果/ elseif的上線11.應該如下所示:

if (isset($_POST['scale'])) 
{ 
    if ($_POST['scale'] == 'fah') { 
     $conv = 'fah'; 
     $output = intval((5/9) * ($temp - 32)); 
    } 
    elseif ($_POST['scale'] == 'cel') { 
     $conv = 'cel'; 
     $output = intval((9/5) * ($temp + 32)); 
    } 
    else 
     $output = ''; 
} 

儘量避免速記如果語法,你可以留下關閉大括號。

+0

我第一眼看不到它(+1) – 2011-04-12 14:43:38

1

您的$conv變量僅在這些if語句中可見。添加在上面的聲明權:

<?php 
$conv = null; 
// your code 

再檢查if (isset($_POST['submitted']) && $conv !== null)

編輯:作爲@halfdan說,你缺少大括號,因爲要在if-else語句執行多個語句-clauses。

+0

這似乎沒有什麼區別,$ is需要聲明isset($ var)的工作嗎? – persepolis 2011-04-12 14:46:43

+0

你試過了嗎?範圍是範圍,如果你只在這些if語句中定義它,'isset($ conv)'總會在外面返回'false' ... – 2011-04-12 14:50:54

+0

他對$ conv是正確的,沒有注意到它自己(+1)。 – halfdan 2011-04-12 15:26:12

1

您有不匹配的條件。

由於解析腳本失敗並且您關閉了錯誤報告,因此您會看到空白屏幕。

+0

啊,我覺得有些奇怪,感謝指針。 – persepolis 2011-04-12 14:49:51

0

你的公式也是錯誤的。 98.6度F轉換爲37 C 但32攝氏度轉換爲115 F.

有些東西肯定是錯誤的。

首先,從華氏溫度轉換爲攝氏溫度,然後再加上32,然後再乘以9/5。那是錯的。你必須先將華氏溫度乘以9/5;然後加上32.

所以這一行: $ output = intval((9/5)*($ temp + 32)); 實際上應該是 $ output = intval((9/5)*($ temp)+ 32);

我不知道你希望你的轉換有多確切,但我也避免使用「intval」。這是將您的轉換舍入爲整數值。