Необходимо получить входные имена из динамических входных данных формы. Имена входных данных поступают из базы данных

#php #jquery #ajax

#php #jquery #ajax

Вопрос:

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

Для меня все это становится невозможным, поскольку имена всех этих полей извлекаются из 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. phpmyadmin — это просто интерфейс для взаимодействия с БД. вот и все

Ответ №1:

Если вы отправляете содержимое формы на 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]
  

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

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

Обновить
На ваш вопрос в комментарии:

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

 $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>";
}
?>
  

Комментарии:

1. Привет, большое спасибо 😃.. Это было именно то, что я хотел.. В дополнение к этому, есть ли какой-либо способ получить имя поля выбора? Поскольку все атрибуты name поступают из базы данных, невозможно жестко закодировать его в PHP. Поэтому, когда я получаю эти 2 значения в PHP, мне нужно знать, к какому вопросу относится этот ответ… Для этого мне нужно получить атрибут name поля выбора (который поступает из SQL, и он может меняться каждый раз в зависимости от администратора, использующего приложение)

2. Я обновил свой ответ, чтобы ответить и на этот вопрос. Если это ответ, который решает ваш вопрос, пожалуйста, отметьте его как действительный ответ или поддержите. Спасибо большое.

3. Это решило мою проблему.. Большое спасибо, я пытался сделать это в течение последних 2 дней .. 🙂