php
  • html
  • mysql
  • select
  • pdo
  • 2017-05-23 26 views 0 likes 
    0

    這可能嗎?我希望能夠只選擇我在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() .""; 
         } 
         } 
        } 
    
    +0

    您可以選擇用戶選擇列,但不直接使用表單值進行查詢。使用一些條件來檢查它的有效列不是,然後使用。 – JYoThI

    +0

    您選擇的列存儲在'$ _POST ['test']'中,不是嗎? – Ollaw

    +0

    @Ollaw,這是正確的。我自己嘗試了幾件事,但沒有任何運氣。 – vaxzz

    回答

    1

    不通過參數綁定。

    瞭解列名稱,您必須驗證輸入是否與白名單匹配,以便沒有錯誤,更重要的是 - 它是安全的。

    例如:

    $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'"; 
    
    +0

    爲什麼不通過參數綁定? – Ollaw

    +0

    正是我想要的,非常感謝幫助! – vaxzz

    +1

    因爲它不是一個參數;即不是字段*值*。用戶選擇列名是非常罕見的。 – Narf

    0

    選擇所有列,只是控制它在PHP側這樣

    while($row = $stmt->fetch()) 
    { 
    
          echo "<tr>"; 
          echo "<td>".$row[$_POST['test']]."</td>"; 
          echo "</tr>"; 
    } 
    

    注意:在使用用戶數據作爲列名看上去有那麼多的安全問題

    相關問題