如何将 PHP 中的数字加起来创建一个独特的分数并保存

How to add up numbers in PHP to create a unique score and save it

我正在做一个 'health program',你每天做 'healthy' 一件事情就可以得到 1 分,例如,如果你有 30 分钟的锻炼时间,你就会得到一分。其工作原理如下所示:

<form method="post">
    <label>Did you have 30 minutes of exercise today? (+1)</label>
    <select name="question">
    <option value="yes">Yes</option>
    <option value="no">No</option>
  </select> <input type="submit" class="btn btn-outline-light"  name="form1">
</form>
<form method="post">
    <label>Have you drinken 8 glasses of water today? (+1)</label>
    <select name="question">
    <option value="yes">Yes</option>
    <option value="no">No</option>
  </select> <input type="submit" class="btn btn-outline-light"  name="form2">
</form>
<form method="post">
    <label>Did you use your phone for more than two hours today? (-1)</label>
    <select name="question">
    <option value="yes">Yes</option>
    <option value="no">No</option>
  </select> <input type="submit" class="btn btn-outline-light"  name="form3">
</form>



<?php
/* Then using PHP I want to have each form submitted, add or remove 1 from an overall score, something like this: */
$score = 0;
if (isset($_POST['form1'])) {
  $question = $_POST['question'];
  if ($question = "yes") {
    // +1 point
    $score = +1;
  }
}

if (isset($_POST['form2'])) {
  $question = $_POST['question'];
  if ($question = "yes") {
    // +1 point
    $score = +1;
  }
}
if (isset($_POST['form3'])) {
  if ($question = "yes") {
     // -1 point
     $score = +1;
  }
} ?>

那么我想要 $score +1 或 -1。我不确定如何使用 PHP 实际添加点。我希望 $score 在 if 语句之外更新,否则,对于每个 if 语句,它将添加一个并且 $score 仍然 = 到 1

谢谢!

雅各布

您必须存储数据并且可以在不同的地方进行。以下是其中一些:

  • 会话
  • cookies
  • 服务器缓存
  • 浏览器本地存储
  • 数据库
  • ...

在正常的网站范围内,您通常会使用数据库。 每次提交表单并在应用程序后端处理数据时(请记住 php 不能在客户端执行),保存数据并用于后续数据处理。

在我看来 javascript 会更好地处理您想要实现的目标,允许您实时更新界面,完全绕过将表单发送到后端的需要。在这种情况下,您可以选择将总表分数发送到后端或将其直接保存到可从 javascript 访问的存储空间(cookies、本地存储空间,...)。 同样,最常见的方法如下:

  1. 使用javascript处理数据并更新界面
  2. 将处理后的数据与未处理的数据一起发送到后端以验证用户输入(可能 "fake" javascript 数据)
  3. 在服务器中,将数据保存到后台
  4. 呈现 html 页面时,使用 php 和后端值以仅显示相关内容
  5. 重复

如果必须使用 php(也许您正在做作业)并且不能使用数据库,您可能希望将所有答案合并为一个形式:

<form method="post">
  <div>
    <label>Did you have 30 minutes of exercise today? (+1)</label>
    <select name="question0">
    <option value="yes">Yes</option>
    <option value="no">No</option>
  </div>
  <div>
  </select> <input type="submit" class="btn btn-outline-light"  name="form1">
    <label>Have you drinken 8 glasses of water today? (+1)</label>
    <select name="question1">
    <option value="yes">Yes</option>
    <option value="no">No</option>
  </div>
  <div>
  </select> <input type="submit" class="btn btn-outline-light"  name="form2">
    <label>Did you use your phone for more than two hours today? (-1)</label>
    <select name="question2">
    <option value="yes">Yes</option>
    <option value="no">No</option>
  </select> <input type="submit" class="btn btn-outline-light"  name="form3">
</div>
</form>


// BackendController.php
<?php
$score = 0; // or grab initial value from persistent storage (cookie, db, etc)
$questions = ['question0', 'question1', 'question2'];
foreach($questions as $question) {
  $val = $_POST[$question];
  $question == 'yes' ? $score++ : $score--;  
}

?>

这种方式可以一次性发送和处理所有参数,还可以缩短php脚本。不过请记住,一旦连接关闭,您将丢失数据。在这种情况下,您可能希望将结果保存到会话或 cookie 中,并在每个下一个请求中使用检索到的值。