#php
#php
Вопрос:
введите описание изображения здесь
Я хочу использовать html-код между foreach
ними, но я получаю эту ошибку о том, что тег не закрывается ( }
)
Сообщение об ошибке: ( ! ) Ошибка синтаксического анализа: незакрытый ‘{‘ в строке 26 в D:xampphtdocsphpphp_lernenmyphpdatabasepdo.php в строке 52
может быть, кто-нибудь знает об этом сообщении об ошибке? Вот код:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<table>
<tr>
<th>id</th>
<th>user name</th>
<th>name</th>
<th>email</th>
</tr>
<?php
$servername = 'localhost';
$dbname = 'test';
$username = 'root';
$password = '';
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM user";
$results = $conn->query($sql);
foreach ($results as $results) {
?>
<tr>
<td><?php echo $results['id'] ?></td>
<td><?php echo $results['username'] ?></td>
<td><?php echo $results['name'] ?></td>
<td><?php echo $results['mail'] ?></td>
</tr>
<?
}
} catch (PDOException $e) {
echo $e->getMessage();
}
$conn = null;
?>
</table>
</body>
</html>
Комментарии:
1. Попробуйте использовать
<?php
для открывающего тега вместо<?
2. Я сделал это, но это та же ошибка ( ! ) Ошибка синтаксического анализа: незакрытый ‘{‘ в строке 28 в D:xampphtdocsphpphp_lernenmyphpdatabasepdo.php в строке 43
3. Не удалось воспроизвести после замены
<?
на<?php
в строке 36 (в конце foreach): ideone.com/cEJsfC
Ответ №1:
В строке 36 отсутствует тег php. Попробуйте это:
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM user";
$results = $conn->query($sql);
foreach ($results as $results) {
?>
<tr>
<td><?php echo $results['id'] ?></td>
<td><?php echo $results['username'] ?></td>
<td><?php echo $results['name'] ?></td>
<td><?php echo $results['mail'] ?></td>
</tr>
<?php // <------ Missing php tag here
}
} catch (PDOException $e) {
echo $e->getMessage();
}
Ответ №2:
Вам нужно ‘;’ сразу после того, как вы вернетесь в свой php-код, <? перед закрывающей скобкой } .
Когда вы выходите из своего php, чтобы вставить некоторый html-код в этом конкретном случае или итерации цикла, он по-прежнему является «строкой» кода для вашего PHP, и его необходимо соответствующим образом завершить, таким образом, ‘;’. Вот эта часть кода исправлена:
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM user";
$results = $conn->query($sql);
foreach ($results as $results) {
?>
<tr>
<td><?php echo $results['id'] ?></td>
<td><?php echo $results['username'] ?></td>
<td><?php echo $results['name'] ?></td>
<td><?php echo $results['mail'] ?></td>
</tr>
<?; # <---- this ; here
}
Вы также хотите придерживаться <?php в этих случаях, поскольку я обнаружил в своем личном php, что отсутствие всего открывающего тега привело к тому, что мой скрипт не узнал о начале и остановке моих разделов php-кода.
Комментарии:
1. Эта точка с запятой абсолютно не нужна. И не только это, это, вероятно, вызовет другую синтаксическую ошибку.
2. По моему опыту, это не так. Без точки с запятой мой веб-сервер не смог преобразовать закрывающую скобку в мой оператор else в открывающую скобку. Если я удалю точку с запятой прямо сейчас и перезагружу свой веб-сервер, страница сломается. И моя страница настроена так, как указано выше, за исключением того, что моя находится в операторе IF-Else вместо foreach . Может зависеть от версии? Я использую PHP 7.4.12 на веб-сервере Apache. Я долго ломал голову, пытаясь решить эту проблему, и точка с запятой сработала для меня.
3. Я не знаю настройки вашего скрипта или с каким кодом вы имеете дело, но здесь это только повредит. Возможно, если бы вы поделились своим кодом, мы могли бы определить, как и почему.