синтаксическая ошибка, неожиданный конец файла в C: \ xampp1 \ htdocs\news \ admin\news_upload.php [duplicate]

Каждый раз, когда вы получаете ...

"Warning: mysqli_fetch_object () ожидает, что параметр 1 будет mysqli_result, boolean задан«

... это, вероятно, из-за проблемы с вашим запросом. prepare() или query() могут возвращать FALSE (логическое), но это общее сообщение об отказе не оставляет вас в стороне от подсказок. Как вы узнаете, что не так с вашим запросом? Вы задаете !

Прежде всего убедитесь, что сообщения об ошибках включены и видны: добавьте эти две строки в начало файла (ов) сразу после открытия <?php:

error_reporting(E_ALL);
ini_set('display_errors', 1);

Если ваше сообщение об ошибках установлено в php.ini, вам не придется беспокоиться об этом. Просто убедитесь, что вы обрабатываете ошибки изящно и никогда не раскрываете истинные причины каких-либо проблем для ваших пользователей. Выявление истинной причины для общественности может быть приглашением на золото с гравировкой для тех, кто хочет нанести вред вашим сайтам и серверам. Если вы не хотите отправлять ошибки в браузер, вы всегда можете следить за журналами ошибок веб-сервера. Расположение журналов будет варьироваться от сервера к серверу, например, на Ubuntu журнал ошибок обычно находится в /var/log/apache2/error.log. Если вы изучаете журналы ошибок в среде Linux, вы можете использовать tail -f /path/to/log в окне консоли, чтобы видеть ошибки, когда они происходят в режиме реального времени .... или как вы их делаете.

Как только вы 'squared away на стандартном сообщении об ошибках, добавляющем проверку ошибок в вашем соединении с базой данных, и запросы дадут вам гораздо более подробную информацию о проблемах. Посмотрите на этот пример, где имя столбца неверно. Во-первых, код, возвращающий роковое сообщение об ошибке:

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();

Ошибка является общей и не очень помогает вам в решении того, что происходит.

С помощью пары больше строк кода вы можете получить очень подробную информацию, которую вы можете использовать для решения проблемы сразу . Проверьте утверждение prepare() для правдивости, и если это хорошо, вы можете перейти к привязке и исполнению.

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
    $query->bind_param('s', $definition);
    $query->execute();
    // any additional code you need would go here.
} else {
    $error = $mysqli->errno . ' ' . $mysqli->error;
    echo $error; // 1054 Unknown column 'foo' in 'field list'
}

Если что-то не так, вы можете выплюнуть сообщение об ошибке, которое приведет вас к проблеме , В этом случае в таблице нет столбца foo, решение проблемы тривиально.

Если вы выберете, вы можете включить эту проверку в функцию или класс и расширить ее, обработав ошибки изящно, как упомянутых ранее.

130
задан Alex 12 November 2015 в 09:10
поделиться

11 ответов

Вы должны избегать этого (в конце вашего кода):

{?>

и это:

<?php}

Вы не должны устанавливать скобки непосредственно близко к открытому / close php, но он разделен пробелом:

