Отображение данных на той же странице, что и форма, без перезагрузки
Я не уверен, связано ли это с WordPress или с моими действиями, но я не могу заставить работать онлайн-уроки при реализации в шаблоне страницы. Например, этот http://www.computersneaker.com/submit-a-form-without-page-refresh-in-php-using-jquery/ учебник с модификацией $query и вызова mysql для простого вывода $name. Я объясню свою проблему, и, возможно, кто-то укажет на мое недопонимание.
Этот пост звучит похоже Ajaxify Form That Submits To Same Page To Display Post Data, но кроме отсутствия ответа, содержание кажется другим.
Я пытаюсь создать форму с различными полями ввода. Пользователь нажимает кнопку, и таблица на той же странице обновляется. По сути, введенные данные ищутся в базе данных, выполняются вычисления, а результат отображается в таблице. Используются массивы и подключение к БД через $wpdb->get_results.
Я использую do_shortcode и POST, если это что-то меняет.
Моя структура выглядит так (в той же странице):
<form action ="" method="post">
Введите ваш возраст <input type="number" min="1" name="age" style="width:50px;">
Выберите поле
<select name="field">
<option value="P">Поле P</option>
<option value="M">Поле M</option>
<option value="C">Поле C</option>
</select>
<div class="input_fields_wrap">
<button class="add_field_button">Добавить поле</button><br><br>
<div>Название поля: <input type="text" name="fieldname[]">
Общее значение:</td><td><input style="width:50px;" name="datum[]" type="number" min="1" id="datum">
</div>
<input type="submit" name="test" value="Рассчитать"/>
</form>
Под этим я пытаюсь обработать переменные:
if(isset($_POST["fieldname"])){
$capture_field_vals ="";
foreach($_POST["fieldname"] as $key => $text_field){
$capture_field_vals .= $text_field .", ";
$dataset[] = $text_field;
}
foreach($_POST["field"] as $key => $text_field){
$capture_field_vals .= $text_field .", ";
$field[] = $text_field;
}
$field = $_POST["field"];
}
Затем я выполняю алгоритмические операции, сравнивая переменные с результатами $wpdb->get_results.
Наконец, я вывожу результаты в таблицу на странице.
Сейчас это работает, но при нажатии кнопки отправки страница перезагружается, введенные пользователем данные исчезают, хотя таблица обновляется правильно. Мне трудно найти информацию о том, как это исправить. Когда я ищу способы предотвратить перезагрузку страницы, учебники говорят об отправке данных в базу данных и размещении кода в другом файле. Мне нужно, чтобы таблица всегда была на странице, заполненная нулями до ввода данных. Затем сохранять значения в форме и обновлять таблицу при нажатии кнопки. Возможно ли это сделать в том же файле или я не понимаю фундаментальную проблему?
Если я правильно понял:
- вам нужно, чтобы исходная форма отображала значения только что отправленных данных.
- Также требуется, чтобы таблица показывала 0 для значений, которые ещё не были рассчитаны.
- В данный момент таблица прекрасно рассчитывает информацию при обновлении страницы после отправки формы.
Вы можете использовать переменную if(isset($_POST["fieldname"])){
, которая у вас уже есть, для реализации этого.
if(isset($_POST["fieldname"])){ echo $_POST["fieldname"]
выведет значение отправленных данных, например, текст из текстового поля. В вашем случае это чекбокс, поэтому используйте что-то вроде этого:
<input type="checkbox" name="txtCheck" value="your value" <?php if(isset($_POST['txtCheck'])) echo "checked='checked'"; ?> />
То же самое можно сделать с таблицей. Если вы хотите, чтобы до расчёта отображался 0 (не видя ваш код таблицы):
Примерно так в ячейке таблицы:
if (empty($cellvalue)) echo '0'; //Если нет данных для отображения, показываем 0
else echo $cellvalue;

Это всё ещё обновляет страницу, но просто возвращает значение обратно в текстовое поле? Ваши 3 пункта верны, сейчас у меня есть и ноль, и расчёт (таблица обновляется правильно), проблема только в обновлении страницы. Я ищу способ избежать обновления, чтобы элементы на странице не менялись. Возможно, мне нужно отредактировать вопрос, но поле fieldname textbox использует функцию jQuery для динамического добавления нескольких полей (все значения хранятся в массиве, а затем используется foreach). Поэтому при обновлении исходное поле остаётся, но дополнительные удаляются.

А, понятно. То есть вы имеете в виду, что дополнительные jQuery-поля удаляются при обновлении страницы, но данные остаются? Если это так, вы можете рассмотреть использование AJAX, который отправляет данные без обновления страницы, но это определённо не моя область экспертизы. Я не вижу скрипт, но судя по коду выше, все они называются fieldname[1]
или fieldname[2]
и т. д., по мере их создания?
