Пользовательская форма для сохранения данных в базе данных

26 дек. 2012 г., 00:15:16
Просмотры: 158K
Голосов: 7

Я никогда раньше не использовал WordPress, но имею большой опыт программирования. Мой вопрос в том, как создать пользовательские формы в WordPress?

Мне нужно создать форму, где пользователь заполняет несколько полей ввода, и при отправке данные должны сохраняться в базе данных. Мне не нужны никакие уведомления о сохранении.

Также мне нужно иметь возможность запрашивать эти данные и выводить их в HTML-таблице.

Спасибо

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

Вот пример данных пользователя.

fuxia fuxia
26 дек. 2012 г. 01:49:55
Все ответы на вопрос 7
2

Я сам нашел решение проблемы. Посмотрите код ниже - он должен сработать.

Поместите этот код в ваш новый пользовательский шаблон.

<?php
    if (!empty($_POST)) {
        global $wpdb;
        $table = wp_achord;
        $data = array(
            'name' => $_POST['yourname'],
            'chord'    => $_POST['chord']
        );
        $format = array(
            '%s',
            '%s'
        );
        $success=$wpdb->insert( $table, $data, $format );
        if($success){
            echo 'данные сохранены' ; 
        }
    } else {
        ?>
        <form method="post">
            <input type="text" name="yourname">
            <textarea name="chord"></textarea>
            <input type="submit">
        </form>
        <?php 
    }  
?>
30 июл. 2013 г. 20:06:09
Комментарии

О боже. Ни малейшей проверки данных.

Jürgen Paul Jürgen Paul
10 мая 2015 г. 13:53:01

Это решение уязвимо к SQL-инъекциям. Пожалуйста, проверяйте вводимые данные.

Jon Winstanley Jon Winstanley
23 февр. 2018 г. 17:16:08
4

Моё предложение:

Используйте Contact Form 7 вместе с Contact Form DB. Вы можете "проектировать" свою форму в админке и вставлять её на фронтенд с помощью простого шорткода.

Расширение Contact Form DB сохраняет ваши данные в базу данных и предоставляет шорткоды для их отображения (или вы можете запрашивать данные напрямую из базы данных, если предпочитаете)

26 дек. 2012 г. 01:40:42
Комментарии

Я попробовал Contact Form 7, и он выглядит отлично, но у меня есть несколько вопросов. Можно ли добавить инкрементный/идентификатор в качестве столбца в таблицу. Также мне нужно установить значения выпадающего списка на основе значений из таблицы. Я никогда раньше не работал с CMS и не знаю, насколько можно и нужно кастомизировать самостоятельно.

boje boje
26 дек. 2012 г. 22:48:44

@boje вы можете сделать это с помощью плагина-расширения Post My CF7 Form, который реорганизует таблицу в панели управления CF7, позволяя использовать стандартную функциональность WP для добавления пользовательского столбца в таблицу.

Aurovrata Aurovrata
17 окт. 2016 г. 11:25:52

Можно ли отображать записи CF7 с одного сайта на другом сайте?

Mohammad Fareed Mohammad Fareed
29 мая 2017 г. 13:30:01

Это по-прежнему является рабочим решением. CFDB поддерживает еще больше плагинов для генерации форм.

mrmut mrmut
1 февр. 2020 г. 01:04:45
2

Я собираюсь использовать это решение, но оно кажется очень кастомизированным. Может ли это вызвать проблемы с темами и обновлениями?

27 дек. 2012 г. 00:48:07
Комментарии

На мой взгляд, вам следует разделить логику и шаблонный файл. Метод, обрабатывающий POST-данные, должен находиться в functions.php и инициализироваться с помощью хука инициализации.

Чтобы обрабатывать отправленные данные только для определенного шаблона страницы, можно проверить наличие именованного (по желанию скрытого) поля ввода, уникального для этого шаблона. Также можно воспользоваться функцией is_page_template()

estrar estrar
11 июл. 2014 г. 09:50:30

очень полезная ссылка

Rohit Rohit
3 янв. 2020 г. 08:26:33
6

Существуют различные способы хранения данных. Для хранения настроек используется таблица опций, API опций - это правильное место с отдельной записью и массивом в качестве элемента хранения. Однако для хранения данных, которые будут использоваться как записи, и где каждая отправка формы представляет собой отдельный элемент, лучше сохранять их также как записи. Но и здесь есть разные варианты. Вы можете сохранять данные для разных типов записей. По умолчанию используется тип 'post', но также можно сохранять в пользовательских типах записей. Используйте функцию wp_insert_post() для сохранения данных любого типа записи после отправки формы пользователями. Вы найдете очень хорошие ответы по этой функции, этой теме, а также в просторах интернета. Также можно посмотреть небольшой пример в этом ответе 73653, включая вложения в форме.

