Необходимо извлечь имена входных данных из входных данных динамической формы.Имена входных данных поступают из базы данных - PullRequest
0 голосов
/ 10 апреля 2019

Хорошо, у меня есть эта форма с парами полей ... Одно из них - select, а другое - ввод числа. Если значение выбора не равно нулю, рядом с ним появляется ввод числа ... После отправки мне нужно получить имя меню выбора, его значение и значение ввода числа помимо него ...

Для меня все становится невозможным, поскольку имена всех этих полей извлекаются из SQL.

Вот изображение страницы, которую я делаю: Предварительный просмотр моей формы https://drive.google.com/file/d/1Qv1Hr8tSIj95qBb98vCV1kftdftnaGGb/view?usp=sharing

И приведенный ниже HTML-код (обратите внимание, что все они скопированы из исходного кода браузера. В действительности все они извлекаются из SQL)

<form class="predictForm" name="predictForm" id="predictForm" autocomplete="off">
    <div class="form-group clearfix" data-question="1">
        <div class="inner-form-group predictType">
            <label>Match Winner</label>
            <select class="form-control match_winner" name="match_winner" id="match_winner">
                <option value=""> - Select Team - </option>
                <option value="4">team4</option>
                <option value="5">team5</option>
                <option value="6">team6</option>
                <option value="7">team7</option>
                <option value="8">team8</option>
            </select>
        </div>
        <div class="inner-form-group predictVal" style="display: block;">
            <label>Points</label>
            <input type="number" class="form-control match_winner_val" name="match_winner_val" id="match_winner_val" placeholder="Value">
        </div>
    </div>
    <div class="form-group clearfix" data-question="12">
        <div class="inner-form-group predictType">
            <label>Best Batsman</label>
            <select class="form-control best_batsman" name="best_batsman" id="best_batsman">
                <option value=""> - Select Player - </option>
                <option value="7" title="team6">Name 1</option>
                <option value="9" title="team5">Name 2</option>
                <option value="10" title="team5">Name 3</option>
                <option value="12" title="team8">Name 4</option>
            </select>
        </div>
        <div class="inner-form-group predictVal" style="display: block;">
            <label>Points</label>
            <input type="number" class="form-control best_batsman_val" name="best_batsman_val" id="best_batsman_val" placeholder="Value">
        </div>
    </div>
    <div class="form-group clearfix" data-question="8">
        <div class="inner-form-group predictType">
            <label>Best catch done by</label>
            <select class="form-control best_catch_by" name="best_catch_by" id="best_catch_by">
                <option value=""> - Select Player - </option>
                <option value="3" title="team5">Name 1</option>
                <option value="7" title="team5">Name 2</option>
                <option value="8" title="team8">Name 3</option>
            </select>
        </div>
        <div class="inner-form-group predictVal">
            <label>Points</label>
            <input type="number" class="form-control best_catch_by_val" name="best_catch_by_val" id="best_catch_by_val" placeholder="Value">
        </div>
    </div>
    <div class="form-group clearfix" data-question="4">
        <div class="inner-form-group predictType">
            <label>Runner Up Team</label>
            <select class="form-control runner_up_team" name="runner_up_team" id="runner_up_team">
                <option value=""> - Select Team - </option>
                <option value="4">team4</option>
                <option value="5">team5</option>
                <option value="6">team6</option>
                <option value="7">team7</option>
                <option value="8">team8</option>
            </select>
        </div>
        <div class="inner-form-group predictVal">
            <label>Points</label>
            <input type="number" class="form-control runner_up_team_val" name="runner_up_team_val" id="runner_up_team_val" placeholder="Value">
        </div>
    </div>
    <div class="form-group clearfix" data-question="5">
        <div class="inner-form-group predictType">
            <label>Max Six</label>
            <select class="form-control max_six" name="max_six" id="max_six">
                <option value=""> - Select Team - </option>
                <option value="4">team4</option>
                <option value="5">team5</option>
                <option value="6">team6</option>
                <option value="7">team7</option>
                <option value="8">team8</option>
            </select>
        </div>
        <div class="inner-form-group predictVal">
            <label>Points</label>
            <input type="number" class="form-control max_six_val" name="max_six_val" id="max_six_val" placeholder="Value">
        </div>
    </div>

    <div class="form-group clearfix">
        <button type="submit">
            <span class="front">
                <i class="fas fa-paper-plane"></i>
                <span class="value">Send <span>Predictions</span></span>
            </span>
            <span class="back">
                <i class="fas fa-paper-plane"></i>
                <span class="value">Send <span>Predictions</span></span>
            </span>
        </button>
    </div>
