2011-04-12 58 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”。这是将您的转换舍入为整数值。