#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>
Короче говоря, мне нужно вставить
- Имя и значение поля выбора;
- Значение введенного числа (без имени поля)
в базу данных..
То, что я пробовал до сих пор..
-
Я попытался опубликовать все значения и разделить их на разные массивы по четыре. Но это сработало не так, как ожидалось, поскольку третий элемент в массиве не нужен, и по некоторым другим причинам..
-
Я создал скрытый элемент в html, который обновляется с именем поля и значениями с массивом; С функцией изменения как для выбора, так и для ввода чисел. Затем я отправляю его вместе с другими данными. Но это создает больше ошибок, чем та, которую мы решаем, поскольку разные пользователи взаимодействуют с формой по-разному.. (Обратите внимание, что ни одно из полей не является обязательным.. Все они являются необязательными ..)
-
Я погуглил свою проблему🙄… Много, много, много раз😫😫
<?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 дней .. 🙂