Ошибка переменной не найдена - PullRequest
1 голос
/ 21 марта 2011

Эй, кто-нибудь может заметить ошибки в этом коде:

<?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
}
?>

Я получаю эту ошибку:

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

Любой может увидеть что-то не так, пожалуйста, прокомментируйте. Спасибо! :)

Ответы [ 5 ]

4 голосов
/ 21 марта 2011

Проблема здесь в том, что если этот цикл не запускается, $msg_id никогда не будет установлен.Чтобы исправить это, установите $msg_id на значение по умолчанию вне цикла (то есть "") или проверьте его наличие, когда вы хотите получить к нему доступ

Примером может быть

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

или

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

   if(isset($msg_id)){
     // access it
   }
1 голос
/ 21 марта 2011

Предполагается, что $ result всегда возвращает что-то, поскольку $ msg_id определяется внутри цикла while . Вы можете проверить, был ли установлен msg_id, вставив условие, прежде чем пытаться получить значение вашей переменной, например:

<?
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>
}

Кроме того, следующие строки выглядят неправильно:

</li>
<?php
}
?>
* Missing <? here *
//More Button here $msg_id values is a last message id value.
1 голос
/ 21 марта 2011

$ msg_id находится в цикле while.Вы должны объявить это вне области действия.

Демонстрация проблемы здесь .

Решение:

Добавьте это перед циклом while:

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

Надеюсь, это поможет.

0 голосов
/ 21 марта 2011

Во втором случае $msg_id вы предполагаете, что оно уже определено, но если цикл while вообще не зацикливается, он не будет.

0 голосов
/ 21 марта 2011

Да.Если while цикл не выполняет роль, $ msg_id не будет определен.Это не ошибка, это просто уведомление.Используйте функцию error_reporting, если вам не нужно это сообщение

error_reporting (E_ALL ^ ​​E_NOTICE);

Просто поместите его в начало скрипта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...