简体   繁体   中英

how to avoid repetition of values in dropdown list while updating in php

I want to update "profile of a user" in php. There is a repetition of one value for two times in dropdown list. for example i take language value='Punjabi' from database but there is also a value placed in dropdown with name of 'Punjabi'. The issue is simply that there is a repetition of value which i don't want.

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

when a value='Punjabi' from database is selected in dropdown list, the dropdown should not show the value='Punjabi' that is already placed in dropdown. Remember: i have more than 1000 values in my dropdown(html) list.

screenshot

Instead of creating a new option according to the user data, Check if existing options are equal to user data:

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

If there are large number of options and you don't want to hard code these conditions, you can remove the second option using javascript on DOM ready:

$(document).ready(function(){
    $('option[value="<?php echo $queryArray["language"] ?>"]').eq(1).remove();
})

You have to use if condition to display values in select option.

 <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;

}

?>  
       <option value="Punjabi">Punjabi</option> 
       <option value="Hindi">Hindi</option> 
       <option value="Urdu">Urdu</option>                                            
    </select>

skip the loop when value is equal to Punjabi, Urdu and 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 } ?>                                            

You can use if elseif this way.

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

I think you are doing it wrong way the correct way would be having a table which stored all the languages along with values

using selected attribute to achieve your objective

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

So your problem is that you have html hardcoded options and database options. You need to merge them into one on that website. So you can use some javascript

    elements = [1, 2, 9, 15].join(',')
    $.post('post.php', {elements: elements})

But you can fill your elements like this is you don´t want to write it by hand

        $("#id select").each(function()
        {
            allOptionsInSelect.push($(this).val());
        });

Than on php side you can do

$elements = $_POST['elements'];
$elements = explode(',', $elements);

And now you have html hardcoded select on server side. Now you need to check if it doesn´t already exist when you are printing from database You can do that like this

if(in_array(value_from_database, $elements) {
  // It is so skip
} else {
 // It is not, so print it
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM