这是我的PHP代码 -
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'moviefone';
$con = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname, $con);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query = (isset($_GET['search-text']) ? strip_tags($_GET['search-text']) : '');
$num_result = 0;
$min_length = 3;
if(strlen($query) >= $min_length){
$query = htmlspecialchars($query);
$query = mysql_real_escape_string($query);
$raw_results = mysql_query("SELECT * FROM movies WHERE (`title` LIKE '%".$query."%')") or die(mysql_error());
if(mysql_num_rows($raw_results) > 0){
while($results = mysql_fetch_assoc($raw_results)){
$title=$results['title'];
$images=$results['images'];
$num_results++;
echo '<div id="search_result">
<a href=""><img src="'.$images.'" width="77px" height="111px" alt="" /></a>
<a href="" >'.$title.'</a>
<br />
<br />
</div>
<div id="b-1" class="clearfix"></div>
</div>';
}
}
else{
echo "No results";
}
}
else{
echo "Minimum length is ".$min_length;
}
?>
当我在while循环中回显$ num_result时,它显示完美。但是当我试图在循环的一侧显示未定义的变量时回显它。我已经尝试将变量设置为全局范围。但它仍然显示未定义的变量:第72行$ num_result。
<div id="page-header">
<h1>Search Result for
<span class="query-text">
"<?php echo $_GET['search-text']; ?>"</span></h1></div>
<div id="b-1" class="clearfix"></div>
<div class="query-result"><h2>Movies<span class="num_result">
(<?php echo "$num_result\n";?>)</span></h2>
</div>
- 这是我想要回应的地方。
答案 0 :(得分:1)
您是否只是在对所有结果进行总计数后?如果是这样,您需要在循环之前将变量设置为零。您的代码当前正在覆盖每个循环的变量。
$num_result = 0;
...在您的情况下,每个循环只包含一个记录,因此不需要在此处使用+=
assignment operator。该值始终为1,因此您可以将计数器增加一个,如下所示:
$num_result++;
...然后在最后,您的输出代码应该很好地工作。只要在代码中将$num_result
设置为零(例如在if语句之外),就不会出现未定义的错误。我想这会发生这种情况,因为你的if语句没有评估为true(你没有任何查询结果)因此你的变量没有定义。
修改
我将给你一个分解这个应该如何运作的例子:
<?php
$num_result = 0;
$query = // your query here
while($results = mysql_fetch_assoc($query)) {
$num_result++;
// output your table info here
}
echo 'Total results: ' . $num_result;
?>
修改
查看您的PasteBin输出,您的问题非常明确 - 您正在尝试在定义之前回显$num_result
。您遇到的问题是输出一个在数据库结果循环期间正在处理的变量,但您希望在完成循环之前输出该变量。试试这个:
将您的数据库查询代码放在页面的顶部:
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'moviefone';
$con = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname, $con);
$num_results = 0;
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query = (isset($_GET['search-text']) ? strip_tags($_GET['search-text']) : '');
$min_length = 3;
if(strlen($query) >= $min_length){
$query = htmlspecialchars($query);
$query = mysql_real_escape_string($query);
$raw_results = mysql_query("SELECT * FROM movies WHERE (`title` LIKE '%".$query."%')") or die(mysql_error());
然后使用mysql_num_rows()输出总数而不是依赖
$num_result
<div class="query-result">
<h2>Movies<span class="num_result">(<?php echo mysql_num_rows($raw_results)?>)</span?></h2>
</div>
...我不得不写mysql_fetch_assoc
- 不推荐使用mysql函数,而是使用mysqli或PDO。 Here's a tutorial to get you started with PDO.我看到你已经在你的代码中使用了一两个mysqli函数,这是相当令人困惑的,但对你很好 - 转换其余部分!
答案 1 :(得分:0)
当你在循环中退出时在while子句变量生命周期结束时定义变量(你没有变量在while之外) 所以,如果你想在外面使用变量,但是在= =&gt;中更改它在while子句之前定义变量。