Я пытаюсь получить эту форму:
Если какие-либо переменные $ _POST равны любым другим переменным $ _POST, выдается ошибка.
Если бы это было всего лишь несколько, это не было бы проблемой, но у меня есть приблизительно 20 или около того, поэтому, если бы я хотел сделать это, мне пришлось бы пойти как
<?php
if($_POST['input1']==$_POST['input2'] || $_POST['input1']==$_POST['input3']){
die('whatever');
}
?>
Но это нехорошее кодирование (и это заняло бы вечность). Я думал о массивах и разных способах ...
Но я сумасшедший банкомат, поэтому я подумал, что смогу помочь ... заранее спасибо
PS было бы неплохо сделать это на PHP (на стороне сервера), но Jquery всегда есть вариант.
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;
}
Это мой окончательный код ... так что в основном я помещаю те, которые я хочу, в массив
Кредиты пойдут на @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!';
}
}
}
}
Ты можешь сделать:
$count_array = array_count_values($_POST);
foreach($_POST as $post) {
if($count_array[$post] >1 ) {
die();
}
}
Я бы сказал, что вы должны сделать это в двойной петле; хотя это O (n ^ 2), на практике это не будет проблематичным
foreach($_POST as $keya=>$vala) {
foreach($_POST as $keyb => $valb) {
if($vala == $valb && $keya != $keyb) {
die('whatever');
}
}
}
$postValues = array_values($_POST);
if (array_unique($postValues)) != $postValues) {
die('error!');
}
Не очень хорошо, но
Это только ответ на сообщение 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
.
If ($ _POST == array_unique ($ _POST)) {}
Удалите повторяющиеся значения с помощью array_unique()
и проверьте, по-прежнему ли это равно вашему массиву:
if($_POST != array_unique($_POST))
die("...");
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.