Php 如何确定提交的值是否来自自动完成脚本?
在我的表单中有一个文本框和提交按钮。当用户开始输入时,在第三个字母之后,自动完成脚本就发挥了神奇的作用 有两种可能性Php 如何确定提交的值是否来自自动完成脚本?,php,mysql,Php,Mysql,在我的表单中有一个文本框和提交按钮。当用户开始输入时,在第三个字母之后,自动完成脚本就发挥了神奇的作用 有两种可能性 用户键入一个单词,有匹配项,然后单击一个匹配项。此选定的匹配项将添加到文本框中,然后点击提交按钮 用户键入一个单词,没有匹配项,但他决定点击submit按钮,而不选择其中一个建议选项 我的问题是如何确定他是在案例1还是案例2中按下了按钮 rpc.php是通过mySQL查找建议值的文件 一个解决方案是检查数据库中是否存在字符串,但我不希望这样 另一个解决方案是转换jQuery脚本和
<script type="text/javascript">
$().ready(function() {
$("#s").autocomplete("rpc.php", {
width: 250,
selectFirst: false,
minChars: 3,
scroll:true,
matchContains: true,
scrollHeight: 250
});
});
</script>
<form method="get" action=".php">
<input type="text" name="s" id="s" class="inputsearch">
<input type="submit">
</form>
$().ready(函数()){
$(“#s”).autocomplete(“rpc.php”{
宽度:250,
selectFirst:false,
明查斯:3,
卷轴:没错,
对,,
卷轴高度:250
});
});
最简单的方法是修改自动完成
插件本身,以便在用户从中选择值时设置标志,并在用户修改其选择时清除标志。标志可以在任何地方,但为了简单起见,我建议使用隐藏的表单字段,如:
<form method="get" action=".php">
<input type="text" name="s" id="s" class="inputsearch">
<input type="hidden" id="flag" name="inputCameFromAutocomplete" value="false">
<input type="submit">
</form>
如果您愿意,您可以将flag元素的id/选择器作为plugin-config/options的一部分,以便它更易于重用
您还需要执行以下操作:
$("#flag").val("true");
$("#s").keypress(function() {
$("#flag").val("false");
});
…作为初始设置的一部分,因此每当用户手动在字段中键入内容时,就会重置标志。使用autocomplete的
change
方法在表单中设置标志,例如
/// Create an hidden element to store the flag value,
/// 1 for AC used, 0 for user entered
var flag = $("<input>").attr("type", "hidden")
.attr("name", "ac_flag")
.val(0);
// append flag to form
$("form").append(flag);
$("#s").autocomplete("rpc.php", {
change: function(event, ui) {
flag.val(ui.item != null ? 1 : 0);
},
// and the rest
});
///创建一个隐藏元素来存储标志值,
///1表示使用空调,0表示用户输入
变量标志=$(“”).attr(“类型”,“隐藏”)
.attr(“名称”、“ac_标志”)
.val(0);
//将标志附加到窗体
$(“表格”)。附加(标志);
$(“#s”).autocomplete(“rpc.php”{
更改:功能(事件、用户界面){
flag.val(ui.item!=null?1:0);
},
//其余的呢
});
当文本字段中的值更改时,“更改”事件将触发。选择AC项时,ui。项
将包含对列表中所选项的对象引用。如果未进行选择,即用户仅输入文本,ui.item
将为空
然后,表单处理程序可以检查$\u GET['ac\u flag']
,以确定值是否来自自动完成列表
这里的快速模型示例-rpc.php必须返回一个数组供自动完成使用,仔细查看该数组,如果提交的单词在数组中,则可以继续(无论是用自动完成还是键入)这将导致一个
false
标志,即使用户输入了iphone case black
,这大概可以在MySQL查询中使用。。。。虽然OP中不清楚这是不希望的还是希望的。如果用户幸运地键入了iphone case black
,系统必须将其标识为用户条目。@Peter-是的,避免这种情况的唯一方法是在提交时重复最后一组建议,查看它是否包含与输入完全匹配的值。这可能还必须作为自动完成插件的内部修改来完成。另一种方法是,如果用户单击建议的名称,则不会将其放入文本框,而是将其带到文本框中。(链接将在rpc.php中编码,这不是交易)。我试过了,但它把它放在了文本框里。(您必须右键单击“在新选项卡中打开”才能按我的要求操作)@JPampos-这应该适合您。如果用户输入iphone手机壳为黑色
,它将被视为用户输入。如果他们从“自动完成”对话框中选择它,则它将被视为自动完成选择。将用户自动带到链接也会起作用,但它会删除用户在选择自动完成建议后手动编辑建议的能力。嗨,你能给我解释一下吗。我也更新了我的问题。