You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何CSS的top与text-align属性对PHP输出元素不生效?

问题分析与解决方案

先给你拆解一下导致top和text-align失效的核心原因,再一步步帮你修正:

核心问题1:PHP输出的元素位置完全错误

你把require_once('phpsearchcode.php')放在了<head>标签里,但PHP执行后输出的<div class='results'>是页面内容元素,按照HTML规范,<head>里只能放元数据(样式、脚本、标题这类),不能放<div>这类主体内容。浏览器会自动修正这个错误,但修正后的元素布局上下文会彻底混乱,直接导致依赖正常文档流的CSS属性失效。

核心问题2:top:55%无计算依据

position: relative的top百分比是相对于父元素的高度计算的,你的html, body没有设置height:100%,就算元素位置正确,55%也没有参考高度,自然不会生效。

核心问题3:text-align被废弃标签干扰

你在PHP代码里给内容套了<center>标签(这个标签已经被HTML5废弃),虽然它会强制内容居中,但会干扰CSS的text-align属性,而且和你的CSS声明冲突。


具体修正步骤

1. 把PHP结果输出移到正确位置

将require_once从<head>移到<body>里表单下方的位置,也就是你想显示搜索结果的地方:

<body>
    <center>
        <img src="rs.png" id="logo"/><br />
        <form action="search.php" method="post">
            <input type="text" name="search" id="bug">
            <input type="submit" name="submit" value="search" id="rat">
        </form>
        <!-- 搜索结果放在这里 -->
        <?php require_once('phpsearchcode.php'); ?>
    </center>
</body>

2. 修正PHP代码,移除废弃标签

删掉<center>标签,改用CSS控制居中:

<?php 
$connection = @mysqli_connect("localhost","root","","R"); 
if($connection->connect_error){
    die("Connection failed: " . $connection->connect_error); 
} 
// 这里要注意:原代码有SQL注入风险,后面会给你修正
$sql="SELECT username FROM userinfo WHERE username LIKE '%" . $_POST['search'] . "%';"; 
$res=$connection->query($sql); 
while($row=$res->fetch_assoc()){
    echo "<div class='results'>Username: " . $row['username'] . "</div>"; 
} 
mysqli_close($connection); 
?>

3. 调整CSS,让属性正常生效

给html, body添加高度,确保top:55%有计算依据,同时优化样式写法:

html,body {
    background-color: #282C35;
    color: white;
    margin: 0px;
    height: 100%; /* 新增:让body占满视口高度 */
}
.results {
    position: relative;
    top: 55%;
    margin: 0 auto; /* 水平居中,代替废弃的<center> */
    background-color: #36393E;
    width: 20%;
    text-align: center;
    padding: 10px 0 30px; /* 简化padding写法 */
}

4. 紧急修复SQL注入漏洞!

你的原PHP代码直接把$_POST['search']拼进SQL语句里,这是严重的安全漏洞,黑客可以轻松篡改你的数据库。改用预处理语句修复:

<?php 
$connection = mysqli_connect("localhost","root","","R");
if(mysqli_connect_error()){
    die("Connection failed: " . mysqli_connect_error());
}
// 使用预处理语句防止SQL注入
$sql = "SELECT username FROM userinfo WHERE username LIKE ?;";
$stmt = mysqli_prepare($connection, $sql);
$searchTerm = "%" . $_POST['search'] . "%";
mysqli_stmt_bind_param($stmt, "s", $searchTerm);
mysqli_stmt_execute($stmt);
$res = mysqli_stmt_get_result($stmt);
while($row = mysqli_fetch_assoc($res)){
    echo "<div class='results'>Username: " . $row['username'] . "</div>";
}
mysqli_close($connection);
?>

内容的提问来源于stack exchange,提问作者yebulosij

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:29:27