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

时间:2015-11-14 17:56:25

标签: php

我有一个包含我的表中列名的选择列表。单击提交按钮时,将显示一个包含列名称的表,但不是显示表中的数据,而是重复选择列表的值。例如,如果选择了teamname。它显示'teamname'4次,因为我的表中有4行,但我希望它显示实际的团队名称而不是'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>";
    }    
?>

1 个答案:

答案 0 :(得分:0)

请勿使用'引号:

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

或者更好,使用&#34;`&#34;引用它:

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

'将其标记为要为sql查询输出的简单字符串,而不是列名称(您想要的)。