开发者

Variable not found error

Hey, can anyone notice any errors in this code:

<?php
include("config.php");
if(isSet($_POST['lastmsg']))
{
  $lastmsg = $_POST['lastmsg'];
  $lastmsg 开发者_运维百科= mysql_real_escape_string($lastmsg);
  $result  = mysql_query("SELECT * 
                            FROM updates 
                           WHERE update_time < '$lastmsg' 
                        ORDER BY msg_id DESC
                           LIMIT 9");
  while($row=mysql_fetch_array($result))
  {
    $msg_id  = $row['update_time'];
    $message = $row['item_content'];
  ?>
   <li>
     <?php echo $message; ?>
   </li>
  <?php
  }
  ?>

  //More Button here $msg_id values is a last message id value.
  <div id="more<?php echo $msg_id; ?>" class="morebox">
  <a href="#" id="<?php echo $msg_id; ?>" class="more">more</a>
  </div>
  <?php
}
?>

I'm getting this error:

Notice: Undefined variable: msg_id in C:\wamp\www\stream_scripts\draft2\ajax_more.php on line 20 Call Stack #TimeMemoryFunctionLocation 10.0012373824{main}( )..\ajax_more.php:0 " class="morebox"> ( ! ) Notice: Undefined variable: msg_id in C:\wamp\www\stream_scripts\draft2\ajax_more.php on line 21 Call Stack #TimeMemoryFunctionLocation 10.0012373824{main}( )..\ajax_more.php:0 " class="more">more

Anyone can see anything wrong please comment. Thanks! :)


The issue here is if this while loop doesn't run, $msg_id will never get set. To remedy this, set $msg_id to a default value outside of the loop (i.e. "") or check it's existance when you want to access it

An example might be

$msg_id = "";
while(/* conditions */){
  //body
}

or

   while(){
     $msg_id = "something";
   }

   if(isset($msg_id)){
     // access it
   }


You assume that $result always return something as $msg_id is being defined inside the while loop. You can check if msg_id has been set by inserting a condition before you try to grab your variable's value such as:

<?
if (isset($msg_id)) {
 //More Button here $msg_id values is a last message id value.?>
 <div id="more<?php echo $msg_id; ?>" class="morebox">
 <a href="#" id="<?php echo $msg_id; ?>" class="more">more</a>
}

Also, the following lines don't look right:

</li>
<?php
}
?>
* Missing <? here *
//More Button here $msg_id values is a last message id value.


$msg_id is scoped in the while loop. You have to declare it outside the scope.

Demonstration of the problem here.

Solution:

Add this before the while loop:

$msg_id = '';
$message = '';

I hope it helps.


On the second occurence of $msg_id, you're assuming it has already been defined, but if the while loop doesn't loop at all, it won't.


Yep. If while cycle doesn't role $msg_id wouldn't be defined. It's not an error, it's just a notice. Use error_reporting function if you don't need this message

error_reporting( E_ALL ^ E_NOTICE ) ;

Just place it in the beginning of the script

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