首页 > 解决方案 > 如何将多个输入传递到单个查询中?

问题描述

在我的应用程序中,我希望用户提及他想要表的列数,然后输入这些列的数据并使用这些值创建一个表。这是我所拥有的:

<form action="" method="post">

    <label for="numOfCols">Enter Number of Fields</label>
    <input name="numOfCols" type="number" id="numOfCols">
    <button type="submit" class="btn btn-info" name="numOfColsSubmit" >Generate</button>

</form>

<?php if(isset($_POST["numOfCols"])): ?>
<form action="" method="post">
    <label for="tbName">Enter Layout Name</label>
    <input type="text" name="tbName" id="tbName" class="form-control">

<?php $numOfCols = $_POST["numOfCols"];
for ($colNum = 0 ; $colNum < $numOfCols ; $colNum++): ?>

    <div class="row g-4">
        <div class="col-sm">
            <label for="col_name<?php $colNum ?>">Name</label><br>
            <input class="form-control" id="col_name<?php $colNum ?>" type="text"  
             name="col_name<?php $colNum ?>" >
        </div>


        <div class="col-sm">
            <label for="col_types<?php $colNum ?>">Type</label><br>
            <select  name="col_types<?php $colNum ?>" class="form-control" id="col_types<?php $colNum ?>">
                <option value="int">INT</option>
                <option value="varchar" >VARCHAR</option>
                <option value="text">TEXT</option>
            </select>
        </div>

        <div class="col-sm">
            <label for="col_length<?php $colNum ?>">Length</label><br>
            <input type="text" class="form-control" name="col_length<?php $colNum ?>" id="col_length<?php $colNum ?>">
        </div>

        <div class="col-sm">
            <br><button type="submit" class="btn btn-success" name="submitaddcol<?php $colNum ?>">Submit</button>
        </div>

    </div>

    


<?php endfor; ?>
    <button type="submit" name="createtb" class="btn">Create Layout</button>
</form>
<?php endif;?>

<?php if(isset($_POST["tbName"])){
        $table->createTb($_POST['tbName']);
    } ?>

以及创建表的功能:

function createTb($tb){

    $arr = [];

    if(isset($_POST['col_name'])){
        $colName = $_POST['col_name'];
    }
    if(isset($_POST['col_types'])){
        $colTypes = $_POST['col_types'];
    }
    if(isset($_POST['col_length'])){
        $colLength = $_POST['col_length'];
    }
    echo $tb;

    array_push($arr , $colName , $colTypes , $colLength);


    $stmt = $this->pdo->prepare("CREATE TABLE $tb ($colName $colTypes($colLength)) ");
    $stmt->execute([$_POST['name'], 29]);
    $stmt->execute();
    $stmt = null;


}

我正在考虑从用户那里获取数据,将其传递给一个数组,然后在我的查询中使用该数组。问题是我无法获取所有用户数据。如果用户有 2 列或更多列,它将始终获得最后一列。有什么见解吗?

(出于某种原因将 createTb($_POST['tbName']) 放入 for 循环会导致现在显示或调用该函数)

标签: javascriptphphtmljquerysql

解决方案


您可以将输入字段命名为数组,例如 <input type="text" name="col_name[]" value="foo" />var_dump($_POST['col_name']);

在您的示例中,您可以这样做:

<?php $numOfCols = $_POST["numOfCols"];
for ($colNum = 0 ; $colNum < $numOfCols ; $colNum++): ?>
   <input class="form-control" id="col_name_<?=$colNum ?>" type="text" name="col_name[<?=$colNum ?>]" >
   <input type="text" class="form-control" name="col_length[<?= $colNum ?>]" id="col_length_<?=$colNum ?>">
<?php endfor; ?>

并得到结果:

if(isset($_POST['col_name']) && is_array($_POST['col_name'])) {
   for($i = 0; $i < count($_POST['col_name']); $i++) {
       var_dump($_POST['col_name'][$i]);
       var_dump($_POST['col_length'][$i]);
   }
}

推荐阅读