如何在while循环中创建变量

时间:2013-12-08 19:52:21

标签: php mysql

这是我的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> - 这是我想要回应的地方。

2 个答案:

答案 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子句之前定义变量。