Как отобразить значение в выпадающем меню на основе выбранных данных / идентификатора? - PullRequest
0 голосов
/ 06 апреля 2019

Ниже приведен мой код о том, как печатать или отображать данные из массива в раскрывающемся меню. Данные хранятся в API. Я использую для цикла для моего кода. Тем не менее, когда я запускаю с использованием кода ниже, он отображает более одного выпадающего списка. Я уже искал решение, но, тем не менее, оно не решило мою проблему. Заранее спасибо за помощь.

<div class="select" id="new-input" onselect="SelectStudents()"> 
<?php $i = 0; foreach ($arr['data'] as $key => $value) { ?> 
   <select required="<?php echo ($i == 0) ? 'required':''; ?>"> 
      <option value="<?php echo $value['studentName']; ?>">
         <?php echo $value['studentName']; ?>
      </option> 
   </select> 
<?php $i++; } ?>
</div>




// Data From API
"data": [
    {
        "TeacherID": "123",
        "TeacherName": "Miss Sara",
        "StudName": "Nina Simon",
    },
    {
        "TeacherID": "124",
        "TeacherName": "Madam Downy",
        "StudName": "Mike Dave",
    },
    {
        "TeacherID": "125",
        "TeacherName": "Mr. Adam",
        "StudName": "Jenny William",
    }
]

Я ожидаю, что если в меню щелкнуть Мисс Сара, в раскрывающемся меню будет загружено имя ученика в разделе Мисс Сара (это Нина Саймон).

1 Ответ

0 голосов
/ 06 апреля 2019

Ваш тег <select> находится внутри цикла, поэтому код создает элемент select для каждой итерации цикла.

Попробуйте:

<div class="select" id="new-input" onselect="SelectStudents()"> 

  <select required> 

    <?php foreach ($arr['data'] as $key => $value) { 

        echo '<option value="'.$value['studentName'].'">';
        echo       $value['studentName'];
        echo '</option>';

    } ?>  

  </select>

</div>

Что касается изменения элементов DOMв списке выберите: вероятно, лучше использовать JavaScript.Но если вам нужно сделать это на стороне сервера, вот идея функции, которую вы можете использовать, чтобы помочь вам:

function getStudents($teacherID, $arr) {
  foreach ($arr as $key => $record) { 
    if ($record['TeacherID'] == $teacherID){
        return $record['StudName'];
    }
  }
}

Я ожидаю, что если я щелкну Мисс Сара из меню, она загрузит студентов'имя под мисс Сара (это Нина Саймон) в выпадающем меню.

Итак, исходя из моего понимания, вы хотите что-то вроде этого.- Я использовал некоторые предположения о том, что происходит.- Я жестко закодировал данные как переменную php.- Первоначальный вопрос был о цикле foreach, поэтому я часто использовал его.

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
  <style type="text/css">
    a{
      display: block;
      margin-bottom: 1rem;
    }
    .card{
      padding: 1rem;
      background-color: #eee;
      width: 300px;
    }
    select{
      margin-top: 1rem;
      width: 300px;
    }
  </style>
</head>
<body>
<?php

  class StudentsClass
  {

    public function listStudents($teacherID, $arr) {
      foreach ($arr as $key => $record) { 
        if ($record['TeacherID'] == $teacherID){
            return $record['StudName'];
        }
      }
    }

    public function listTeachers($arr) {
      $s=[];
      foreach ($arr as $key => $record) { 
        $s[$record['TeacherID']] = $record['TeacherName'];
      }
      return $s;
    }
  }


  class DisplayHTML
  {


    public function selectHTML($list,$cssClass='') {
      $s='';
      if ($cssClass!='') $css = 'class="'.$cssClass.'" ' ; else $css = '';

      foreach ($list as $key => $item) { 
        $s.='<option '.$css.'value="'.$item.'">'.$item.'</option>';
      }
      $s = '<select>'.$s.'</select>';
      return $s;
    }

    public function anchorHTML($list,$cssClass='') {
      $s='';
      if ($cssClass!='') $css = 'class="'.$cssClass.'" ' ; else $css = '';
      foreach ($list as $key => $item) { 
        $s.='<a '.$css.'href="?teacherID='.$key.'">'.$item.'</a>';
      }
      return $s;
    }

    public function divHTML($id,$data) {
      $s='<div class="card"> <h2>My Student list</h2><ul id="studentlist"> </ul>';
      foreach ($data as $key => $item) { 
        if ($item['TeacherID']==$id){
          foreach ($item['StudName'] as $k => $value) {
            $s.='<li>'.$value.'</li>';
          }
          $s.='<h3>'.$item['TeacherName'].'</h3></div>';
          return $s;
        }
      }
      return '<div class="card">
        <h2>My Student list</h2><ul><li>-</li></ul>
        <h3>--</h3> </div>';
    }

  }


  $arr =  [
    [
        "TeacherID"=> "123",
        "TeacherName"=> "Miss Sara",
        "StudName"=> ["Nina","Simon"],
    ],
    [
        "TeacherID"=> "124",
        "TeacherName"=> "Madam Downy",
        "StudName"=> ["Mike","Dave"],
    ],
    [
        "TeacherID"=> "125",
        "TeacherName"=> "Mr. Adam",
        "StudName"=> ["Jenny","William"],
    ]
  ];



  $stlst = new DisplayHTML;
  $stdents = new StudentsClass;

  echo $stlst->anchorHTML($stdents->listTeachers($arr));
  if (isset($_GET['teacherID'])) {
    echo $stlst->divHTML($_GET['teacherID'],$arr);
    echo $stlst->selectHTML($stdents->listStudents($_GET['teacherID'],$arr));
  }


  ?>  


</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...