使用php通过选择列表显示表格数据


displaying table data via select list with php

我有一个包含表中列名的选择列表。单击提交按钮时,会显示一个带有列名的表,但它不会显示表中的数据,而是重复选择列表的值。例如,如果选择了teamname。它显示'teamname'4次,因为我的表中有4行,但我希望它显示实际的teamname,而不是单词'teamname;。

我相信这与我的变量$select有关,以及我如何在sql语句中使用它,或者我如何将它定义为变量?

它使用的是选择列表中的值,而不是表列中的值。

注意:对此使用PDO方法

HTML

        <form method='post' action='phpfiles/selectList.php'>
            <select name='select'>
                <option value='teamname' id='team'>teamname</option>
                <option value='city' id='city'>city</option>
                <option value='best' id='best'>bestplayer</option>
                <option value='year' id='year'>year</option>
                <option value='website' id='website'>website</option>
            </select>
            <br>
            <input type='submit' id='selectSubmit' value='Submit Data'>
        </form>

PHP

<?php
    $select = $_POST['select'];
    echo "<table style='border: solid 1px black;'>";
    echo "<tr><th>'$select'</th></tr>";
    class TableRows extends RecursiveIteratorIterator { 
        function __construct($it) { 
            parent::__construct($it, self::LEAVES_ONLY); 
        }
        function current() {
            return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
        }
        function beginChildren() { 
            echo "<tr>"; 
        } 
        function endChildren() { 
            echo "</tr>" . "'n";
        } 
    } 
    if ($_SERVER["REQUEST_METHOD"] == "POST"){  
        // server and database information
       $servername = "localhost";
       $username = "";
       $password = "";
       $dbname = "";
       $select = $_POST['select'];
        try {
            $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $stmt = $conn->prepare("SELECT '$select' FROM teams"); 
            $stmt->execute();
            // set the resulting array to associative
            $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
            foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
                echo $v;
            }
        }
        catch(PDOException $e) {
            echo "Error: " . $e->getMessage();
        }
        $conn = null;
        echo "</table>";
    }    
?>

不要使用'引号:

$stmt = $conn->prepare("SELECT $select FROM teams");

或者最好用"`"来引用它:

$stmt = $conn->prepare("SELECT `$select` FROM teams");

'将它标记为一个简单的字符串以输出给sql查询,而不是作为列名(您想要的)。