如何使用多个类似命名的变量来缩短mysql / php中的查询

时间:2019-07-09 12:15:24

标签: php mysql

基本上,我将通过表单发送的提交的用户数据保存到数据库中,我很想知道是否有一种方法可以缩短/优化我的代码。

我有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查询不在循环中...?

1 个答案:

答案 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) .")";