如何将多个输入传递到单个查询中?

Posted

技术标签:

【中文标题】如何将多个输入传递到单个查询中?【英文标题】:How to pass multiple inputs into a single query? 【发布时间】:2021-08-31 10:22:55 【问题描述】:

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

<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 循环会导致现在显示或调用该函数)

【问题讨论】:

【参考方案1】:

您可以将输入字段命名为数组,例如: &lt;input type="text" name="col_name[]" value="foo" /&gt; 并通过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]);
   

【讨论】:

谢谢!这有帮助 很高兴它有帮助!将错误 &lt;?php $colNum; ?&gt; 修复为 =$colNum;?>

以上是关于如何将多个输入传递到单个查询中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个输入(旋钮)添加到单个滑块?

Informix:如何将单个参数中的多个值传递、使用和执行到存储过程

如何在erl中为单个标志设置多个命令行参数

如何在 laravel 的单个控制器中传递多个路由

如何将字符串中的多个变量传递到查询中[重复]

如何将对象列表或数组传递到旨在更新单个对象的 GraphQL 突变中?