如何将 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、本地存储空间,...)。
同样,最常见的方法如下:
- 使用javascript处理数据并更新界面
- 将处理后的数据与未处理的数据一起发送到后端以验证用户输入(可能 "fake" javascript 数据)
- 在服务器中,将数据保存到后台
- 呈现 html 页面时,使用 php 和后端值以仅显示相关内容
- 重复
如果必须使用 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 中,并在每个下一个请求中使用检索到的值。
我正在做一个 '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、本地存储空间,...)。 同样,最常见的方法如下:
- 使用javascript处理数据并更新界面
- 将处理后的数据与未处理的数据一起发送到后端以验证用户输入(可能 "fake" javascript 数据)
- 在服务器中,将数据保存到后台
- 呈现 html 页面时,使用 php 和后端值以仅显示相关内容
- 重复
如果必须使用 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 中,并在每个下一个请求中使用检索到的值。