【问题标题】:Laravel send multiple posts but save only the last one to databaseLaravel 发送多个帖子,但只保存最后一个到数据库
【发布时间】:2019-12-15 20:00:47
【问题描述】:

在 Laravel 中,我正在开发一个网络应用程序,用户将在不同的页面上回答正确或错误的问题。在每一页上,我想以某种方式保存他们的答案,最后将结果保存到数据库中。

我可以在每个页面上创建一个 POST 表单,如果答案正确,它将增加数据库中的“点”字段。但这需要每个用户多次访问数据库,因为答案将保存在每个页面上。有没有办法将它们的点存储到服务器上的一个变量中,然后将该变量保存到最后的数据库中?

我曾想过将积分保存到会话中,但这并不安全,因为用户可以修改会话。

现在我的控制器只返回介绍页面。

class QuizController extends Controller {
    public function index() {
        return view("quiz.pages.1");
    }

    public function addPoint() {
        $points++;
    }

    public function getPoints() {
        return $points;
    }
}

以及重定向到下一页的路线。

Route::get('quiz/{page}', function($page) {
    return View::make('quiz.pages.' . $page);
});

【问题讨论】:

  • 你的保存方法在哪里?不清楚你在问我什么
  • 我不明白您为什么认为在会话中存储点是不安全的。会话存储在服务器上,而不是客户端上。用户不太可能修改会话以对其有利。
  • 您可以使用会话(只能由有权访问您的服务器的用户修改),或将点存储在快速缓存中,如redis
  • @KIKOSoftware 和 marv255 你是对的。我对服务器端会话和 HTML5 的 sessionStorage 感到困惑。我将使用服务器端会话解决问题。谢谢。

标签: php html database laravel post


【解决方案1】:

在我看来,实现这一点的方法是将隐藏的输入发送到您的页面,而不是 save() 直到最后。所以它看起来像这样。

firstpage.blade.php

<input type="text" name="yourinputname">

因此,您可以将此输入从控制器传递到下一页,而无需保存。比如:

public function index(Request $request) {

    $yourVariablename = new YourModelName;
    $yourVariableName->yourDatabaseColumnName = $request->input('yourinputname');

    return view("quiz.pages.1", [
      'anyName' => $yourVariableName
    ]);
}

请注意,控制器上还没有 save(),因为我们想在最后保存它,所以我们只是存储它。从现在开始,您可以在接下来的页面中执行类似的操作,直到您到达要保存的位置。

anotherpage.blade.php

<input type="hidden" name="yourinputname">

当您收集所有数据时,只需将它们与您的数据库列匹配,然后保存()它。希望能解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2022-01-12
    • 2015-09-16
    • 2021-01-08
    • 2019-05-18
    • 2015-07-09
    • 1970-01-01
    相关资源
    最近更新 更多