如何使值不重置每个页面重新加载?

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>

而且,除非我弄错了,否则您似乎忘记在代码中添加 &lt;/form&gt;

无论如何,此代码应在您每次按提交时将当前 ID 添加到您的 URL,然后它会增加 1。

编辑:这是基于您提供的代码结构的快速解决方案,但经过反思不确定它是否正是您正在寻找的。可以有更强大的解决方案,例如 cookie 或 sessionStorage。

【讨论】:

好的,我可以试一试。 &lt;/form&gt; 也确实不见了,我之前把它弄乱了,把它放在评论里,我可能已经把它删掉了。 这是不正确的。主键不必是连续的。 @nice_dev 发帖人特别说“我想让 person_id ($wich_person) 加 1”,他的代码“$wich_person = $wich_person + 1”暗示结构是顺序的。跨度> 我同意你的看法,但 OP 似乎对此一无所知。

以上是关于如何使值不重置每个页面重新加载?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建不会在页面重新加载时重置的 JSP 变量

在每个页面上将状态重置为初始状态

重新加载页面复选框后不应重置

如果页面重新加载,如何在表单上保留对单选按钮的选择

再次单击当前路线链接时,如何重新加载 Web 应用程序?

如何在反应应用程序中重新加载每个页面时停止 firebase re-auth()?