Как вставить данные в MySQL, используя PHP, если поля ввода являются dymanic, а имена входов всегда меняются и их количество? - PullRequest
0 голосов
/ 29 декабря 2018

, поэтому я хочу вставить в базу данных информацию, но имена и значения полей ввода изменяются динамически, как бы это сделать ниже - первая часть кода

echo'<form action="add3rd.php" method="post">';
while($row = mysqli_fetch_assoc($title2)) {
    echo '' . $row["input"]. '  <input type="text" name="' . $row["input"]. '">';
    echo '<input type="hidden" name="' . $row["input"]. '" value="' . $row["articleid"]. '">' ;

}
echo'<input type="submit" value="Next"></form>';
}  

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Я буду считать, что имена полей в форме также являются именами столбцов таблицы, упрощенное решение таково:

$input_names  = '';
$input_values = '';

//Iterate the POST table to get the input names and values
foreach($_POST as $input_name => $input_value){
    // escaping is always important
    $input_names  .= mysqli_real_escape_string ( $con, $input_name ) . ",";
    $input_values .= "'" .mysqli_real_escape_string ( $con, $input_value ) . "',";
}
// Remove trailing comma
$input_names  = rtrim( $input_names, "," );
$input_values = rtrim( $input_values, "," );
$sql = "INSERT INTO table_name ( $input_names ) VALUES ( $input_values )";

if ( $con->query($sql) === TRUE ) {
    // Success
} else {
    // Failure
}

В случае, если есть поля ввода, которые не являются частью таблицы,или фактически в любом случае проверка может произойти в части, формирующей поле.Например:

$field_array = ["field1", "field2", "field3"];
foreach($_POST as $input_name => $input_value){

    // Skip field if the name is not in the $field_array
    if(!in_array( $input_name, $field_array ){
        continue;
    }

    $input_names  .= mysqli_real_escape_string ( $con, $input_name ) . ",";
    $input_values .= "'" .mysqli_real_escape_string ( $con, $input_value ) . "',";
}

Приведенный выше код не проверен и должен использоваться только в качестве справочного.

0 голосов
/ 29 декабря 2018

Один из вариантов - циклически проходить по $_POST и получать каждое поле (ключ = имя поля).Далее: вы можете использовать Подготовленные операторы для построения запроса MySQL.


Пример

Содержимое $_POST может выглядеть следующим образомthis:

[
    "name_of_field": "value",
    "name_of_another_field": "another value"
    // etc...
]

Подсказка: Поставьте префикс перед каждым именем поля, чтобы избежать нежелательных значений в вашем запросе SQL.Но не забудьте удалить префикс при использовании его в запросе.

Последний шаг - создание и выполнение подготовленного оператора.Я использую PHP Data Objects (PDO) для этого примера.

// The MySQL connection
$conn = new PDO("mysql:host={$host};dbname={$db}", $username, $password);

// Get the names of the fields from $_POST (I assume that the fieldnames are the same as the column names).
// Remember my tip that I wrote above.
$fieldNames = implode(',', array_keys($_POST));

// Get the values of the fields from $_POST
$fieldValues = implode(',', array_values($_POST));

// Prepare the query
$stmt = $conn->prepare("INSERT INTO YourTable ({$fieldNames}) 
VALUES ({$fieldValues})");

// Execute the query
$stmt->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...