</form>

Короче, мне нужно вставить

  1. Имя и значение поля выбора;
  2. Значение числа Ввод (без имени поля)

в базу данных ..


То, что я пробовал до сих пор ..

  1. Я попытался опубликовать все значения и разделить их на разные массивы по четыре. Но это не сработало так, как ожидалось, поскольку третий элемент в массиве не нужен и по ряду других причин ..

  2. Я создал скрытый элемент в html, который обновляется с именем поля и значениями с массивом; С функцией изменения как для выбора, так и для ввода номера. Затем я отправлю его вместе с другими данными. Но он создает больше ошибок, чем тот, который мы решаем, так как разные пользователи взаимодействуют с формой по-разному .. (Обратите внимание, что ни одно из полей не является обязательным. Все они являются необязательными ..)

  3. Я погуглил мою проблему? ... Много много раз??

<?php
    foreach ($_POST as $key => $value) {
        if($value != "") {
            echo "<table>";
            echo "<tr>";
            echo "<td>";
            echo $key;
            echo "</td>";
            echo "<td>";
            echo $value;
            echo "</td>";
            echo "</tr>";
            echo "</table>";
        }
    }
?>

1 Ответ

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

Если вы отправляете содержимое формы в php и вам нужно получить значения ваших входных данных, все они присутствуют в массиве $ _POST.

каждый вход (также выбирается) присутствует с атрибутом html-name.

для вашего элемента формы "runner_up_team" вы можете получить к нему следующий доступ:

$val = $_POST["runner_up_team"]; // $val contains the seleceted value from the html-select

Так что, если вы хотите получить номер для выбранного поля, я бы предложил использовать что-то вроде этого:

$result = new array();
foreach ($_POST as $inputName => $value) {
   // We only want to inspect the selects and retrieve the number value later.
   if (strpos($inputName, '_val') === FALSE) {
     if ($value != '') {
       // With the current select name + the suffix we get the name for the number input field
       $numberInputName = $inputName . '_val'; 

       // Now we can access the value of the number input with the name.
       $numberInput = $_POST[$numberInputName];

       // now you can put your data into a result array.
       $result[$value] = $numberInput;
     }
   }
}

Массив результатов должен выглядеть следующим образом:

["runner_up_team" => 43, "max_six" => 32]

Если вы сейчас хотите получить к нему доступ в цикле, вы можете использовать предыдущий пример, но использовать массив результатов:

<?php
foreach ($result as $key => $value) {
    if($value != "") {
        echo "<table>";
        echo "<tr>";
        echo "<td>";
        echo $key;
        echo "</td>";
        echo "<td>";
        echo $value;
        echo "</td>";
        echo "</tr>";
        echo "</table>";
    }
}
?>

UPDATE На ваш вопрос в комментарии:

заменить следующую строку

$result[$value] = $numberInput;

с

$element = new array();
$element['select_name'] = $inputName;
$element['number'] = $numberInput;
$element['select_value'] = $value;
$result[] = $element;

Это изменит второй foreach на:

<?php
foreach ($result as $value) {
        echo "<table>";
        echo "<tr>";
        echo "<td>";
        echo $value['select_name'];
        echo "</td>";
        echo "<td>";
        echo $value['select_value'];
        echo "</td>";
        echo "<td>";
        echo $value['number'];
        echo "</td>";
        echo "</tr>";
        echo "</table>";
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...