PHP 500 (внутренняя ошибка сервера) - обнаружено нечисловое значение?

Я хочу иметь автозаполнение при поиске с помощью jQuery и Laravel. Но я получаю сообщение об ошибке, когда пользователь вводит хотя бы 2 буквы в поле поиска:

GET http://proj.test/autocomplete-search?term=ca 500 (Internal Server Error)

Вы знаете, в чем проблема? Я хочу отображать конференции по буквам, введенным пользователем в форму поиска.

Ввод поиска:

<div class = "col col-md-6">
    <h4 class = "text-white  text-center font-weight-bold">Search</h4>
    <form class = "main-search">
        <input type = "text" id = "search" class = "autocomplete dropdown-toggle" placeholder = "Conference, Citiy, Category">
    </form>
</div>

Маршруты Laravel:

Route::get('/autocomplete-search', 'AutocompleteController@search');

Laravel AutomcompleteController:

class AutocompleteController extends Controller
{
    public function search(Request $request){
        $search = $request->term;
        $conferences = Conference::where('name', 'LIKE', '%'.$search.'%')->get();

        $data= [];
        foreach ($conferences as $key => $value){
            $data[] = ['id'=>$value->id, 'value' => $value->id + " " + $value->name];
        }

        //dd($data);
        return response($data);
    }
}

jquery:

$("#search").autocomplete({
   source: "{{ URL::to('autocomplete-search') }}",
   minLength: 2,
   select:function(key, value)
   {
       console.info(value);
   }
});

Обновлено: на вкладке «Сеть» ошибка отображается как:

{message: "A non-numeric value encountered", exception: "ErrorException",…}

и указывает на эту строку:

{function: "search", class: "App\Http\Controllers\AutocompleteController", type: "->"}". In "$data[] = ['id'=>$value->id, 'value' => $value->id + " " + $value->name];

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

ADyson 16.05.2018 13:08

У вашего поля ввода нет имени, поэтому PHP не понимает, что вы имеете в виду под $request->term. Вероятно, это ошибка.

Loek 16.05.2018 13:10

Что-то краткое, что меня поразило: ' value' => $value->name + " " + $value->name - во-первых, есть пробел перед словом "значение", которого, вероятно, не должно быть, а во-вторых, почему вы дважды объединяете имя? Возможно, вы хотели написать 'value' => $value->id + " " + $value->name? Я сомневаюсь, что это источник ошибки, но он просто выделялся, когда я читал.

ADyson 16.05.2018 13:10

@Loek посмотрите на указанный URL в начале вопроса - похоже, он довольно успешно отправляет параметр "term" в строке запроса.

ADyson 16.05.2018 13:11

Спасибо, но та же ошибка с "$ data [] = ['id' => $ value-> id, 'value' => $ value-> id +" "+ $ value-> name];".

johnW 16.05.2018 13:12

"та же ошибка" .... вы еще не нашли ошибку! Все, что у вас есть, - это общий ответ 500. Как я уже сказал, я не утверждал, что нашел исправление. Вам нужно найти настоящее сообщение об ошибке в журналах сервера.

ADyson 16.05.2018 13:13

@MarcinMagdziarz посмотрите на URL-адрес, о котором сообщается в начале вопроса - похоже, он довольно успешно переходит на URL-адрес, определенный в маршруте.

ADyson 16.05.2018 13:13

Jquery находится на той же странице ввода поиска.

johnW 16.05.2018 13:13

@ADyson Ах да, я это пропустил! Тогда действительно нужно проверить журналы Laravel и / или сервера и посмотреть, помогают ли они выявить проблему.

Loek 16.05.2018 13:13

Оно появляется на вкладке сети "{сообщение:" Обнаружено нечисловое значение ", исключение:" ErrorException ",…}.

johnW 16.05.2018 13:14

он дает номер строки? Если нет, то трассировка стека в журналах должна дать единицу. Предположительно где-то есть поле, которое должно содержать число, но не

ADyson 16.05.2018 13:16

Появляется "{функция:" поиск ", класс:" App \ Http \ Controllers \ AutocompleteController ", тип:" -> "}". В "$ data [] = ['id' => $ value-> id, 'value' => $ value-> id +" "+ $ value-> name];".

johnW 16.05.2018 13:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
12
564
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы использовали оператор сложения (+), когда вам нужно было использовать оператор конкатенации строк (.).

Так

$data[] = ['id'=>$value->id, ' value' => $value->id + " " + $value->name]

должен стать

$data[] = ['id'=> $value->id, 'value' => $value->id . " " . $value->name]

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

См. http://php.net/manual/en/language.operators.php для информации о том, какие операторы что делают в PHP.

Спасибо, знаете ли вы, почему, например, если пользователь пишет «co» и в базе данных есть конференция с именем «conf», она появляется в автозаполнении «conf conf», а не просто «conf»?

johnW 16.05.2018 13:27

Вероятно, из-за того, что я упоминал в своих предыдущих комментариях - «'value' => $ value-> name.» «. $ Value-> name» дважды повторяет имя в выводе. Возможно, вы имели в виду "'value' => $ value-> id." ". $ Value-> name"? Я отредактирую свой ответ (как я редактировал ваш вопрос), чтобы отразить это изменение.

ADyson 16.05.2018 17:45

Другие вопросы по теме