2010-08-26 9 views
3

J'essaye d'obtenir ce formulaire à:

si n'importe quelles variables $ _POST égal à n'importe quel autre $ _POST vars jettent une erreur.

si elle était juste un peu ce ne serait pas un problème, mais je 20 ou si donc si je voulais le faire, je dois aller comme

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

    ?> 

Mais ce n'est pas bon codage (et il faudrait toujours) Je pensais que sur les tableaux et les différentes façons ...

mais je suis mort cérébrale atm donc je pensais que je pouvais obtenir de l'aide .. merci à l'avance

ps il serait agréable de est ce que je t en PHP (côté serveur) mais Jquery est toujours une option.

+0

BTW, meurent ('un message de foiré') n'est pas la façon de gérer les erreurs. – Hanse

+0

@Hanse encore mieux que // TODO: corrige-moi – Ishtar

+0

Je n'utilisais que die comme exemple ... J'utilise rarement die. – Luke3butler

Répondre

1
function testPost(){ 
foreach ($_POST as $keya=>$vala){ 
    foreach($_POST as $keyb=>$valb){ 
     if ($keya==$keyb){ 
      continue; 
     } else { 
      if ($vala == $valb){ 
       return FALSE; 
      } 
     } 
    } 
} 
return TRUE; 
} 
16

Supprimer les valeurs en double avec array_unique() et vérifier si elle correspond à toujours à votre tableau:

if($_POST != array_unique($_POST)) 
    die("..."); 
+2

+1! C'est l'argent juste là! –

+0

J'aime les regards de cela .... donc je peux l'utiliser EXACTEMENT comme vous l'avez là ?? ou dois-je faire si ($ _ POST ['a']! = array_unique ($ _ POST)) ???? – Luke3butler

+0

Vous pouvez utiliser directement ceci –

0
$postValues = array_values($_POST); 

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

pas si bon, mais

0

Je dirais que vous avez à faire dans une double boucle; alors qu'il est O (n^2), ça va pas être problématique dans la pratique

foreach($_POST as $keya=>$vala) { 
    foreach($_POST as $keyb => $valb) { 
     if($vala == $valb && $keya != $keyb) { 
      die('whatever'); 
     } 
    } 
} 
2

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

+1

Que fait [[array_unique] [1] ($ _ POST) '? Je n'ai pas vu cette syntaxe. –

+0

produit une erreur d'analyse pour moi sous PHP 5.3 – tamasd

+0

Oh, je vois pourquoi le message est écrit comme '[array_unique] [1] ($ _ POST)'. Le '[array_unique] [1]' est censé être un lien, mais Sarfraz a édité le post et a foiré la mise en forme. –

0

Vous pouvez faire:

$count_array = array_count_values($_POST); 
foreach($_POST as $post) { 
    if($count_array[$post] >1) { 
    die(); 
} 
} 
1

Ceci est seulement une réponse à zebediah49's post. Une implémentation plus efficace serait:

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

Cela permet d'économiser toutes les vérifications multiples. Donc, il en résulte O (2 * n) au lieu de O (n^2) (si j'ai obtenu ce truc O droite). Bien que je ne sais pas combien cela est ralenti par le array_values supplémentaire.

0

Ceci est mon code final ... donc en gros je suis en train de ceux que je veux dans un tableau

crédits iront à @akellehe parce que son était le plus proche de mon résultat final ....

grands travaux

$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!'; 
      } 
      } 
      } 
     }