Как мы можем обработать динамическую форму в php

Новичок вернулся с другим вопросом. Любая помощь приветствуется. Предположим, у нас есть форма, в которой мы записали имя пользователя и перед которой есть поле ввода, в котором мы можем поставить оценку упомянутому пользователю. В рамках этого сценария все понятно. У нас есть форма с именем пользователя (его значением является «id») и другая переменная, то есть «оценка», которые публикуются на странице php-action. Следовательно, на странице php-action я получаю две переменные, одна из которых является идентификатором пользователя, а другая - выделенной оценкой через POST. Здесь все понятно и процесс прост, так как у меня есть только две определенные переменные. Теперь предположим, что мы динамически вставляем список пользователей из нашей таблицы "Пользователи" в форму. Мы заполняем нашу форму, например, 10 пользователями, взятыми из базы данных. Перед ними есть поля ввода для вставки «оценки». Пока все в порядке. Проблема, однако, заключается в следующем этапе. Проблема в том, что я не знаю, как попросить php-action-page сделать вставку, то есть вставить оценку в базу данных для конкретных пользователей, если есть опубликованные переменные пользователей. Здесь у меня есть десятки пользователей и десятки динамических переменных. И если вопрос немного расплывчатый, прошу меня извинить; тем не менее, сделайте все возможное, чтобы избавить меня от этого состояния недоумения. Большое спасибо.

Вот некоторые фрагменты кода, чтобы сделать проблему немного более ясной. Я начинаю со следующего кода:

<?php
require_once ('../inc/takein.php');
$pd = new dbase();
$students = $pd->run_a_query('SELECT * from `checking`');

Здесь я включаю базу данных и другие необходимые файлы. Затем я запускаю запрос, чтобы получить список моих учеников из таблицы. Пока все в порядке. Следующей строкой действия, которая меня озадачивает, является следующий код. Перед тем, как взглянуть на код, посмотрите на html-дизайн на следующем рисунке: Окончательный дизайн
Я совершенно не понимаю, правильно это или неправильно. Вы могли бы помочь с этим битом, а также.

    <form action="grades.php" method="post">
        <table class="table table-bordered font-label" id="item_table">
<?php
foreach ($students as $student) {
    echo '<tr>';
    echo '<td>'.$student['name'].'</td>';
    echo '<td><input type="text" name="grade[]" class="form-control omit-radius-input"></td>';
    echo '<input type="hidden" name="id[]" value="'.$student['id'].'">';
    echo '<tr>';
}
?>
        </table>
<input type="submit" name="dispatched" class="btn btn-green">
        </form>

Here, I am putting the information in a table within the form element. As you can see in the above picture, I am getting four students from the database. Now I want to send these students back to the database along with their newly set grades. What I want to be posted here is the student id and their grades.
Then, the following is the last part of the code which is left incomplete because I couldn't make any senses how to do it.

if (isset($_POST['dispatched'])) {
    $id[] = $_POST['id'];
    $grade[] = $_POST['grade'];
    // what to do now???!!!
    foreach(...HOW TO DO THE 'FOREACH') {
    ...
    }
}

May you please help me insert my student grades. Many thanks in advance.


person Community    schedule 22.07.2018    source источник
comment
Я не ошибусь, если скажу, что большинство людей на этом сайте предпочли бы увидеть код.   -  person Mikey    schedule 22.07.2018
comment
Дорогой Майки, я понятия не имел, как выполнить задание. Вот почему я не придумал никаких кодов. Во всяком случае, мне кажется, Иво Гелов и Иваниван оказались более терпимыми. Я желаю им обоим всего наилучшего.   -  person    schedule 24.07.2018


Ответы (1)


Просто назовите свои переменные как массивы - если ваша форма выглядит так

<form method="POST">
  <input type="text" name="grade[12]">
  <br>
  <input type="text" name="grade[15]">
  <br>
  <input type="text" name="grade[7]">
  <br>
  <input type="text" name="grade[21]">

  <!-- continue here -->
</form>

то в вашем PHP-коде вы получите доступ к таким оценкам

if(is_array($_POST['grade'])) foreach($_POST['grade'] as $id => $value)
{
  // REPLACE INTO user_grades(user_id, grade) VALUES($id, $value)
}

ОБНОВИТЬ

Вы также должны указать ID ваших учеников в названии поля INPUT - иначе вы не будете знать, для какого ученика данная оценка.

<?php
foreach ($students as $student) {
    echo '<tr>';
    echo '<td>'.$student['name'].'</td>';
    echo '<td><input type="text" name="grade['.$student['id'].']" class="form-control omit-radius-input" value="'.$student['current_grade'].'"></td>';
    echo '<tr>';
}
?>

foreach показано выше в моем первоначальном ответе.

person IVO GELOV    schedule 22.07.2018
comment
Ага. Сделайте элементы формы массивами в $_POST. Однако... имейте в виду, что если в HTML-форме нет значения, элемент не отправляется, поэтому, если вводится более одной вещи (когда я ставлю оценки в конце семестра, я должен ввести оценку и последний день академического работать в случае D или F) обязательно убедитесь, что у вас есть все необходимые биты данных перед вводом, в противном случае сообщите об ошибке и повторно запросите пользователя для ввода - person ivanivan; 22.07.2018
comment
Миллионы благодарностей. Ты хорошо постарался. Пенни упала. Вы спасли мой день. Желаю тебе всего наилучшего, бро. - person ; 24.07.2018
comment
Я хотел бы соткать приятное одеяло признательности как Иво Гелову, так и Иванивану. Я благодарен. - person ; 24.07.2018
comment
ЕСЛИ это ответило на ваш вопрос - вы можете пометить этот ответ как принятый. - person IVO GELOV; 25.07.2018
comment
Это определенно сделал дорогой ИВО. Я немного отредактировал вопрос, чтобы сделать его более понятным. Можете ли вы взглянуть и помочь мне больше с проблемой. Для маркировки как принято, мне очень жаль. Stackoverflow не позволяет мне это сделать, так как моя репутация ниже 15. :(( - person ; 25.07.2018