Php 使用会话保存表单数据的历史记录
我有一个表单,用户可以利用它引入一些数据来创建徽章。我使用session,这样我可以为用户保留一个小的历史记录列表,而且如果他们单击该列表中的一个元素,数据将自动发送到表单。我的问题是,当我单击列表中的一个元素时,会插入一个包含相同数据的新行,而且如果我再次使用列表中已有的相同数据填写表单,则会创建另一行,其中包含我已有的相同数据。我可以做些什么,使我的历史记录列表只包含唯一的值,基本上没有相同的行多次。 这是我的表单代码:Php 使用会话保存表单数据的历史记录,php,html,session,session-cookies,Php,Html,Session,Session Cookies,我有一个表单,用户可以利用它引入一些数据来创建徽章。我使用session,这样我可以为用户保留一个小的历史记录列表,而且如果他们单击该列表中的一个元素,数据将自动发送到表单。我的问题是,当我单击列表中的一个元素时,会插入一个包含相同数据的新行,而且如果我再次使用列表中已有的相同数据填写表单,则会创建另一行,其中包含我已有的相同数据。我可以做些什么,使我的历史记录列表只包含唯一的值,基本上没有相同的行多次。 这是我的表单代码: <form method="get" autocomplete=
<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次有多少人可以从一台计算机注册/介绍?每台计算机只有一个人它工作..而且它太简单了,我甚至没有想到我在想更多的方法复杂的事情:有时我们看不到森林,看不到所有的树——我去过那里很多次(有时“太多了”)。祝你的项目好运。它很有效。它很简单,我甚至没有想到它。我在想更复杂的事情。它有帮助:)有时我们看不到所有的树的森林-我去过很多次(有时“太多”!)。祝你的项目好运。