Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以从输入类型的结果中选择列_Php_Html_Mysql_Select_Pdo - Fatal编程技术网

Php 是否可以从输入类型的结果中选择列

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'

这可能吗?我希望能够只选择我在html表单中指定的列,但我不知道如何做到这一点。我已经搜索了很长一段时间,但没有找到任何符合我想法的东西

任何帮助都将不胜感激

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.不是字段值。由用户选择列名是非常罕见的。