{ ?>
<?php {

также избегает <? и использует <?php

253
ответ дан mgraph 28 August 2018 в 08:01
поделиться

Я видел некоторые ошибки, которые я исправил ниже.

Это то, что я получил как ошибочное:

if (login())
{?>
<h2>Welcome Administrator</h2>
<a href=\"upload.php\">Upload Files</a>
<br />
<a href=\"points.php\">Edit Points Tally</a>
<?php}
else
{
echo "Incorrect login details. Please login";
}

Так я бы это сделал:

<html>
    some code
<?php
function login()
{
    if (empty ($_POST['username']))
    {
        return false;
    }
    if (empty ($_POST['password']))
    {
        return false;
    }
    $username = trim ($_POST['username']);
    $password = trim ($_POST['password']);
    $scrambled = md5 ($password . 'foo');
    $link = mysqli_connect('localhost', 'root', 'password');
    if (!$link)
    {
        $error = "Unable to connect to the database server";
        include 'error.html.php';
        exit ();
    }
    if (!mysqli_set_charset ($link, 'utf8'))
    {
        $error = "Unable to set database connection encoding";
        include 'error.html.php';
        exit ();
    }
    if (!mysqli_select_db ($link, 'foo'))
    {
        $error = "Unable to locate the foo database";
        include 'error.html.php';
        exit ();
    }
    $sql = "SELECT COUNT(*) FROM admin WHERE username = '$username' AND password = '$scrambled'";
    $result = mysqli_query ($link, $sql);
    if (!$result)
    {
        return false;
        exit ();
    }
    $row = mysqli_fetch_array ($result);
    if ($row[0] > 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
if (login())
{
echo '<h2>Welcome Administrator</h2>
<a href=\"upload.php\">Upload Files</a>
<br />
<a href=\"points.php\">Edit Points Tally</a>';
}
else
{
    echo "Incorrect login details. Please login";
}
?>
some more html code
</html>
2
ответ дан Chris Forrence 28 August 2018 в 08:01
поделиться

У меня была такая же ошибка, но я исправил ее, изменив файл php.ini.

Найти файл php.ini см. в Чувак, где мой php.ini?

, затем откройте его с помощью вашего любимого редактора.

Найдите свойство short_open_tag и примените следующее изменение:

; short_open_tag = Off ; previous value
short_open_tag = On ; new value
62
ответ дан Community 28 August 2018 в 08:01
поделиться

Избегайте этого <? } ?>, убедитесь, что вы положили <?php } ?>

2
ответ дан Gpak 28 August 2018 в 08:01
поделиться

Просто зайдите в php.ini, затем найдите short_open_tag= Off в short_open_tag= On

9
ответ дан Hamzah Akram 28 August 2018 в 08:01
поделиться

Ищите какие-либо петли или заявления оставлены незакрытыми.

Я столкнулся с этой проблемой, когда оставил php foreach: тег закрыт.

<?php foreach($many as $one): ?>

Закрытие его с помощью после устранения синтаксической ошибки: unexpected end of file

<?php endforeach; ?>

Надеюсь, что это поможет кому-то

3
ответ дан Imtiaz 28 August 2018 в 08:01
поделиться

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

<?php
function () {

}

Файл, приведенный выше, возвращает erro Parse error: syntax error, unexpected end of file in, а ниже - нет.

<?php
function () {

};
0
ответ дан neisantos 28 August 2018 в 08:01
поделиться

Убедитесь, что вы закрыли свой класс.

Например, если у вас есть класс контроллера с методами, и случайно вы удаляете конечную скобку, которая закрывает весь класс, вы получите эту ошибку.

class someControler{
private $varr;
public $varu;
..
public function method {
..
} 
..
}// if you forget to close the controller, you will get the error
5
ответ дан olga 28 August 2018 в 08:01
поделиться

также, найдите комментарий //, который разбивает закрытие фигурной скобки

if (1==1) { //echo "it is true"; }

, закрывающая фигурная скобка не будет правильно закрывать условный раздел, а php не будет правильно обработать оставшуюся часть кода.

4
ответ дан Steve Wasiura 28 August 2018 в 08:01
поделиться

У меня была такая же ошибка, но я исправил ее, изменив php.ini и / или отредактировав файл PHP!

Есть два разных способа обойти синтаксис синтаксического анализа.

Способ 1 (ваш файл PHP)

Избегайте в вашем файле PHP этого:

<? } ?>

Убедитесь, что вы так выразились

<?php ?>

Ваш код содержит <? ?>

ПРИМЕЧАНИЕ: Отсутствует php после <?!

< / blockquote>

Способ 2 (файл php.ini)

Существует также простой способ решить вашу проблему. Найдите значение свойства short_open_tag (используйте в текстовом редакторе с помощью Ctrl + F!) [/ ​​G2] и примените следующее изменение:

; short_open_tag = Off

-

short_open_tag = On

Согласно описанию основных директив php.ini , short_open_tag позволяет использовать короткий открытый тег (<?), хотя это может вызвать проблемы при использовании с xml (<?xml не будет работать, если это включено)!

ПРИМЕЧАНИЕ: Перезагрузите свой сервер (например, Apache) и перезагрузите веб-страницу PHP в своем браузере.

< / BLOCKQUOTE>
21
ответ дан Suriyaa 28 August 2018 в 08:01
поделиться

Если ваш файл parse_ini_file ($ file) или подпрограмма испускает файл .ini, проверьте, не указаны ли данные в файле ini. Неучетные данные вызовут эту ошибку. Ex; data1 = test вызовет ошибку, data1 = "test" не будет.

0
ответ дан Wynn 28 August 2018 в 08:01
поделиться