如何将多个输入传递到单个查询中?
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】:您可以将输入字段命名为数组,例如:
<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]);
【讨论】:
谢谢!这有帮助 很高兴它有帮助!将错误<?php $colNum; ?>
修复为 =$colNum;?>以上是关于如何将多个输入传递到单个查询中?的主要内容,如果未能解决你的问题,请参考以下文章