Как сохранить данные из случайного количества элементов формы в таблицу SQL? - PullRequest
0 голосов
/ 29 марта 2019

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

Я хочу сохранитьэто от данных до таблицы MySQL, для которой есть тонна рабочих руководств как на этом сайте, так и на остальной части www, однако они работают при условии, что «принимающий» конец знает, как настроена форма.

У меня нет этой опции.

пример кода может быть любого типа формы:

<form action= "insert.php" method= POST">
    <input type ="text" name"name">
    <input type ="number" name"phone">
    <input type="submit">
</form>

пример проблемы заключается в том, чтобы внезапно добавить еще несколько полей ввода, например:

<form action= "insert.php" method= POST">
    <input type ="text" name"name">
    <input type ="text" name"lastname">
    <input type ="email" name"email">
    <input type ="text" name"town">
    <input type ="number" name"zip">
    <input type ="tel" name"phone">
    <input type="submit">
</form>

, а затемв файле insert.php (после подключения к БД)

if(isset($_POST['submit])){
    $name=$_POST['name'];
    $number =$_POST['phone'];
}

$query= "INSERT INTO formdata(name,phone) VALUES('$name','$number');

Я хочу получить способ получить любой тип данных из любого типа формы, от самого простого комментария и контактной формы до большого50+ частей один.

Моя единственная идея на данный момент - добавить поддержку многих МНОГИХ элементов каждого типа, но это не выглядело бы ни хорошо, ни хорошо.

Прямо сейчас, если янужно было добавить больше элементов формы в конструктор форм. Мне также пришлось бы перейти непосредственно в код и изменить часть «получения», чтобы она соответствовала той единственной форме, которая испортила бы функцию post / save для остальных форм.

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Я бы пошел на что-то вроде этого.

if(isset($_POST['submit'])){
    if(isset($_POST['name'])){
        $name=$_POST['name'];
    }else{
        $name = '';
    }
//your code here
}

повторяется для каждого поля, которое может существовать.

Затем выполняется запрос со всеми полями таблицы, которые можно вставить.Все они будут иметь значение, если они опубликованы или нет.

0 голосов
/ 29 марта 2019

Создание элементов формы в примере массива:

<input type="text" name="elements[samplename]">
<input type="text" name="elements[samplename1]">
<input type="text" name="elements[samplename2]">

Если вы создадите их таким образом, они будут размещены в виде php-массива, который вы сможете просто легко взорвать и сохранить в базе данных.

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

При этом после публикации данных вы получите их с помощью $ _POST или $ _GET, и в результате вы получите ассоциативный массив, который будет выглядеть примерно так:

array (size=12)
  'samplename' => string 'sample' (length=6)
  'samplename1' => string 'sample 2' (length=8)
  'samplename2' => string 'sample 3' (length=8)

Используя этот метод, вы можете сгруппировать типы ввода по именам массивов, чтобы текстовые типы были бы текстовыми [name], телефонные номера были бы phone [name], а затем вы можете перебирать данные постов и разделять их по типам. Используя эти типы, вы можете иметь отдельные реляционные таблицы, которые связаны с пользователем по их идентификатору для каждого типа ввода, где вы можете хранить результаты.

Таблица текстового поля: ID | Идентификатор пользователя | Form_ID | Значение

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

  • ИЛИ -

Еще один, хотя тоже о способах их хранения, один действительно простой способ - просто взять весь массив и преобразовать его в json, используя кодирование json, и сохранить всю эту строку, а затем, когда вам нужно будет использовать его, декодируйте его, используя json_decode.


DEMO

HTML:

<div id="addItem">
        <h2>Add New Element:</h2>
        <input type="text" placeholder="name" id="elementName" required>
        <select name="inputs" id="newInput">
            <option value="text">text</option>
            <option value="email">email</option>
            <option value="phone">phone</option>
        </select>
        <input type="button" id="addElement" value="Add Item">

        <strong>You can add a infinite amount of parameters required or optional here</strong>
    </div>

    <div class="myFormElemets">
        <form id="myForm" action="submit.php" method="post">
            <!-- Your elements will be populated here via jquery -->
        </form>
    </div>

    <script>
        $('#addElement').click(function () {
            var selectValue = $('#newInput').find(":selected").text();
            var nameValue = $('#elementName').val();

            switch (selectValue) {
                case "text":
                    $('#myForm').append('<input type="text" name="' + selectValue + "[" + nameValue + "]" + '">');
                    break;

                case "email":
                    $('#myForm').append('<input type="email" name="' + selectValue + "[" + nameValue + "]" + '">');
                    break;

                case "phone":
                    $('#myForm').append('<input type="tel" name="' + selectValue + "[" + nameValue + "]" + '">');
                    break;
            }
        });
    </script>

PHP:

$sql = null;
        foreach($_POST as $array)
        {
            foreach($array as $key => $value) {
                switch ($key) {
                    case "text":
                        $sql = "INSERT INTO `my_table` ('id', 'form_id', 'element_type', 'value') VALUES (NULL, '$formID', '0', '$value')";
                        break;

                    case "email":
                        $sql = "INSERT INTO `my_table` ('id', 'form_id', 'element_type', 'value') VALUES (NULL, '$formID', '1', '$value')";
                        break;

                    case "phone":
                        $sql = "INSERT INTO `my_table` ('id', 'form_id', 'element_type', 'value') VALUES (NULL, '$formID', '2', '$value')";
                        break;
                }
            }
        }

        //prepared sql insert statement here.

Используя этот пример, вы можете сохранить любое количество элементов, добавить бесконечные обязательные параметры и многое другое. Проявите творческий подход! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...