Php 使用会话保存表单数据的历史记录

Php 使用会话保存表单数据的历史记录,php,html,session,session-cookies,Php,Html,Session,Session Cookies,我有一个表单,用户可以利用它引入一些数据来创建徽章。我使用session,这样我可以为用户保留一个小的历史记录列表,而且如果他们单击该列表中的一个元素,数据将自动发送到表单。我的问题是,当我单击列表中的一个元素时,会插入一个包含相同数据的新行,而且如果我再次使用列表中已有的相同数据填写表单,则会创建另一行,其中包含我已有的相同数据。我可以做些什么,使我的历史记录列表只包含唯一的值,基本上没有相同的行多次。 这是我的表单代码: <form method="get" autocomplete=

我有一个表单,用户可以利用它引入一些数据来创建徽章。我使用session,这样我可以为用户保留一个小的历史记录列表,而且如果他们单击该列表中的一个元素,数据将自动发送到表单。我的问题是,当我单击列表中的一个元素时,会插入一个包含相同数据的新行,而且如果我再次使用列表中已有的相同数据填写表单,则会创建另一行,其中包含我已有的相同数据。我可以做些什么,使我的历史记录列表只包含唯一的值,基本上没有相同的行多次。 这是我的表单代码:

<form method="get" autocomplete="off">
    <h3>Creaza ecuson</h3>
    <label>
        Nume:<br><input type="text" name="nume" id="nume" required value="<?php echo $search->nume ?>"><br>
        Prenume:<br><input type="text" name="prenume" id="prenume" required value="<?php echo $search->prenume ?>"><br>
        Sex:<br><div class="autocomplete" style="width:300px;">
                                <input id="sex" type="text" name="sex" required value="<?php echo $search->sex ?>">
                     </div><br><br>
        Rol:<br><div class="autocomplete" style="width:300px;">
                                <input id="rol" type="text" name="rol" required value="<?php echo $search->rol ?>">
                     </div><br><br>
        Culoare text:<br><input type="color" name="cul" id="cul" value="<?php echo $search->cul ?>"><br><br>
        Font ecuson:<br><div class="autocomplete" style="width:300px;">
                                <input id="font" type="text" name="font" required value="<?php echo $search->font ?>">
                     </div><br><br>
        Format ecuson (portrait or landscape):<br><div class="autocomplete" style="width:300px;">
                                <input id="format" type="text" name="format" required value="<?php echo $search->format ?>">
                       </div><br><br>
    </label>
    <input type="submit" name="history" value="History" />
    <button type="button" onclick="create()">Creaza</button><br><br>
</form>

克雷扎·埃克森
Nume:
以及所谓的历史代码:

<?php
            foreach ($searches as $s) {
            ?>
             <li><a href="creare.php?<?php echo $s->toQueryString() ?>">
                    <?php echo $s->nume?> - <?php echo $s->prenume?> - <?php echo $s->sex?> - <?php echo $s->rol?> - <?php echo $s->cul?> - <?php echo $s->font?> - <?php echo $s->format?>
                  </a></li>
            <?php
            }
            ?>


  • 对于我提出的问题,我不认为需要在这里发布带有自动完成功能的脚本。如果需要的话,我会提供。

    也许是像

    function storeSearch($search) {
            if (!isset($_SESSION['searches'])) {
                $_SESSION['searches'] = [];
            }
    
            if (!$search->isEmpty() && !in_array($search,$_SESSION['searches') {
                $_SESSION['searches'][] = $search;
            }
        }
    

    也许像这样简单的事情

    function storeSearch($search) {
            if (!isset($_SESSION['searches'])) {
                $_SESSION['searches'] = [];
            }
    
            if (!$search->isEmpty() && !in_array($search,$_SESSION['searches') {
                $_SESSION['searches'][] = $search;
            }
        }
    

    这里有一种方法和一些伪代码,您可以用代码库实现类似的东西

    这个想法是,因为从一台计算机上只有一个人可以注册,所以在会话中为这个人存储一个唯一的ID。然后,在将数据输入会话时,检查该ID是否存在

    如果有,就不要加,如果没有,就加

    伪代码

    $uniqueID = hash("sha256", $_SERVER['REMOTE_ADDR']); //generate a unique ID depending on IP since that would be unique for each computer
    
    //insert into your session
    if(!in($sessionHandler, $uniqueid)
    {
        //insert now
    }
    

    这里有一种方法和一些伪代码,您可以用代码库实现类似的东西

    这个想法是,因为从一台计算机上只有一个人可以注册,所以在会话中为这个人存储一个唯一的ID。然后,在将数据输入会话时,检查该ID是否存在

    如果有,就不要加,如果没有,就加

    伪代码

    $uniqueID = hash("sha256", $_SERVER['REMOTE_ADDR']); //generate a unique ID depending on IP since that would be unique for each computer
    
    //insert into your session
    if(!in($sessionHandler, $uniqueid)
    {
        //insert now
    }
    

    在CFP支持人员的回答的基础上,这里有一个稍微不同的方法来说明如何创建表单和处理程序。它与你的非常相似,但我的逻辑结构有点不同。我只从您的表单中添加了3个字段,但您可以轻松添加其余字段

    小提琴-

    
    克雷扎·埃克森
    Nume:
    Prenume:
    性别:
    创造
    
    基于CFP支持的答案,这里有一种稍微不同的方法来创建表单和处理程序。它与你的非常相似,但我的逻辑结构有点不同。我只从您的表单中添加了3个字段,但您可以轻松添加其余字段

    小提琴-

    
    克雷扎·埃克森
    Nume:
    Prenume:
    性别:
    创造
    
    您对唯一数据的定义是什么?您是否将其命名为
    电子邮件
    或其他字段,像
    IP地址
    ?我想这是更好的解释,如果你在图片中看到我在我的历史列表中有6次相同的行我只想要那行1次有多少人可以从一台计算机注册/介绍?每台计算机只有一个人你对唯一数据的定义是什么?您是否将其命名为
    电子邮件
    或其他字段,像
    IP地址
    ?我想这是更好的解释,如果你在图片中看到,我在我的历史列表中有6次相同的行我只想要那一行1次有多少人可以从一台计算机注册/介绍?每台计算机只有一个人它工作..而且它太简单了,我甚至没有想到我在想更多的方法复杂的事情:有时我们看不到森林,看不到所有的树——我去过那里很多次(有时“太多了”)。祝你的项目好运。它很有效。它很简单,我甚至没有想到它。我在想更复杂的事情。它有帮助:)有时我们看不到所有的树的森林-我去过很多次(有时“太多”!)。祝你的项目好运。