Php 如果任何$u POST等于另一个$u POST die(';error';);?
我正在尝试将此表格发送至: 如果任何$\u POST变量等于任何其他$\u POST变量,则抛出一个错误 如果只是几个,那就不是问题了,但我有大约20个 所以如果我想这么做,我就得像Php 如果任何$u POST等于另一个$u POST die(';error';);?,php,javascript,jquery,Php,Javascript,Jquery,我正在尝试将此表格发送至: 如果任何$\u POST变量等于任何其他$\u POST变量,则抛出一个错误 如果只是几个,那就不是问题了,但我有大约20个 所以如果我想这么做,我就得像 <?php if($_POST['input1']==$_POST['input2'] || $_POST['input1']==$_POST['input3']){ die('whatever'); } ?> 但这并不是一个好的编码(这将花费很长时间) 我想到了数组和
<?php
if($_POST['input1']==$_POST['input2'] || $_POST['input1']==$_POST['input3']){
die('whatever');
}
?>
但这并不是一个好的编码(这将花费很长时间)
我想到了数组和不同的方法
但是我已经脑死亡了,所以我想我可以得到一些帮助。。
提前谢谢
ps在PHP(服务器端)中这样做很好,但Jquery始终是一个选项。使用删除重复值,并检查它是否仍然等于您的数组:
if($_POST != array_unique($_POST))
die("...");
不太好,但是我想说你必须在一个双循环中完成它;虽然它是O(n^2),但在实践中不会有问题
foreach($_POST as $keya=>$vala) {
foreach($_POST as $keyb => $valb) {
if($vala == $valb && $keya != $keyb) {
die('whatever');
}
}
}
如果($\u POST==($\u POST)){}您可以执行以下操作:
$count_array = array_count_values($_POST);
foreach($_POST as $post) {
if($count_array[$post] >1 ) {
die();
}
}
这只是一个答案。更有效的实施办法是:
$post = array_value($_POST);
$count = count($post);
for ($i = 0; $i < $count; ++$i) {
for ($j = $i + 1; $j < $count; ++$j) {
if ($post[$i] == $post[$j]) {
die();
}
}
}
$post=array\u值($\u post);
$count=count($post);
对于($i=0;$i<$count;++$i){
对于($j=$i+1;$j<$count;++$j){
如果($post[$i]==$post[$j]){
模具();
}
}
}
这将保存所有的多重检查。所以它的结果是O(2*n)而不是O(n^2)(如果我把O的东西弄对的话)。虽然我不知道额外的
array\u值会降低多少速度
这是我的最终代码。。。所以基本上我把我想要的放进一个数组中
学分将归@akellehe,因为他的分数与我的最终成绩最接近
效果很好
$titles=array();
$num=1;
while($num!=15){
$set1='title'.$num;
$set2=$_REQUEST["title$num"];
$titles[$set1]=$set2;
unset($set1);
unset($set2);
$num+=1;
}
foreach($titles as $d => $p){
foreach($titles as $e =>$q){
if($p==$q && $d!=$e){
if(!empty($p)){
$_SESSION['error']='Duplicates not allowed!';
}
}
}
}
顺便说一句,die(“一些搞糟的消息”)不是处理错误的方法。@Hanse仍然比//TODO:fix meI只是以die为例更好。。。我很少使用die。@Hanse:你对处理错误消息有什么看法?我喜欢它的外观。。。。所以我可以像你一样使用它??或者如果($\u POST['a']!=array\u unique($\u POST)),我必须做什么?我将给出一个警告,函数在执行===操作之前将每个元素强制转换为字符串。这只适用于post变量,但如果您随意进入其他具有强制类型或特殊格式的数组,则可能会遇到一些问题。ok非常有用。。。只有一个问题。。。。我忘了有些是一样的。。。。。有什么建议吗??。。。a$post_a=$post['a'];未设置($_POST['a']);然后在检查工作完成后将其设置回去??您仍然可以执行
array_diff($\u POST,array_unique($\u POST))
并检查重复键。同样,执行$duplicatesArray=array_键(array_diff($\u POST,array_unique($\u POST))
检查这些值,如果它们在您的黑名单上,那么您将调用die()方法。[array_unique][1] ($\u POST)
do?还没有看到这种语法。哦,我明白了为什么这篇文章被写成[array\u unique][1]($\u POST)
。[array\u unique][1]
应该是一个链接,但萨弗雷斯编辑了这篇文章并弄乱了格式。
$post = array_value($_POST);
$count = count($post);
for ($i = 0; $i < $count; ++$i) {
for ($j = $i + 1; $j < $count; ++$j) {
if ($post[$i] == $post[$j]) {
die();
}
}
}
$titles=array();
$num=1;
while($num!=15){
$set1='title'.$num;
$set2=$_REQUEST["title$num"];
$titles[$set1]=$set2;
unset($set1);
unset($set2);
$num+=1;
}
foreach($titles as $d => $p){
foreach($titles as $e =>$q){
if($p==$q && $d!=$e){
if(!empty($p)){
$_SESSION['error']='Duplicates not allowed!';
}
}
}
}