Создание элементов формы в примере массива:
<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.
Используя этот пример, вы можете сохранить любое количество элементов, добавить бесконечные обязательные параметры и многое другое. Проявите творческий подход! :)