Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный T_ECHO

#php #syntax

#php #синтаксис

Вопрос:

Я работал над чем-то в течение последних нескольких дней, но этот бит кода постоянно выдает неожиданный T_ECHO. Мои друзья, похоже, не могут найти в этом ничего плохого, и я на пределе своего терпения. Даже после удаления вложенного цикла while он по-прежнему выдает ошибку, и я также переключился на синтаксис while: endwhile;, и я все еще получаю его. Я уверен, что ответ прямо передо мной, но я, вероятно, его не вижу.

   while ($row = mysql_fetch_array($result, MYSQL_ASSOC)):        
            echo "<tr>";
              echo "<td>". $row["site_description"] ."</td>";
              echo "<td>". $row["url"] ."</td>";
              echo "<td><select>";
                while ($roar = mysql_fetch_array($categories, MYSQL_ASSOC)):
                  echo "<option value="". $roar["category"] ."">". $roar["category"] ."</option>";
                endwhile;
              echo "</select></td>";
            echo "</tr>";
          endwhile;
  

Комментарии:

1. Вы уверены , что этот код выдает ошибку? Возможно ли, что вы используете другой файл?

2. к какому номеру строки / к какой ошибке echo относится? этот фрагмент кода правильный

3. Этот код работает нормально. Вы уверены, что здесь возникает ошибка? Также, по какой-либо причине вы используете альтернативный синтаксис блока вместо обычного {} ?

4. номер строки всегда ссылается на строку, следующую сразу за вложенным эхом цикла while «</select></td>»; я переключился, потому что я пробовал все, чтобы попытаться это исправить. и я уверен, что это тот код, потому что я изменил материал, и номер строки меняется с моими правками. я не хотел публиковать все 115 строк.

5. На самом деле я не знал, что php поддерживает совершенно другой синтаксис. Grr php всегда предоставляет всем произвольный выбор, чтобы усложнить вашу жизнь.

Ответ №1:

Вы могли бы использовать короткие теги, чтобы сделать это намного более читаемым и, вероятно, менее подверженным ошибкам.

 <?php while ($row = mysql_fetch_array($result, MYSQL_ASSOC)): ?>
    <tr>
        <td><?= $row["site_description"] ?></td>
        <td><?= $row["url"] ?></td>
        <td>
            <select>
            <?php while ($roar = mysql_fetch_array($categories, MYSQL_ASSOC)): ?>
                <option><?= $roar["category"] ?></option>
            <?php endwhile; ?>
            </select>
        </td>
    </tr>
<?php endwhile; ?>
  

Комментарии:

1. Короткие теги не совместимы с xml и их следует избегать.

2. Короткие теги для PHP никогда не отображаются браузером — как они могут быть несовместимыми?

3. @tandu Вы все неправильно поняли. Конечно, PHP-код не является жалобой на XML! Ненужное понижение!

4. @Gary В php.ini документации предлагается не использовать короткие теги: «Следует избегать использования коротких тегов при разработке приложений или библиотек, предназначенных для распространения или развертывания на серверах PHP, которые не находятся под вашим контролем, поскольку короткие теги могут не поддерживаться на целевом сервере».

5. @Michael это говорит только о том, что их нельзя использовать, если вы распространяете код. Если вас это беспокоит, замените <?= на <?php echo . этот тип встроенного кодирования по-прежнему обеспечивает гораздо более читаемый код.

Ответ №2:

Попробуйте это…

Я думаю, что, возможно, произошла ошибка, потому что после того, как вы проанализировали результирующий набор categories для первого сайта, при следующем вызове mysql_fetch_array он ничего не выдает. Итак, выполнение этого заранее и вывод результатов в переменную исправляет это.

Я добавил » t» и » n» к строкам, чтобы сделать формат html красивым в исходном коде view.

     $result = mysql_query("select * from tmp_sites");
$categories = mysql_query("select * from tmp_cats");
$select_options = "";
while ($roar = mysql_fetch_array($categories, MYSQL_ASSOC)):
                  $select_options .= "tt<option value="". $roar["category"] ."">". $roar["category"] ."</option>n";
                endwhile;
echo "<table>";
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)):
            echo "t<tr>n";
              echo "tt<td>". $row["site_description"] ."</td>n";
              echo "tt<td>". $row["url"] ."</td>n";
              echo "tt<td><select>n";
                echo $select_options;
              echo "tt</select></td>n";
            echo "t</tr>n";
          endwhile;
echo "</table>"