[RESOLU] Recherche doublon de $_post sur formulaire dynamique

Eléphanteau du PHP | 19 Messages

26 janv. 2018, 19:14

Bonjour à tous,

Si je suis là c'est que je galère depuis 3 jours sur un formule de doublon pour un formulaire dynamique.
J'entends formulaire dynamique par le fait que le formulaire peut se répéter plusieurs fois avec les mêmes champs sur la même page.

Mon formulaire dynamique :

Code : Tout sélectionner

$card_nbr = 3; // le nombre de formulaire à afficher sur la page, ce chiffre peut varier (je le récupère à la volée, ici 3 pour l'exemple) for ($i=0; $i<$card_nbr; $i++) { $ni = $i+1; echo '<strong>adhérent'.$ni.'</strong>'; ?> <div style=" width:100%; text-align:center"> <div style="float:left; width:30%; text-align:left; color:#001040"><?php echo ENTRY_LASTNAME; ?></div> <div style="float:left; text-align:left;"><input type="text" name="lastname[]" value="<?php echo $lastname[$i];?>"></div> <div class="clearfix"></div> <div style="float:left; width:30%; text-align:left; color:#001040"><?php echo ENTRY_FIRSTNAME; ?></div> <div style="float:left; text-align:left;"><input type="text" name="firstname[]" value="<?php echo $firstname[$i];?>"></div> <div class="clearfix"></div> <div style="float:left; width:30%; text-align:left; color:#001040""><?php echo ENTRY_EMAIL; ?></div> <div style="float:left; text-align:left;"><input type="text" name="email[]" value="<?php echo $email[$i];?>"></div> <div class="clearfix"></div> <div style="float:left; width:30%; text-align:left; color:#001040""><?php echo ENTRY_TEL; ?></div> <div style="float:left; text-align:left;"><input type="text" name="tel[]" value="<?php echo $tel[$i];?>"></div> <div class="clearfix"></div> <div style="float:left; width:30%; text-align:left; color:#001040""><?php echo ENTRY_CITY; ?></div> <div style="float:left; text-align:left;"><input type="text" name="city[]" value="<?php echo $city[$i];?>"></div> <div class="clearfix"></div> </div> <?php } ?>


Pour une recherche de doublons dans la base de données pas de problème.

Mais avant d'enregistrer dans ma base je voudrais rechercher si les formulaires envoyés ne contiennent pas le même nom et prénom pour éviter d'enregistrer 2 fois la même personne à la volée.

Pour le moment je teste que sur le nom.

1er essai : doublon ou pas doublon même résultat

Code : Tout sélectionner

$lastname = $_POST['lastname']; $firstname = $_POST['firstname']; $email = $_POST['email']; $tel = $_POST['tel']; $city = $_POST['city']; for ($i = 0, $count = count($lastname); $i < $count; $i++){ if ($lastname[$i] == $lastname[$i++]) { $error_doublon = true; } } if($error_doublon == true){ echo ERROR_DOUBLON; }

2eme essai : avec une fonction "existenceDoublons" qui utilise "array" mais ça ne prend pas en compte la liste des noms dynamiques.
erreur => array_count_values() expects parameter 1 to be array, string given

Code : Tout sélectionner

$lastname = $_POST['lastname']; $firstname = $_POST['firstname']; $email = $_POST['email']; $tel = $_POST['tel']; $city = $_POST['city']; function existenceDoublons($tableau){ $doublons = false; // valeur pas défaut $freq = array_count_values($tableau); // frequence de chaque valeur du $tableau foreach ($freq as $valeur){ if ($valeur != 1){ $doublons = true; break; // on sort de la boucle } } return $doublons; } for ($i = 0, $count = count($lastname); $i < $count; $i++){ $a.= $lastname[$i].", "; } $liste = substr($a, 0, -2); if(existenceDoublons($liste) == true){ echo ERROR_DOUBLON; }
Je solicite donc votre aide pour m'orienté.
Merci à vous de prendre du temps pour voir cela.

Hugo_064

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 janv. 2018, 20:56

Bonjour,

Ta fonction attend en paramètre un tableau PHP, et toi tu l'appelles en lui passant une chaine de caractère (concaténation avec des virgules), c'est normal que ça ne marche pas.
Donc soit tu crée un tableau PHP (cf https://php.net/array) soit tu modifies ta fonction pour prendre une chaine de caractère séparée par des virgules (par exemple en utilisant explode() pour transformer ta liste en tableau
https://php.net/explode
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 19 Messages

27 janv. 2018, 17:51

Bonjour,

J'ai réussis à faire le test de doublon sur le nom et le prénom en utilisant explode et en faisant des boucles foreach

Code : Tout sélectionner

$lastname = tep_db_prepare_input($_POST['lastname']); $firstname = tep_db_prepare_input($_POST['firstname']); $email = tep_db_prepare_input($_POST['email']); $tel = tep_db_prepare_input($_POST['tel']); $city = tep_db_prepare_input($_POST['city']); // on crée la chaine for ($i = 0, $count = count($lastname); $i < $count; $i++){ $a.= $_POST['lastname'][$i].'&nbsp;'.$_POST['lastname'][$i].","; } // on reduit la chaine $liste_r = substr($a, 0, -1); // on decoupe la chaine $liste = explode(',', $liste_r); // chaine en minuscule foreach($liste as $w){ $wordstats[strtolower($w)]++; } //compte les doubles foreach($wordstats as $k=>$v){ if($v>=2){ $error = true; echo ERROR_DOUBLE_TMP.$k; } }
Grand merci à toi Hartur.

Hugo_064