这是我在PHP上做的一个简单的函数。问题在于它提供了完全未预料到的输出。
从我的数据库中,它需要$ takings = 242和$ cost = 81所以它应该显示242-81 = 161作为答案。但相反它显示242.可能是什么问题?
function differences($takings,$cost)
{
$difference = $takings - $cost;
if($difference < 0)
{
$color = red;
$difference = '$'.$difference.'million';
}
elseif($difference > 0)
{
$color = green;
$difference = '$'.$difference.='million';
}
elseif($difference = 0)
{
$color = blue;
$difference = "broken even ";
}
return '<span style="color:'.$color.';">'.$difference.'</span>';
}
专家。这是该页面的完整代码。在浏览器中打开页面时,会显示以下内容:
<?php
function getdirector($director)
{
global $db;
$query = 'select name from peopledb where peopleid = '.$director;
$result = mysql_query($query) or die(mysql_error($db));
$row = mysql_fetch_assoc($result);
extract($row);
return $name;
}
function getactor($actor)
{
$query = 'select name from peopledb where peopleid = '.$actor;
$result = mysql_query($query) or die(mysql_error($db));
$row = mysql_fetch_assoc($result);
extract($row);
return $name;
}
function getmovietype($type)
{
$query = 'select movietype from movietype where movieid = '.$type;
$result = mysql_query($query) or die(mysql_error($db));
$row = mysql_fetch_assoc($result);
extract($row);
return $movietype;
}
function differences($takings,$cost)
{
$difference = $takings - $cost;
if($difference < 0)
{
$color = red;
$difference = '$'.$difference.'million';
}
elseif($difference > 0)
{
$color = green;
$difference = '$'.$difference.='million';
}
elseif($difference = 0)
{
$color = blue;
$difference = "broken even ";
}
return '<span style="color:'.$color.';">'.$difference.'</span>';
}
$abc = $_GET['movieid'];
$db = mysql_connect('localhost','root','saw123') or die('Connection error');
mysql_select_db("moviesite",$db) or die(mysyql_error($db));
$query = "select moviename,releaseyear,director,actor,type,movierunningtime,moviecost,movietakings from movie where movieid = ". $abc;
$result = mysql_query($query,$db) or die(mysql_error($db));
$row = mysql_fetch_assoc($result);
$movie_name = $row['moviename'];
$movie_director = getdirector($row['director']);
$movie_releaseyear = $row['releaseyear'];
$movie_actor = getactor($row['actor']);
$movie_type = getmovietype($row['type']);
$movie_runningtime = $row['movierunningtime'].' minutes';
$movie_cost =$row['moviecost'].'million';
$movie_takings = $row['movietakings'].'million';
$movie_health = differences($row['movietakings'],$row['movie_cost']);
echo <<<ENDHTML
<html>
<head>
<title> Details and Reviews for the movies for $movie_name </title>
</head>
<body>
<div style="text-align: center;">
<h2>$movie_name</h2>
<h3> details </h3>
<table cellpadding = "1" cellspacing = "4"
style = "width = 80% ;margin-left: auto;margin-right: auto;";>
<tr>
<td><strong>Title</strong></strong></td>
<td>$movie_name</td>
</tr>
<tr>
<td><strong>release date</strong></strong></td>
<td>$movie_releaseyear</td>
</tr>
<tr>
<tr>
<td><strong>movie director</strong></strong></td>
<td>$movie_director</td>
</tr>
<tr>
<tr>
<td><strong>Lead Actor</strong></strong></td>
<td>$movie_actor</td>
</tr>
<tr>
<tr>
<td><strong>Running time</strong></strong></td>
<td>$movie_runningtime</td>
</tr>
<tr>
<tr>
<td><strong>Cost</strong></strong></td>
<td>$movie_cost</td>
</tr>
<tr>
<tr>
<td><strong>Takings</strong></strong></td>
<td>$movie_takings</td>
</tr>
<tr>
<tr>
<td><strong>Health</strong></strong></td>
<td>$movie_health</td>
</tr>
<tr>
</table>
</div>
</body>
</html>
ENDHTML;
$table = <<<ENDHTML
<div style="text-align: center;">
<h2>The Ultimate movie database</h2>
<table border='1' cellpadding='1' cellspacing='2'
style="width: 70%; margin-left: auto; margin-right: auto;">
<tr>
<th>Movie ID </th>
<th>Movie title</th>
<th>year of release </th>
<th>Movie director</th>
<th>Movie Actor</th>
<th>Movie type</th>
</tr>
ENDHTML;
?>
答案 0 :(得分:2)
$movie_health = differences($row['movietakings'],$row['movie_cost']);
应该是
$movie_health = differences($row['movietakings'],$row['moviecost']);
注意最后一个变量。
答案 1 :(得分:0)
正如@ dev-null-dweller指出的那样,你可能实际上没有传递(242, 81)
。编写单元测试,您会发现该函数在给定有效输入时可以正常工作。
<?php
function differences($takings,$cost)
{
$difference = $takings - $cost;
if($difference < 0) {
$color = 'red';
$difference = '$'.$difference.'million';
} elseif($difference > 0) {
$color = 'green';
$difference = '$'.$difference.='million';
} elseif($difference == 0) {
$color = 'blue';
$difference = "broken even ";
}
return '<span style="color:'.$color.';">'.$difference.'</span>';
}
class DifferencesTest extends PHPUnit_Framework_TestCase
{
public function testValidInput() {
$this->assertEquals('<span style="color:green;">$161million</span>', differences(242,81));
}
public function testInvalidInput() {
$this->assertEquals('<span style="color:green;">$242million</span>', differences(242,NULL));
}
}
答案 2 :(得分:0)
$movie_cost =$row['moviecost'].'million';
$movie_takings = $row['movietakings'].'million';
$movie_health = differences($row['movietakings'],$row['movie_cost']);
澄清我之前的回答:请注意'movie_cost'中是否存在下划线,而'moviecost'中缺少下划线。
答案 3 :(得分:-1)
我认为价值不会分配给成本变量。因此请检查函数中的成本变量。