Как увеличить таблицу при нажатии кнопки laravel

У меня есть Home.blade.php, в котором, если я нажму vote button, он должен увеличить счетчик в таблице кандидат.

home.blade.php

@foreach ($file as $show)
    <div class = "col-md-3" style = "margin-bottom: 20px;">
       <div class = "card">
          <img src = "{{$show->image}}"  style = "width:100%">
          <div class = "card-body">
             <h5 class = "title">President</h5>
             <p class = "card-text">Name : {{$show->name}}</p>
             <a href = "return Homecontroller@Count"> <button>VOTE</button> </a>
          </div>
       </div>
    </div>
@endforeach

домашний контроллер

public function Count(){
   DB::table('candidate')->increment('count');
   return view('/home')->with('success', 'voted');
}

Маршрут

Route::get('/home','Homecontroller@Count');

Пожалуйста, помогите мне увеличить счетчик, если нет этого метода, есть ли другой способ сделать то же самое.

Ваш код правильный. С какой проблемой вы столкнулись?

Afraz Ahmad 22.02.2019 06:46

Убедитесь, что ваш столбец count является целым числом в миграции.

Afraz Ahmad 22.02.2019 06:47

Не могли бы вы сказать, если вы нажмете на кнопку, то она будет вызвана вашим методом контроллера или нет?

Sahil Darji 22.02.2019 06:47

выдает ошибку 404

Sachin Acharya 22.02.2019 07:06
Стоит ли изучать 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 и хотите разрабатывать...
1
4
389
4

Ответы 4

Убедитесь, что ваш счетчик столбцов имеет целочисленный тип в миграции. И:

Вы неправильно пишете

    <a href = "return Homecontroller@Count"> <button>VOTE</button> </a>

изменить его на

<a href = "{{action(Homecontroller@Count)}}"> <button>VOTE</button> </a>

«Действие App\Http\Controllers\Homecontroller@Count не определено. (Просмотр: /home/sachin/dd/sjc-voting-system/sjcvoting/resources/views/‌​home.blade.php)»

Sachin Acharya 22.02.2019 07:02

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

Afraz Ahmad 22.02.2019 07:03

** <a href = "{{action('Homecontroller@Count')}}"> <button>ГОЛОСОВАТЬ</button> </a>**

Sachin Acharya 22.02.2019 07:09

не могли бы вы предложить мне любую функцию ajax или javascript для этого

Sachin Acharya 22.02.2019 07:10

Да, есть лучший способ.

Добавьте это в свой web.php

Route::put('/votesUp/{vote}', 'HomeController@upVote')->name('votes.upVote');
Route::put('/votesDown/{vote}', 'HomeController@downVote')->name('votes.downVote');

в вашем списке просмотра это index.blade.php добавьте эти две кнопки

FORM BUILDER WAY

 @foreach($candidates as $item)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{!! $item->name !!}</td>

<td>{!! Form::model($item, ['method' => 'PUT', 'route' => ['votes.upVote',  $item->id ] ,'enctype'=>'multipart/form-data' ]) !!}
{!! Form::submit( 'Up Vote', ['class' => '', 'name' => 'submitbutton', 'value' => 'upvote'])!!}
{!! Form::close() !!}</td>

<td>{!! Form::model($item, ['method' => 'PUT', 'route' => ['votes.downVote',  $item->id ] ,'enctype'=>'multipart/form-data' ]) !!}
{!! Form::submit( 'Down Vote', ['class' => '', 'name' => 'submitbutton', 'value' => 'upvote'])!!}
{!! Form::close() !!}</td>
</tr>    
@endforeach

HTML WAY

@foreach($candidates as $item)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{!! $item->name !!}</td>

<td>
    <form method = "post" action = "{{ route('votes.upVote', $item->id) }}">
        @method('PUT')
        @csrf
        <input class = "" name = "submitbutton" value = "Up Vote" type = "submit">
      </form>

        <form method = "post" action = "{{ route('votes.downVote', $item->id) }}">
        @method('PUT')
        @csrf
        <input class = "" name = "submitbutton" value = "Down Vote" type = "submit">
      </form>
</td>
</tr>    
@endforeach

Я рассматриваю вашу модель как Candidate, так что добавьте это в HomeController

ELOQUENT way

public function upVote(Request $request, $id)
    {
        Candidate::find($id)->increment('votes_count', 1);
        return redirect()->back();
    }

    public function downVote(Request $request, $id)
    {
        Candidate::find($id)->decrement('votes_count', 1);
        return redirect()->back();
    }

DB Facade Way

public function upVote(Request $request, $id)
    {
        \DB::table('candidates')->where('id','=',1)->increment('votes_count', 1);
        return redirect()->back();
    }

    public function downVote(Request $request, $id)
    {
        \DB::table('candidates')->where('id','=',1)->decrement('votes_count', 1);
        return redirect()->back();
    }

Объяснение:

Когда Вы нажмете на кнопку голосования, поле votes_count в candidates таблице будет увеличенный на 1

Когда вы нажмете кнопку понижения, поле votes_count в candidates таблице будет уменьшенный на 1.

EDIT FOR undefined variable candidate

Найдите эту строку

@foreach($candidates as $item)

И заменить на

@foreach ($file as $item)

ИСПРАВИТЬ ДЛЯ

Class App\Http\Controllers\HomeController does not exist

От

Route::put('/votesUp/{vote}', 'HomeController@upVote')->name('votes.upVote');
Route::put('/votesDown/{vote}', 'HomeController@downVote')->name('votes.downVote');

К

Route::put('/votesUp/{vote}', 'Homecontroller@upVote')->name('votes.upVote');
Route::put('/votesDown/{vote}', 'Homecontroller@downVote')->name('votes.downVote');

Ваш класс контроллера

Homecontroller

но я неправильно написал как

HomeController

Большое спасибо, но он показывает ошибку кандидата неопределенной переменной

Sachin Acharya 22.02.2019 08:23

спасибо я сделал это, но теперь я получаю такую ​​​​ошибку

Sachin Acharya 22.02.2019 08:42

"Класс App\Http\Controllers\HomeController не существует"

Sachin Acharya 22.02.2019 08:42

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

ManojKiran Appathurai 22.02.2019 08:48

Кнопка голосования должна быть такой:

<a href = "{{ action('Homecontroller@Count' }}"><button>VOTE</button></a>

С такими функциями, как Upvote и Downvote, на которые хорошо ответил @manojkiran-а выше, я бы также добавил регулирование. Теперь легко создать бота, который будет отправлять запросы на голосование, даже если вы используете токен csrf.

я бы добавил:

'middleware' => 'throttle:5'

Что позволит только 5 запросов в минуту на IP-адрес. Не полностью предотвращая это, но немного усложняя.

Route::put('/votesUp/{vote}', 'Homecontroller@upVote')->middleware('throttle:5')->name('votes.upVote');
Route::put('/votesDown/{vote}', 'Homecontroller@downVote')->middleware('throttle:5')->name('votes.downVote');

Большое спасибо за вашу идею.

Sachin Acharya 23.02.2019 16:06

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