как избежать повторения значений в выпадающем списке при обновлении в php - PullRequest
0 голосов
/ 01 января 2019

Я хочу обновить "профиль пользователя" в php.В раскрывающемся списке дважды повторяется одно значение.например, я беру значение языка = 'пенджаби' из базы данных, но есть также значение, помещенное в выпадающий список с именем 'пенджаби'.Проблема в том, что есть повторение значения, которое я не хочу.

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

, если в раскрывающемся списке выбрано значение = «Пенджаби» из базы данных, в раскрывающемся списке не должно отображаться значение = «Пенджаби», которое уже помещено в раскрывающийся список.Помните: в моем раскрывающемся (html) списке более 1000 значений.

снимок экрана

Ответы [ 6 ]

0 голосов
/ 01 января 2019

Итак, ваша проблема в том, что у вас есть html-параметры и параметры базы данных.Вам нужно объединить их в один на этом сайте.Таким образом, вы можете использовать некоторые javascript

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

Но вы можете заполнить свои элементы так, как будто вы не хотите писать это вручную

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

Чем на стороне php вы можете сделать

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

И теперь у вас есть html-код, выделенный на стороне сервера.Теперь вам нужно проверить, если он еще не существует, когда вы печатаете из базы данных. Вы можете сделать это следующим образом

if(in_array(value_from_database, $elements) {
  // It is so skip
} else {
 // It is not, so print it
}
0 голосов
/ 01 января 2019

Я думаю, что вы делаете это неправильно, так как правильно будет иметь таблицу, в которой хранятся все языки вместе со значениями

с использованием атрибута selected для достижения вашей цели

<?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 голосов
/ 01 января 2019

Вы можете использовать, если еще, таким образом.

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

0 голосов
/ 01 января 2019

пропустить цикл, когда значение равно панджаби, урду и хинди.

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

0 голосов
/ 01 января 2019

Вы должны использовать условие if для отображения значений в опции выбора.

 <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>
0 голосов
/ 01 января 2019

Вместо создания новой опции в соответствии с пользовательскими данными, проверьте, совпадают ли существующие опции с пользовательскими данными:

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

Если существует большое количество опций, и вы не хотите использовать жесткий кодэти условия, вы можете удалить второй вариант, используя JavaScript на DOM Ready:

$(document).ready(function(){
    $('option[value="<?php echo $queryArray["language"] ?>"]').eq(1).remove();
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...