如何使值不重置每个页面重新加载?
Posted
技术标签:
【中文标题】如何使值不重置每个页面重新加载?【英文标题】:How do I make a value not reset each page reload? 【发布时间】:2022-01-21 01:04:07 【问题描述】:我正在尝试使用 php 从我的数据库中向人们展示他们的个人资料。 但是每次单击按钮时,我都希望 person_id ($which_person) 增加 1,以便显示下一个人的个人资料。我不知道该怎么做,因为每次单击按钮时页面都会重新加载,因此变量“which_person”会重置为 1。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="assets-putinhouse/css/style1.css" rel="stylesheet" type="text/css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Festive&display=swap" rel="stylesheet">
<title>Put people in a house</title>
</head>
<body>
<?php
include "db/connection.php";
$conn = create_connection();
$which_person = 1; //This resets to "1" every time the page reloads
$getSql = "select * from Person where person_id = 1;";
$data_labels = mysqli_query($conn, $getSql)->fetch_all(MYSQLI_ASSOC);
?>
<div class="pagesize">
<h1>Put people in a house</h1>
<img src="assets-putinhouse/images/create_account.png" class="image_person">
<?php
foreach($data_labels as $labels)
?>
<li class="labels" data-id="<?php echo $labels['person_id'];?>">
<?php echo $labels["firstname"] ?>
<br>
<br>
<?php echo $labels["secondname"] ?>
<br>
<br>
<?php echo $labels["gender"] ?>
<br>
<br>
<?php echo $labels["descriptie"] ?>
</li>
<?php
?>
<br>
<form method="GET">
<input type="submit" class="slytherin_button" value="Slytherin" name="slytherin_button_name">
<br>
<input type="button" class="gryffindor_button" value="Gryffindor" name="gryffindor_button_name">
<br>
<input type="button" class="hufflepuff_button" value="Hufflepuff" name="hufflepuff_button_name">
<br>
<input type="button" class="ravenclaw_button" value="Ravenclaw" name="ravenclaw_button_name">
<br>
<input type="button" class="nextperson_button" value="Go to next person">
<p class="text_firstname">Firstname: </p>
<p class="text_name">Name: </p>
<p class="text_gender">Gender: </p>
<p class="text_info">Info: </p>
<?php
if(isset($_GET['slytherin_button_name']))
onFunc($conn, $which_person);
if(isset($_GET['gryffindor_button_name']))
offFunc();
function onFunc($conn, $wich_person)
$sqlUpdate = "UPDATE Person SET slytherin = slytherin + 1 WHERE person_id like '$which_person';"; //this does the value "slytherin" of which_person go up by 1;
mysqli_query($conn, $sqlUpdate);
$wich_person = $wich_person + 1; //which person goes up by 1 so the next person will be shown but gets reset at the start
function offFunc()
echo "Button is clicked";
?>
</div>
<script src="assets-putinhouse/js/script.js"></script>
</body>
</html>
´´´
【问题讨论】:
如果你想为所有人使用这个,你需要在服务器上递增和存储并将其添加到页面中 是的,我的计划是为数据库中的每个人都这样做。一旦显示最后一个人,它将停止。通过将其存储在服务器上,您的意思是我需要在数据库中创建一个变量并增加该变量吗? 如果你想让其他人看到变化,是的 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough! 这是不正确的。主键不必是连续的。重置问题应稍后解决。 【参考方案1】:(未测试)而不是:
$wich_person = 1;
看来你可以这样做:
if (isset($_GET["id"])
$wich_person = (int)$_GET["id"] + 1;
else
$wich_person = 1;
然后将以下内容添加到您的表单中:
<form action="?<?php echo $wich_person ?>" method="GET">
...
</form>
而且,除非我弄错了,否则您似乎忘记在代码中添加 </form>
。
无论如何,此代码应在您每次按提交时将当前 ID 添加到您的 URL,然后它会增加 1。
编辑:这是基于您提供的代码结构的快速解决方案,但经过反思不确定它是否正是您正在寻找的。可以有更强大的解决方案,例如 cookie 或 sessionStorage。
【讨论】:
好的,我可以试一试。</form>
也确实不见了,我之前把它弄乱了,把它放在评论里,我可能已经把它删掉了。
这是不正确的。主键不必是连续的。
@nice_dev 发帖人特别说“我想让 person_id ($wich_person) 加 1”,他的代码“$wich_person = $wich_person + 1”暗示结构是顺序的。跨度>
我同意你的看法,但 OP 似乎对此一无所知。以上是关于如何使值不重置每个页面重新加载?的主要内容,如果未能解决你的问题,请参考以下文章