Page 1 sur 1

Recherche doublon de $_post sur formulaire dynamique

Posté : 26 janv. 2018, 19:14
par hugo_064
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

Re: Recherche doublon de $_post sur formulaire dynamique

Posté : 26 janv. 2018, 20:56
par @rthur
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

Re: Recherche doublon de $_post sur formulaire dynamique

Posté : 27 janv. 2018, 17:51
par hugo_064
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