2016-09-20 3 views
1

Я проектирую школьный портал. Мне нужна ситуация, когда учитель может выбрать конкретный предмет из списка предметов в моем столе и ввести десятки учеников.Как выбрать конкретное поле таблицы динамически?

После этого в базе данных вводятся оценки отдельных учащихся выбранных предметов.

Ниже представлена ​​моя структура таблицы.

my table structure

форма генерируется в то время цикла. Идея состоит в том, чтобы сразу же набрать несколько учеников.

Form for the scores

Ниже мой код. Пожалуйста, что я делаю неправильно?

$moreDetails = mysqli_query(
    $con, 
    "select id,reg_num,$subject,term,pin from ca where class='$class'" 
); 
if ($moreDetails) { 
    while($row = mysqli_fetch_assoc($moreDetails)){ 
     $id = $row['id']; 
     $reg = $row['reg_num']; 
     $sub = $row[$subject]; 
     echo " 
      <tr> 
       <td>$id</td> 
       <td>$reg</td> 
       <td><label for='score'></label> 
        <input type='text' class='form-control' name='$sub' /> 
        <input type='hidden' name='assessment'/> 
       </td> 
      </tr> 
     "; 
    } 
} 
+0

Вы код уязвим для атак SQL-инъекций. скрытый ввод не имеет никакой цели.Что вы делаете неправильно? хороший вопрос ... вы не смогли объяснить, что не работает ... – NDM

+0

Им очень беспокоило, что '$ subject' является столбцом в базе данных ... – NDM

+0

Вам нужно описать вашу точную проблему. Но '$ sub' будет целочисленным значением, которое, по-видимому, не является вашим предполагаемым результатом. Используйте '' SELECT * FROM ca WHERE class = '$ class' "', затем измените свой контроль формы ' ' – fyrye

ответ

0

В соответствии с вашими комментариями вы хотите связать записи формы с соответствующими строками базы данных, студентами или другим идентификатором.

Чтобы связать поля формы, вам необходимо отправить form fields as an array значений для скрипта обновления для обработки. Вы делаете это, используя квадратные скобки в качестве суффикса атрибута имени поля формы. Например, name="field[]" и необязательно поставлять общий идентификатор, такой как идентификатор строки таблицы базы данных, чтобы не возникало проблем с отсутствующими записями.

Просмотр данных

<?php 
while ($row = mysqli_fetch_assoc($moreDetails)) { 
    $id = $row['id']; 
    $reg = $row['reg_num']; 
    $sub = $row[$subject]; 
    ?> 
    <tr> 
     <td><?php echo $id; ?></td> 
     <td><?php echo $reg; ?></td> 
     <td> 
      <label for="score_<?php echo $id; ?>"></label> 
      <input id="score_<?php echo $id; ?>" type="text" class="form-control" name="student[<?php echo $id; ?>][score]" /> 
      <input type='hidden' name='student[<?php echo $id; ?>][assessment]'/> 
     </td> 
    </tr> 
<?php } ?> 

Который даст вам результирующую из $_POST значения, похожее на это.

array(1) { 
    ["student"]=> 
    array(3) { 
    ["86236762057e1df012e662"]=> 
    array(2) { 
     ["score"]=> 
     string(1) "a" 
     ["assessment"]=> 
     string(1) "A" 
    } 
    ["40443582357e1df012e668"]=> 
    array(2) { 
     ["score"]=> 
     string(1) "b" 
     ["assessment"]=> 
     string(1) "A" 
    } 
    ["112264948957e1df012e66c"]=> 
    array(2) { 
     ["score"]=> 
     string(1) "c" 
     ["assessment"]=> 
     string(1) "A" 
    } 
    } 
} 

Затем нужно обработать массив данных в обновлении или вставить запрос и добавить свой собственный перехват ошибок и условий для формирования запросов к вашим потребностям.

Вставьте контроллер

if (false === empty($_POST['student'])) { 
    $queryValues = array(); 
    foreach ($_POST['student'] as $id => $student) { 
     $queryValues[] = "('" . $id . "', '" . $student['score'] . "')"; 
    } 
    echo 'INSERT INTO ca (id, score) VALUES ' . implode(', ', $queryValues); 
} 

Вставка Результат запроса

INSERT INTO ca (id, score) VALUES ('86236762057e1df012e662', 'a'), ('40443582357e1df012e668', 'b'), ('112264948957e1df012e66c', 'c') 

Контроллер Update

if (false === empty($_POST['student'])) { 
    foreach ($_POST['student'] as $id => $student) { 
     echo "UPDATE ca 
       SET score = '" . $student['score'] . "' 
       WHERE id = '" . $id . "'"; 
    } 
} 

Обновление запросов Результат

UPDATE ca SET score = 'a' WHERE id = '86236762057e1df012e662' 
UPDATE ca SET score = 'b' WHERE id = '40443582357e1df012e668' 
UPDATE ca SET score = 'c' WHERE id = '112264948957e1df012e66c' 

Как отмечают передовой практики, я настоятельно призываю вас посмотреть в использовании подготовлены заявления, чтобы избежать SQL-инъекций. http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

Смежные вопросы