作者todo70192 (123 team)
看板PHP
标题[请益] 三角函数 输入正负数(整数跟小数)结果对 输入0却怪怪的
时间Thu May 19 14:26:47 2016
sincostan.php
程式码如下:
<!doctype html>
<html>
<head>
<style>
.press { width:162px; }
.error { color:#F00; }
</style>
<meta charset="utf-8">
<title>三角函数</title>
</head>
<body>
<?php
$scaleErr="";
settype($scale,"double"); //scale变成double型态
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["scale"])) {
$scaleErr = "忘了写倍数了";
}
else {
$scale=test_input($_POST["scale"]);
$scale=$scale*pi();
//倍数可以是小数或整数
}
}
function test_input($data) {
if(!is_string($data)) $data='scale';
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<form method="post" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
请输入倍数:<input type="text" name="scale" class="press">
<span class="error">* <?php echo $scaleErr;?></span>
<br><br><input type="submit" name="submit" value="送出"><br>
</form>
<?php
if($scale!=0){
echo "<br>";
echo "sin(".$scale.")=".sin($scale)."<br>";
echo "cos(".$scale.")=".cos($scale)."<br>";
echo "tan(".$scale.")=".tan($scale)."<br>";
echo "cot(".$scale.")=".(1/tan($scale))."<br>";
echo "sec(".$scale.")=".(1/cos($scale))."<br>";
echo "csc(".$scale.")=".(1/sin($scale))."<br>";
}
else {
$scale=@($scale==0);
echo "$php_errormsg";
}
?>
</body>
</html>
假设我倍数输入0.666666666666666
结果如下:
sin(2.09439510239)=0.866025403784
cos(2.09439510239)=-0.5
tan(2.09439510239)=-1.73205080757
cot(2.09439510239)=-0.57735026919
sec(2.09439510239)=-2
csc(2.09439510239)=1.15470053838
结果正确
可是我输入0
结果是* 忘了写倍数了
拜托各位看看哪里有问题
感激不尽
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.130.165
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1463639210.A.1C1.html
1F:→ bibo9901: 恭喜你踩到php的#1地雷: empty("0") === true 05/19 14:29
2F:→ MOONRAKER: 学php第一件事就是记起来intval() floatval() strval() 05/19 14:39
3F:→ xdraculax: get post 有没输入用 == "" 检查(阵列除外) 05/19 18:07
4F:推 LaPass: isset($_POST["scale"]) 05/20 12:57
5F:→ todo70192: 楼上 isset($_POST["scale"])要写在哪里呢? 05/21 09:05
6F:→ tkdmaf: 你code是抄来的吗?怎麽会连要写在那都不知道? 05/21 10:58
7F:→ todo70192: 不是 我参考人家写的 然後再修改 05/21 11:15
程式码如下(有isset()这个函数):
<!doctype html>
<html>
<head>
<style>
.press { width:162px; }
.error { color:#F00; }
</style>
<meta charset="utf-8">
<title>三角函数</title>
</head>
<body>
<?php
$scaleErr="";
settype($scale,"double"); //scale变成double型态
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["scale"])) {
$scaleErr = "忘了写倍数了";
}
else {
$scale=test_input($_POST["scale"]);
if(isset($_POST["scale"])){
$scale=$scale*pi();
//倍数可以是小数或整数
}
}
}
function test_input($data) {
//if(!is_string($data)) $data='scale';
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<form method="post" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
请输入倍数:<input type="text" name="scale" class="press">
<span class="error">* <?php echo $scaleErr;?></span>
<br><br><input type="submit" name="submit" value="送出"><br>
</form>
<?php
if($scale!=0){
echo "<br>";
echo "sin(".$scale.")=".sin($scale)."<br>";
echo "cos(".$scale.")=".cos($scale)."<br>";
echo "tan(".$scale.")=".tan($scale)."<br>";
echo "cot(".$scale.")=".(1/tan($scale))."<br>";
echo "sec(".$scale.")=".(1/cos($scale))."<br>";
echo "csc(".$scale.")=".(1/sin($scale))."<br>";
}
else {
$scale=@($scale==0);
$scale=floatval($scale);
echo "$php_errormsg";
}
?>
</body>
</html>
输入非0时结果对
可是输入0还是一样 *忘了写倍数了
拜托各位看一下是哪里有问题
感激不尽
※ 编辑: todo70192 (59.125.122.241), 05/21/2016 11:39:01
8F:→ xdraculax: 这麽多个答案你就没个都试试吧,要改的是 empty($_POST 05/21 13:22
9F:→ xdraculax: 那边 05/21 13:22
10F:→ imhaha: 先去看入门书吧 05/21 14:09
12F:→ Johnnyvip: 看Return Values那段 05/22 04:52