Je souhaite mettre à jour le "profil d'un utilisateur" en php. Il y a une répétition d'une valeur deux fois dans la liste déroulante. par exemple, je prends la valeur de la langue = 'Punjabi' de la base de données mais il y a aussi une valeur placée dans la liste déroulante avec le nom de 'Punjabi'. Le problème est simplement qu'il y a une répétition de valeur dont je ne veux pas.
<?php $result=mysqli_query($conn, "select * from profile where id=$firstPerson"); while($queryArray=mysqli_fetch_array($result)){ ?> <select name="language" id="language" > <option value='<?php echo $queryArray["language"];?> '> <?php echo $queryArray["language"]; ?></option> //for example, the value from database is "Punjabi" <option value="Hindi">Hindi</option> <option value="Punjabi">Punjabi</option> <option value="Urdu">Urdu</option> </select> <?php } ?>
quand une valeur = 'Punjabi' de la base de données est sélectionnée dans la liste déroulante, la liste déroulante ne doit pas afficher la valeur = 'Punjabi' qui est déjà placée dans la liste déroulante. N'oubliez pas: j'ai plus de 1000 valeurs dans ma liste déroulante (html).
6 Réponses :
Au lieu de créer une nouvelle option en fonction des données utilisateur, vérifiez si les options existantes sont égales aux données utilisateur:
$(document).ready(function(){ $('option[value="<?php echo $queryArray["language"] ?>"]').eq(1).remove(); })
S'il y a un grand nombre d'options et que vous ne voulez pas coder en dur ces conditions, vous pouvez supprimer la deuxième option en utilisant javascript sur DOM prêt:
<select name="language" id="language" > <option value="Punjabi" <?php if ($queryArray["language"]=="Punjabi"){echo 'selected="selected"'} ?>>Punjabi</option> <option value="Hindi" <?php if ($queryArray["language"]=="Hindi"){echo 'selected="selected"'} ?>>Hindi</option> <option value="Urdu" <?php if ($queryArray["language"]=="Urdu"){echo 'selected="selected"'} ?>>Urdu</option> </select>
ce n'est pas possible car j'ai une liste déroulante contenant plus de 1000 valeurs.
Ces valeurs sont-elles lues à partir d'une base de données ou codées en dur? @SajjadAli
D'accord. J'ai ajouté une solution jquery à ma réponse. @SajjadAli
Si c'est bien, vous pouvez voter pour la réponse: D Cela fonctionne certainement. @digijay OH! vouliez-vous dire le point d'interrogation inversé? c'est d'accord maintenant.
Vous devez utiliser la condition if pour afficher les valeurs dans l'option de sélection.
?> <option value="Punjabi">Punjabi</option> <option value="Hindi">Hindi</option> <option value="Urdu">Urdu</option> </select>
}
<select name="language" id="language" > <?php $result=mysqli_query($conn, "select * from profile where id=$firstPerson"); while($queryArray=mysqli_fetch_array($result)){ if($queryArray["language"]!="Punjabi") { $opval = "<option value=" . $queryArray["language"] . ">". $queryArray["language"]. " </option> " echo $opval;
Je ne veux pas arrêter uniquement la langue "punjabi", le punjabi est venu de db et également placé dans la liste déroulante html et les deux sont affichés dans la liste déroulante html, mais je veux qu'un seul "punjabi" devrait apparaître dans la liste déroulante
La logique n'ajoutera pas de valeur dans l'option de sélection en raison de la condition if.
ignorez la boucle lorsque la valeur est égale à punjabi, ourdou et hindi.
<?php $result=mysqli_query($conn, "select * from profile where id=$firstPerson"); while($queryArray=mysqli_fetch_array($result)){ ?> <select name="language" id="language" > <?php if($queryArray["language"]!="Punjabi" && $queryArray["language"]!="Urdu" && $queryArray["language"]!="Hindi") { ?> <option value="Hindi">Hindi</option> <option value="Punjabi">Punjabi</option> <option value="Urdu">Urdu</option> <?php } ?>
je n'ai pas seulement ces trois valeurs. Il y a plus de 1000 valeurs que j'ai dans la liste déroulante html.
obtenez-vous des valeurs en double de la base de données?
Vous pouvez utiliser if elseif de cette façon.
<select name="language" id="language" > <option value='<?php echo $queryArray["language"];?>'><?php echo $queryArray["language"]; ?></option> <?php if ($queryArray["language"] == "Hindi") { ?> <option value="Punjabi">Punjabi</option> <option value="Urdu">Urdu</option> <?php } elseif ($queryArray["language"] == "Urdu") { ?> <option value="Punjabi">Punjabi</option> <option value="Hindi">Hindi</option> <?php } elseif ($queryArray["language"] == "Punjabi") { ?> <option value="Urdu">Urdu</option> <option value="Hindi">Hindi</option> <?php } ?>
le code ci-dessus aura toujours trois langues (hindi, punjabi et ourdou) dans la liste déroulante sans répétition.
Je pense que vous ne le faites pas correctement. La bonne façon serait d'avoir une table qui stocke toutes les langues avec les valeurs
en utilisant l'attribut selected pour atteindre votre objectif
<?php $result=mysqli_query($conn, "select * from profile where id=$firstPerson"); $queryArray1=mysqli_fetch_array($result); $langOfUser=$queryArray1["language"]; ?> <select name="language" id="language" > <?php $result=mysqli_query($conn, "select * from langtab"); while($queryArray=mysqli_fetch_array($result)){ ?> <option value='<?php echo $queryArray["languageValue"];?> ' <?php if($langOfUser== $queryArray["languageValue"]){ echo 'selected';}?>> <?php echo $queryArray["languageName"]; ?></option> <?php } ?> </select>
Donc votre problème est que vous avez des options codées en dur HTML et des options de base de données. Vous devez les fusionner en un seul sur ce site Web. Vous pouvez donc utiliser du javascript
if(in_array(value_from_database, $elements) { // It is so skip } else { // It is not, so print it }
Mais vous pouvez remplir vos éléments comme ceci si vous ne voulez pas l’écrire à la main
$elements = $_POST['elements']; $elements = explode(',', $elements);
Que du côté php, vous pouvez faire
$("#id select").each(function() { allOptionsInSelect.push($(this).val()); });
Et maintenant vous avez une sélection html codée en dur côté serveur. Maintenant, vous devez vérifier s'il n'existe pas déjà lorsque vous imprimez à partir de la base de données Vous pouvez le faire comme ceci
elements = [1, 2, 9, 15].join(',') $.post('post.php', {elements: elements})
toutes les langues sont-elles présentes dans la base de données
Dans la boucle, pourquoi
est-il présent? ça cause la répétition je pense
et est-ce que
sélectionner une langue distincte dans le profil ...
ne fonctionnerait pas? Aussi, pourquoi avoir l'élémentselect
lui-même dans la boucle ??Merci à tous. @Ali Sheikhpour a répondu à cette question.