Отображение данных на той же странице, что и форма, без перезагрузки

30 сент. 2014 г., 12:26:11
Просмотры: 16.5K
Голосов: 1

Я не уверен, связано ли это с 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
Все ответы на вопрос 1
2

Если я правильно понял:

  • вам нужно, чтобы исходная форма отображала значения только что отправленных данных.
  • Также требуется, чтобы таблица показывала 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;
30 сент. 2014 г. 17:15:30
Комментарии

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

user-2147482637 user-2147482637
30 сент. 2014 г. 17:52:32

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

Bysander Bysander
1 окт. 2014 г. 14:59:54