我正在学习php并制作了一个简单的应用程序,将人名保存到数据库中,然后将所有保存的名称拉到页面下方的列表中。
这是获取名称的代码:echo "<div class=\"results\"> $row[Name] </div>";
我在结果类中添加了一个div,以便我可以设置样式。在这一点上,我想做的就是将结果集中在一起。在使用css进行样式设置以使其居中后,查看页面源,每个echo'ed的名称都有一个div与结果类。它们都像我想要的那样居中,但这似乎不是最好的方法,因为会为数据库中的每个新名称创建一个新的div(现在有18个div。太多了!)我希望只创造一个div,但我显然是错的。
那么,是否有可能在html标记中预先创建div而没有任何内容并将名称回显到div中?或者你认为有一种方法可以让它一次全部输出,所以它都在一个div内?
以下是代码的其余部分,以便您了解发生了什么:
<?php
$connect = mysql_connect("localhost","user","0123");
if(!$connect){
die("Failed to connect: " . mysql_error());
}
if(!mysql_select_db("Test")) {
die("Failed to select database: " . mysql_error());
}
$results = mysql_query("SELECT * FROM Friends");
while($row = mysql_fetch_array($results)){
echo "<div class=\"results\"> $row[Name] </div>";
}
if ($_POST[name] !="") { $sql="INSERT INTO Friends
(name) VALUES('$_POST[name]')";
if (!mysql_query($sql,$connect))
{
die('Error: ' . mysql_error());
}
echo "<div id=\"added\"> $_POST[name] added to the database </div>";
}
else die("")
?>
答案 0 :(得分:4)
由于在while循环中输出div,因此每个结果都会得到一个新的div。只需在循环外移动div:
echo "<div class=\"results\">";
while($row = mysql_fetch_array($results)){
echo $row['Name'];
}
echo "</div>";
请注意,您应该始终引用您的密钥。使用$row['Name']
代替$row[Name]
(如果Name是定义的常量,则显然不是这样。)
答案 1 :(得分:2)
我认为最好有一些变量来存储输出:
$out .= "<div class=\"results\">";
while($row = mysql_fetch_array($results)){
$out .= $row[Name]."<br />";
}
$out .= "</div>";
echo $out;
答案 2 :(得分:2)
不要让php输出html标签。它在代码中看起来很糟糕,你的编辑器不会将它识别为html,并且会使它变得很糟糕。一般来说,我建议先做所有的PHP处理,然后在其中制作带有PHP输出的HTML。像这样:
请注意,我已将div
替换为ul
,因为您的列表似乎更适合ul
而不是div
。显然,你可以在HTML中使用你想要的任何标签
<?php
// do all php stuff here
$persons = /* get collection from database here */
?>
<html>
<head>
</head>
<body>
<ul id="ListOfPersons">
<? foreach ($persons as $person): ?>
<li>
<?= $person["Name"] ?>
</li>
<? endforeach ?>
</ul>
</body>
</html>
答案 3 :(得分:0)
您可以将div创建与结果 echoing 分开:
echo '<div class="results">';
while($row = mysql_fetch_array($results)){
echo $row['Name'].'<br/>';
}
echo '</div>';
如果您不希望div
如果没有结果(没有朋友),您可以使用mysql_num_rows