【问题标题】:How to add up numbers in PHP to create a unique score and save it如何在 PHP 中将数字相加以创建唯一分数并保存
【发布时间】:2018-07-23 02:04:48
【问题描述】:

我正在制定一个“健康计划”,您每天做的每件“健康”事情都会获得 1 分,例如,如果您有 30 分钟的锻炼,您就会获得 1 分。它的工作原理如下图所示:

<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

谢谢!

雅各布

【问题讨论】:

  • 您能否详细说明您希望发生的事情——例如,当您单击“提交”按钮时,应该发生什么?
  • 我想让 $score 在每次累积数字时添加或删除 1,以便与其他用户进行比较。
  • 顺便说一句,变量不会永远存储值,一旦脚本执行完值就消失了,你需要使用数据库。
  • 每次脚本执行时,您都需要一些东西来存储变量。否则,您只会在页面重新加载后丢失变量。

标签: php html numbers add points


【解决方案1】:

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

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

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

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

  1. 使用 javascript 处理数据并更新界面
  2. 将处理后的数据连同未处理的数据一起发送到后端以验证用户输入(可能“伪造”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,并在每次下一个请求时使用检索到的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多