2
votes

comment éviter la répétition des valeurs dans la liste déroulante lors de la mise à jour en php

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).

capture d'écran


4 commentaires

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ément select lui-même dans la boucle ??


Merci à tous. @Ali Sheikhpour a répondu à cette question.


6 Réponses :


1
votes

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>


4 commentaires

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.



0
votes

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;


2 commentaires

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.



0
votes

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 } ?>                                            


2 commentaires

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?



0
votes

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 } ?>


1 commentaires

le code ci-dessus aura toujours trois langues (hindi, punjabi et ourdou) dans la liste déroulante sans répétition.



0
votes

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> 


0 commentaires

0
votes

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})


0 commentaires