HTML页面显示PHP代码而非运行,下拉菜单读取MySQL数据时显示'.$id.'字面量
搞定你的下拉菜单与PHP解析问题
咱们一步步拆解你遇到的两个问题,逐个解决:
问题1:HTML页面直接显示PHP代码
这事儿本质是服务器没把你的PHP代码当成程序来运行,而是直接当成文本输出了,常见原因和解决办法:
- 文件后缀不对:一定要把你的网页文件后缀改成
.php(比如test.php),默认情况下服务器只会解析.php后缀文件里的PHP代码,.html文件里的PHP会被直接当成文本。 - 服务器没配置PHP解析:如果是你自己搭的服务器(比如Apache或者Nginx),得确保已经装了PHP模块,并且配置文件里开了PHP解析的规则。
问题2:下拉菜单显示'.$id.'字面量
这个其实是第一个问题带出来的——PHP代码没运行,所以echo那段代码就直接原样输出了。不过就算PHP正常跑起来,你的代码还有几个坑,一起给你填上:
换掉过时的mysql_*函数
mysql_*系列函数早就被PHP弃用了,PHP7之后甚至直接删掉了,用mysqli或者PDO才是正道。下面是用mysqli面向对象重写的完整代码,更靠谱:
<label>Test Dropdown</label> <select class="form-control" name="client"> <option value="pick">CHOOSE</option> <?php $dbhost = '#########'; $dbuser = '#########'; $dbpass = '$$$$$$$$$$$$$$'; $dbdata = '############'; // 用mysqli面向对象连接数据库 $conn = new mysqli($dbhost, $dbuser, $dbpass, $dbdata); // 检查连接是否成功 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT * FROM client"; $result = $conn->query($sql); if ($result->num_rows > 0) { // 循环取出每条数据 while ($row = $result->fetch_assoc()) { $id = $row['fname']; // 用双引号嵌变量,比单引号拼接更不容易出错 echo "<option value=\"$id\">$id</option>"; // 更安全的做法:用htmlspecialchars转义,防止XSS攻击 // $safeName = htmlspecialchars($id, ENT_QUOTES); // echo "<option value=\"$safeName\">$safeName</option>"; } } // 用完记得关连接 $conn->close(); ?> </select>
优化变量拼接(避坑小技巧)
你原来用单引号拼接变量,很容易因为漏写引号或者点号出错,改用双引号可以直接把变量嵌在字符串里,直观又省心:
// 原来的写法 echo '<option value="'.$id.'">'.$id.'</option>'; // 更简洁的写法 echo "<option value=\"$id\">$id</option>";
加个安全防护(推荐)
把数据库里的数据输出到HTML页面时,最好用htmlspecialchars()转义一下,防止恶意脚本注入(也就是XSS攻击),安全性拉满:
$safeName = htmlspecialchars($row['fname'], ENT_QUOTES); echo "<option value=\"$safeName\">$safeName</option>";
最后总结下操作步骤
- 把你的网页文件后缀改成
.php。 - 确认服务器已经正确配置好了PHP解析。
- 把旧的
mysql_*函数换成mysqli或者PDO的写法。 - 优化变量拼接方式,加上安全防护。
内容的提问来源于stack exchange,提问作者Jordan Farris
相关产品推荐
相关产品推荐

