基本上,我将通过表单发送的提交的用户数据保存到数据库中,我很想知道是否有一种方法可以缩短/优化我的代码。
我有20个textarea字段,我要以统一的方式引用它们(text1,text2,text3,...,text20),因为在这种情况下不需要给它们提供更具体的名称。
<form action="insert_into.php" method="post">
<input type="text" name="name" placeholder="name" />
<?php
for ($x = 1; $x <= 21; $x++) {
echo "<textarea name='text" . $x . "'
placeholder='Write...'></textarea>";
}
?>
<input type="submit">
</form>
现在这意味着当我去检索数据以将其保存在数据库中时,我的代码最终看起来有点...重复/冗余:
<?php
include('db-connect.php');
$name = $_POST['name'];
$text1 = $_POST['text1'];
$text2 = $_POST['text2'];
$text3 = $_POST['text3'];
$text4 = $_POST['text4'];
$text5 = $_POST['text5'];
$text6 = $_POST['text6'];
$text7 = $_POST['text7'];
$text8 = $_POST['text8'];
$text9 = $_POST['text9'];
$text10 = $_POST['text10'];
...
...
...
$text20 = $_POST['text20'];
$insert = mysqli_query($db, "INSERT INTO mytable (id, name, text1, text2,
text3, text4, text5) VALUES (NULL, '$name', '$text1', '$text2', '$text3',
'$text4', '$text5', '$text6', '$text7', '$text8', '$text9', '$text10',
'$text11', '$text12', '$text13', '$text14', '$text15', '$text16', '$text17',
'$text18', '$text19', '$text20')");
header('Location: index.php');
?>
我觉得可以通过循环或数组或两者来优化,但是我不确定如何开始。我试图通过循环来解决
for ($x = 1; $x <= 21; $x++) {
$texts = '$text' . $x;
$texts = $_POST[$texts];
}
$insert = mysqli_query($db, "INSERT INTO mytable (id, name, text1, text2,
text3, text4, text5) VALUES (NULL, '$name', '$text1', '$text2', '$text3',
'$text4', '$text5', '$text6', '$text7', '$text8', '$text9', '$text10',
'$text11', '$text12', '$text13', '$text14', '$text15', '$text16', '$text17',
'$text18', '$text19', '$text20')");
因为我认为它会给我这样的输出
$text1 = $_POST['text1'];
$text2 = $_POST['text2'];
$text3 = $_POST['text3'];
...
$text20 = $_POST['text20'];
但是这些值不会以这种方式保存在数据库中。不知道这是否是因为“ $ texts = $ _POST [$ texts];”不起作用或因为mysql查询不在循环中...?
答案 0 :(得分:-1)
我没有测试,但是这个主意似乎还可以。
$names = ['id','name'];
$values = ['NULL', $name];
foreach ($_POST as $key => $inputVal) {
for ($i=1; $i <= 10; $i++) { // $i<= number of similar fields
if ($key == 'text'.$i) {
$names[] = 'text'.$i
$values[] = $inputVal;
}
}
}
$query = "INSERT INTO mytable (". implode(',', $names) .")
VALUES (". implode(',', $values) .")";