Я пытаюсь получить эту форму:

Если какие-либо переменные $ _POST равны любым другим переменным $ _POST, выдается ошибка.

Если бы это было всего лишь несколько, это не было бы проблемой, но у меня есть приблизительно 20 или около того, поэтому, если бы я хотел сделать это, мне пришлось бы пойти как

    <?php 
    if($_POST['input1']==$_POST['input2'] || $_POST['input1']==$_POST['input3']){
die('whatever');
}

    ?>

Но это нехорошее кодирование (и это заняло бы вечность). Я думал о массивах и разных способах ...

Но я сумасшедший банкомат, поэтому я подумал, что смогу помочь ... заранее спасибо

PS было бы неплохо сделать это на PHP (на стороне сервера), но Jquery всегда есть вариант.

3
Luke3butler 26 Авг 2010 в 22:33

8 ответов

Лучший ответ
function testPost(){
foreach ($_POST as $keya=>$vala){
    foreach($_POST as $keyb=>$valb){
        if ($keya==$keyb){
            continue;
        } else {
            if ($vala == $valb){
                 return FALSE;
            }
        }
    }
}
return TRUE;
}
1
KeatsKelleher 26 Авг 2010 в 18:37

Это мой окончательный код ... так что в основном я помещаю те, которые я хочу, в массив

Кредиты пойдут на @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!';
            }
            }
            }
        }
0
Luke3butler 26 Авг 2010 в 19:42

Ты можешь сделать:

$count_array = array_count_values($_POST);
foreach($_POST as $post) {
  if($count_array[$post] >1 ) {
    die();
 }
}
0
codaddict 26 Авг 2010 в 18:38

Я бы сказал, что вы должны сделать это в двойной петле; хотя это O (n ^ 2), на практике это не будет проблематичным

foreach($_POST as $keya=>$vala) {
    foreach($_POST as $keyb => $valb) {
        if($vala == $valb && $keya != $keyb) {
            die('whatever');
        }
    }
}
0
zebediah49 26 Авг 2010 в 18:38
$postValues = array_values($_POST);

if (array_unique($postValues)) != $postValues) {
    die('error!');
}

Не очень хорошо, но

0
bobrik 26 Авг 2010 в 18:38

Это только ответ на сообщение zebediah49. Более эффективная реализация будет:

$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();
        }
    }
}

Это сохраняет все несколько проверок. Таким образом, это приводит к O (2 * n) вместо O (n ^ 2) (если я правильно понял, что O). Хотя я не знаю, насколько это замедляется дополнительными array_values.

1
Community 23 Май 2017 в 12:26

If ($ _POST == array_unique ($ _POST)) {}

2
NikiC 26 Авг 2010 в 19:12

Удалите повторяющиеся значения с помощью array_unique() и проверьте, по-прежнему ли это равно вашему массиву:

if($_POST != array_unique($_POST))
    die("...");
16
Colin Hebert 26 Авг 2010 в 18:37