运行PHP温度转换器时出现问题


Problem running PHP temperature converter

我一直在尝试工作一个简单的基于形式的温度转换器,但我目前得到一个白屏幕,我看不出代码有什么问题。此外,任何关于最佳实践的想法/建议都是非常欢迎的!

<?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;
}
?>

您忘记在第11行内部if/elseif上使用大括号了。它看起来应该像这样:

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 = '';
}
尽量避免使用if-语法,这样可以省略花括号。

您的$conv变量仅在这些if语句中可见。将它的声明添加到顶部:

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

然后检查if (isset($_POST['submitted']) && $conv !== null)

Edit:正如@halfdan所说,您缺少花括号,因为您想在if-else-子句中执行多个语句。

条件不匹配。

你得到一个空白的屏幕,因为解析你的脚本失败,你有错误报告关闭。

你的公式也不对。98.6华氏度转化为37摄氏度但32摄氏度转化为115华氏度

肯定有问题。

首先,将华氏温度转换为摄氏度,在乘以9/5之前加上32。这是错误的。你必须先把华氏温度乘以9/5;然后加上32.

所以这一行:$output = intval((9/5) * ($temp + 32));实际上应该是$output = intval((9/5) * ($temp) + 32);

我不知道你想让你的转换有多精确,但我也会避免使用"interval"。这是将转换四舍五入为整数值。

使用$searchengine查找有关"php白页"的页面,您将得到:

  • http://drupal.org/node/158043
  • http://php.about.com/od/troubleshooting/f/white_page_php.htm