26 дек. 2012 г. 01:39:57
Комментарии

используя 'wp_insert_post()', это ведь не только для комментариев. А если нет, то почему хорошо использовать именно эту функцию? Я не понимаю идею таблицы options. Быстрый поиск в Google мне не помог :(

boje boje
26 дек. 2012 г. 22:59:09

wp_insert_post() не для комментариев, а для контента записей, создания новой записи. Я обновил свой ответ сейчас, был с мобильного; не очень удобно на WPSE. Другой ответ с подсказкой про плагины — то же самое, Contact Form 7 или другие создают новые записи, но вам нужен плагин. Если вы хотите контролировать это, включая исходный код, и у вас достаточно знаний о программировании, то кастомный плагин для создания записей — лучший вариант.

bueltge bueltge
27 дек. 2012 г. 14:29:27

Спасибо за помощь, Bueltge. Я понимаю wp_insertpost как вспомогательную функцию для быстрой и безопасной вставки чего-либо в таблицу базы данных. Если у меня есть таблица(имя=Course) с колонками(id, coursename, paricipant, startdate, enddate). Где я указываю имя таблицы? Возможно, я понял всё совершенно неправильно. Пример кода ссылка

boje boje
28 дек. 2012 г. 11:50:09

Нет, функция создает данные в стандартных таблицах WordPress; как минимум в _posts, а если у вас есть вложения или метаданные записи, то и в других таблицах, которые связаны с записью. Но вы просите сохранить данные из формы в WordPress, и я считаю, что это лучший способ. У вас уже есть готовый интерфейс с множеством решений для редактирования и управления элементами из формы. Если вы посмотрите код по ссылке в моем ответе, то увидите это решение.

bueltge bueltge
28 дек. 2012 г. 13:41:04

Спасибо, думаю, мне нужно почитать больше или найти какие-то руководства, чтобы лучше понять настройку

boje boje
28 дек. 2012 г. 14:02:56

Да, как моя ссылка в другом ответе или ссылка из интернета, например эта.

bueltge bueltge
28 дек. 2012 г. 14:27:08
Показать остальные 1 комментариев
0

Вы также можете использовать отличный плагин Contact Form 7 вместе с расширением Post My CF7 Form, которое позволит сохранять любые пользовательские формы в записи, включая изображения в качестве прикрепленных миниатюр, а также выпадающие списки, чекбоксы и радио-кнопки в качестве таксономий.

Плагин Post My CF7 Form обладает богатым функционалом, который можно использовать для дополнительной настройки и изменения способа сохранения ваших форм. Также доступен подробный раздел документации.

17 окт. 2016 г. 11:26:56
2
-1

Ваше решение хорошее и может отлично работать. Однако, есть несколько ограничений, например:

1) Что насчёт поиска и сортировки записей, отправленных через вашу форму? 2) Как насчёт экспорта данных, заполненных в вашей форме, в Excel, CSV или PDF? 3) Что если вам нужно распечатать введённые данные.

Всё это можно реализовать с помощью плагинов Contact Form 7 + Save Contact Form 7.

Оба плагина бесплатные и широко используются: http://savecontactform7.com/ http://contactform7.com/

20 мая 2016 г. 16:44:49
Комментарии

Пожалуйста, укажите вашу принадлежность и сделайте ответ соответствующим требованиям вопроса. Это больше похоже на рекламу, чем на настоящее решение.

Rarst Rarst
20 мая 2016 г. 17:55:10

Я согласен, это выглядит как реклама, и я являюсь владельцем Save Contact Form 7. Однако решение и ответ полностью соответствуют требованиям вопроса. Так что это определенно поможет человеку, который задал вопрос.

Nimblechapps Nimblechapps
22 мая 2016 г. 10:34:37
0
-1
<?php
/**
Используйте эти строки кода, они работают более чем на 100%
 */
get_header();?> <?php
        if (!empty($_POST)) {
        global $wpdb;
            $table = wp_contact;
            $data = array(
                'name' => $_POST['aname'],
                'email'    => $_POST['aemail'],
                 'subject' => $_POST['asubject'],
                'msg'    => $_POST['amsg']
            );
            $format = array(
                '%s',
                '%s'
            );
            $success=$wpdb->insert( $table, $data, $format );
            if($success){
            echo 'данные сохранены' ; 
}
}
else   {
?>
        <form action="<?php echo get_option('siteurl'); ?>/form/" method="post">
        <input type="text" name="aname">
         <input type="text" name="aemail">
          <input type="text" name="asubject">
        <textarea type="text" name="amsg"></textarea>

        <input type="submit">
        </form>

       <?php }  ?>
7 февр. 2017 г. 14:55:43