Php 是否可以从输入类型的结果中选择列
这可能吗?我希望能够只选择我在html表单中指定的列,但我不知道如何做到这一点。我已经搜索了很长一段时间,但没有找到任何符合我想法的东西 任何帮助都将不胜感激Php 是否可以从输入类型的结果中选择列,php,html,mysql,select,pdo,Php,Html,Mysql,Select,Pdo,这可能吗?我希望能够只选择我在html表单中指定的列,但我不知道如何做到这一点。我已经搜索了很长一段时间,但没有找到任何符合我想法的东西 任何帮助都将不胜感激 echo "<select name='test'><option value='column1'>Column1</option></select>" echo "<input type='submit' name='grafiek' value='Maak grafiek'
echo "<select name='test'><option value='column1'>Column1</option></select>"
echo "<input type='submit' name='grafiek' value='Maak grafiek'>";
if(isset($_POST['checkvakje']) && $_POST['test'] && $_POST['grafiek']) {
$tijd = $_POST['checkvakje'];
foreach($tijd as $time) {
try {
$stmt = $pdo->prepare("SELECT [the column i selected] FROM statistieken WHERE tijd = :tijd AND poortid = :poort");
$stmt->execute(array(":tijd" => $time, ":poort" => $poort));
if($stmt->rowCount() > 0) {
while($row = $stmt->fetch()) {
echo "<tr>";
echo "<td>".$row['column i selected']."</td>";
echo "</tr>";
}
}
}
catch(PDOexception $e) {
echo "Query ging fout: " . $e->getMessage() ."";
}
}
}
echo“Column1”
回声“;
如果(isset($邮政['checkvakje'])和&$邮政['test']和&$邮政['grafiek'])){
$tijd=$_POST['checkvakje'];
foreach($tijd作为$time){
试一试{
$stmt=$pdo->prepare(“从statistieken中选择[我选择的列],其中tijd=:tijd和poortid=:poort”);
$stmt->execute(数组(“:tijd”=>$time,”:poort”=>$poort));
如果($stmt->rowCount()>0){
而($row=$stmt->fetch()){
回声“;
回显“$行[“我选择的列”]”;
回声“;
}
}
}
捕获(PDO$e){
echo“Query fout:”.$e->getMessage();
}
}
}
不通过参数绑定
知道列名后,您必须验证输入是否与白名单匹配,这样就不会出现错误,更重要的是,它是安全的
例如:
$allowedColumns = ['foo', 'bar', 'baz'];
if (in_array($_POST['column'], $allowedColumns, true)) {
$column = $_POST['column'];
} else {
// Error: Invalid input
}
$sql = "SELECT {$column} FROM dummy WHERE whatever = 'example'";
选择all列,然后在php端像这样控制它
while($row = $stmt->fetch())
{
echo "<tr>";
echo "<td>".$row[$_POST['test']]."</td>";
echo "</tr>";
}
while($row=$stmt->fetch())
{
回声“;
回显“$row[$\u POST['test']]”;
回声“;
}
注意:使用用户数据作为列名看起来有很多安全问题您可以选择用户选择列,但不能将表单值直接用于查询。使用某些条件检查其有效列是否无效,然后使用。您选择的列存储在
$\u POST['test']
中,不是吗?@Ollaw,这是正确的。我自己做了一些尝试,但没有任何运气。你可以直接在$_POST['test']@AmitSahu中获取选定列值,可能不直接-最好使用一些表单名到db列的映射,这将用作白名单并隐藏db详细信息。为什么不通过参数绑定?正是我想要的,非常感谢您的帮助!因为它不是一个参数;i、 e.不是字段值。由用户选择列名是非常罕见的。