блоги — справка об ошибках PHP в цикле while

Я не могу понять, как решить ошибку PHP.

По приведенному ниже коду я получаю сообщение об ошибке:

Неустранимая ошибка: невозможно повторно объявить getintro () (ранее объявлено … в строке 94)

Я отметил линию 94 ниже. Любая помощь или руководство приветствуется. Моя цель состоит в том, чтобы зациклить каждое сообщение в блоге на основе каждой строки базы данных с отображением только части текста. Когда ссылка нажала, он должен открыть полный блог с комментариями в blog.php

    <?php   // retreive post
include('php/config.php');
include ('php/function.php');
dbConnect();

$blog_query = mysql_query(
'SELECT *
FROM Blog
ORDER BY DATE DESC');

while($row = mysql_fetch_array($blog_query)):

$date = date_create($row['DATE']);
$str = $row['CONTENT'];
$ID = $row['ID'];

LINE 94    function getIntro($str, $count = 200) {
return preg_replace('/\s+?(\S+)?$/', '', substr(nl2br($str), 0, $count)) . "   <a href=\"blog.php?page={$ID}\" class=\"changeColor\">Read more...</a>\n";
}
$new_string = getIntro($str);
?>

<div class="post">
<h2><?php echo $row['TITLE']?></h2>
<h3><?php echo date_format($date, 'l, F j, Y')?></h3>
<p><?php echo $new_string?></p>
</div>

</div>
<?php endwhile?>

0

Решение

Ваша функция объявляется внутри цикла. Переместите объявление функции за пределы цикла.

    <?php   // retreive post
include('php/config.php');
include ('php/function.php');
dbConnect();

$blog_query = mysql_query(
'SELECT *
FROM Blog
ORDER BY DATE DESC');

function getIntro($str, $count = 200) {
return preg_replace('/\s+?(\S+)?$/', '', substr(nl2br($str), 0, $count)) . "   <a href=\"blog.php?page={$ID}\" class=\"changeColor\">Read more...</a>\n";
}

while($row = mysql_fetch_array($blog_query)):

$date = date_create($row['DATE']);
$str = $row['CONTENT'];
$ID = $row['ID'];

$new_string = getIntro($str);
?>

<div class="post">
<h2><?php echo $row['TITLE']?></h2>
<h3><?php echo date_format($date, 'l, F j, Y')?></h3>
<p><?php echo $new_string?></p>
</div>

</div>
<?php endwhile?>
2

Другие решения

Вы объявляете функцию в цикле, поэтому на каждой итерации она объявляет одну и ту же функцию, которая вызывает проблему. Я бы объявил функцию над циклом и вызвал функцию внутри цикла.

2

Вынесите объявление вашей функции из цикла while! (Декларация должна быть до того, как вы ее используете!)

function getIntro($str, $count = 200) {
return preg_replace('/\s+?(\S+)?$/', '', substr(nl2br($str), 0, $count)) . "   <a href=\"blog.php?page={$ID}\" class=\"changeColor\">Read more...</a>\n";
}
0

Переместите определение функции из цикла, например, поместите его перед dbConnect:

function getIntro($str, $count = 200) {
return preg_replace('/\s+?(\S+)?$/', '', substr(nl2br($str), 0, $count)) . "   <a href=\"blog.php?page={$ID}\" class=\"changeColor\">Read more...</a>\n";
}
0