8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'aime un petit soucis. En effet j'ai 5 $_POST : $_POST['list_equips_1'], $_POST['list_equips_2'], $_POST['list_equips_3'], $_POST['list_equips_4'] et $_POST['list_equips_5'].

J'aimerais en fait vérifier si 2 post on la même valeur.

J'ai fais ceci :

if (in_array($_POST['list_equips_1'], array($_POST['list_equips_2'], $_POST['list_equips_3'], $_POST['list_equips_4'], $_POST['list_equips_5']))) { }


Mais ca vérifie uniquement le POST numéro 1, et je pense qu'il existe surement une méthode plus simple, plutot que mettre 5 ligne de ce genre à la suite.

Quelqu'un pourrait t'il m'aider ?
Salut,


if (count(array_unique(array($_POST['list_equips_1'], $_POST['list_equips_2'], $_POST['list_equips_3'], $_POST['list_equips_4'] et $_POST['list_equips_5']), SORT_STRING) < 5)
{
    //au moins une valeur est identique
}

ou
$i = 1;
while($i < 5)
{
    if ($_POST['list_equips_'.$i] === $_POST['list_equips_'.(++$i)])
        break;
}
if ($i !== 5)
{
    //au moins une valeur est identique ('list_equips_'.$i avec 'list_equips_'.($i-1))
}
J'ai essayé ton premier code :

if (count(array_unique(array($_POST['list_equips_1'], $_POST['list_equips_2'], $_POST['list_equips_3'], $_POST['list_equips_4'],$_POST['list_equips_5']), SORT_STRING) < 5)) 


Mais visiblement il y a un problème, puisqu'avec des $_POST ayant chacun une valeur différente, j'ai quand même le if qui est vrai.
Au passage je ne comprends pas bien pourquoi tu n'utilises pas un array dans le formulaire :
<?php
$erreurs = array();
$nb_listes = 5;

// Initialisation ou récupération des variables
for($i=0; $i<$nb_listes; $i++) {
	$list_equips[$i] = !empty($_POST['list_equips'][$i]) ? trim($_POST['list_equips'][$i]) : '';
}

if($_SERVER['REQUEST_METHOD']=='POST') {
	$list_temp = $list_equips;
	sort($list_temp);
	// chaque champ liste est obligatoire
	if(empty($list_temp[0])) {
		$erreurs[] = 'Saisir toutes les listes.';
	} else {
		// chaque champ liste doit être unique
		for($i=1; $i<$nb_listes; $i++) {
			if($list_temp[$i] == $list_temp[$i-1]) {
				$erreurs[] = 'Chaque liste doit être unique.';
			}
		}
	}
	// Aucune erreur...
	if(empty($erreurs)) {
		// Traitement 
		header('Location: confirmation.php'); // Redirection vers la page de confirmation
	}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
<style type="text/css" media="screen">
.alerte {
	color: #FF0033;
	font-weight: bold;
}
</style>
</head>
<body>
<?php
if(!empty($erreurs)) {
	foreach($erreurs as $erreur) {
		echo '<p class="alerte">'.$erreur."</p>\n";
	}
}
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
<?php
for($i=0; $i<$nb_listes; $i++) {
	echo '<p><label for="list_equips_'.$i.'">Liste Equipe '.($i+1).' : </label>';
	echo '<input type="text" name="list_equips[]" id="list_equips_'.$i.'" value="'.$list_equips[$i].'" /></p>';
}
?>
	<p>
		<input type="submit" />
	</p>
</form>
</body>
</html>
Hop, me suis trompé dans le deuxième code
for ($depart = 1; $depart <= $nb_total; ++$depart)
{
	for ($i = $depart+1; $i <= $nb_total; ++$i)
	{
		if ($_POST['list_potions_'.$depart] === $_POST['list_potions_'.$i])
			break;
	}
	//vérifie que la boucle c'est arrêter dû à une variable identique
	if ($i <= $nb_total)
		break;
}

if ($depart <= $nb_total)
{
	echo 'test';
}


Si tu fait en sort que ton formulaire retourne un tableau, le traitement est plus simple.
//on pourrait également vérifier que le tableau possède le bon nombre de variable, les bonnes clés ou/et le bon type de valeur
if (isset($_POST['list_equips']) && is_array($_POST['list_equips']))
{
	var_dump($_POST['list_equips']);
	if (count(array_unique($_POST['list_equips']), SORT_STRING) < count($_POST['list_equips']))
	{
		echo 'test';
	}
}


bonne nuit