我有一个包含表中列名的选择列表。单击提交按钮时,会显示一个带有列名的表,但它不会显示表中的数据,而是重复选择列表的值。例如,如果选择了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查询,而不是作为列名(您想要的)。