如何将CSS应用于动态生成的PHP数据库结果
我正在尝试解决如何使用CSS或PHP将一大块文本拆分为段落或换行符。我的PHP脚本查询MYSQL数据库,并根据用户选择的数字返回随机数目的条目(句子)。结果在一个大段落中呼应出来 我可以把这一段分成几个小段吗?我不想在每次结果后都换行 我可以用HTML中带有如何将CSS应用于动态生成的PHP数据库结果,php,mysql,css,Php,Mysql,Css,我正在尝试解决如何使用CSS或PHP将一大块文本拆分为段落或换行符。我的PHP脚本查询MYSQL数据库,并根据用户选择的数字返回随机数目的条目(句子)。结果在一个大段落中呼应出来 我可以把这一段分成几个小段吗?我不想在每次结果后都换行 我可以用HTML中带有标记或标记的固定文本来实现这一点,但是当我不知道文本块的长度时,如何使用动态生成的结果来实现这一点呢?我对PHP很陌生。如有任何建议,我们将不胜感激 代码如下: <?php $host="localhost"; // Host name
标记或
标记的固定文本来实现这一点,但是当我不知道文本块的长度时,如何使用动态生成的结果来实现这一点呢?我对PHP很陌生。如有任何建议,我们将不胜感激
代码如下:
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name="db"; // Database name
$tbl_name="sentence"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$sn=$_POST['numberofsentences'];
$query="SELECT line FROM `sentence` ORDER BY rand() LIMIT $sn";
$result = mysql_query($query);
while ( $row = mysql_fetch_array($result) ) {
// do something with $row. The following echos the results and adds a space after each sentence.
echo $row['line'], " ";
}
// Close the database connection
mysql_close();
?>
不幸的是,您唯一能做的就是使用HTML(以及可选的CSS)来实现这一点 您的示例代码也有一些问题。” '应该有一个
代码>在末尾。我假设您的意思是mysql\u fetch\u assoc()
,而不是mysql\u fetch\u array()
,因为您使用字符串索引而不是数字来引用$row
数组
$results = 0;
$max_results = 26;
while ($row = mysql_fetch_assoc($result))
{
$results++;
echo $row['line'] . " ";
if ($results % max_results == 0)
echo "<br /><br />";
}
$results=0;
$max_结果=26;
while($row=mysql\u fetch\u assoc($result))
{
$results++;
echo$行[“行”];
如果($results%max_results==0)
回声“
”;
}
这将打印出每行最多25个空格分隔的结果。这是非常粗糙的,但在浏览器中可以使用。理想情况下,您应该添加支持HTML标记,如HTML、正文等
另外,作为旁注:我知道您仍在学习,但请记住,无论何时在SQL字符串中接受任何类型的外部输入,都必须首先对它们进行清理。如果$\u POST['numberOfSequences']
等于0;删除数据库数据库代码>
如果希望POST变量为整数,请使用mysql\u real\u escape\u string()
后跟intval()
编辑:我不想删除我在帖子中关于点与逗号的错误,因为它在下面的评论中被引用,但如果我把它留在这里,似乎可能会引起一些混乱。您可以echo string1。string2
或回显string1、string2
。两者的输出相同,但在发动机罩下的工作方式完全不同。要查看原始帖子,只需查看历史记录。试试以下方法:
<?php
$host = "localhost"; // Host name
$username = ""; // Mysql username
$password = ""; // Mysql password
$db_name = "db"; // Database name
$tbl_name = "sentence"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$sn = $_POST['numberofsentences'];
$s_count_orig = $s_count = 1; // Sentence counter
$p_count = 1; // Paragraph counter
$per_para = 4; // 4 sentences per paragraph
$paras = array(); // Array to hold the paragraphs
$para = array(); // Array to hold the sentences
$query = "SELECT line FROM `sentence` ORDER BY rand() LIMIT $sn";
$result = mysql_query($query);
while ( $row = mysql_fetch_array($result) ) {
// do something with $row. The following echos the results and adds a space after each sentence.
// If there is room in the paragraph array for a sentence...
if($s_count <= $per_para) {
// Add the sentence to the array
$para[$p_count] = $row['line'];
// Next sentence
$s_count++;
}
else {
// We have a full paragraph, add it to our master array
$paras[] = $para[$p_count];
// Next paragraph
$p_count++;
// Reset sentence counter
$s_count = $s_count_orig;
}
}
// Iterate our master array of paragraphs
foreach($paras as $p){
// Echo each paragraph, and each sentence in each paragraph separated by two spaces
echo '<p>' . implode(' ',$p) . '</p>';
}
// Close the database connection
mysql_close();
?>
未经测试
define('NB_SENTENCE_PER_PARAGRAPH', 5);
// after the query...
$paragraphs = array();
$i = 0;
// prepare data
while ($row = mysql_fetch_array($result))
{
$index = floor(%i / NB_SENTENCE_PER_PARAGRAPH);
if (!isset($paragraphs[$index]))
$paragraphs[$index] = array();
$paragraphs[$index][] = $row['line'];
$i++;
}
// display
foreach ($paragraphs as $sentences)
{
echo '<p>'.implode(' ', $sentences).'</p>';
}
define('NB_句子,根据第5段);
//查询之后。。。
$段落=数组();
$i=0;
//准备数据
while($row=mysql\u fetch\u数组($result))
{
$index=下限(%i/NB每段的句子);
如果(!isset($段落[$index]))
$段落[$index]=array();
$段落[$索引][]=$行['line'];
$i++;
}
//展示
foreach($段为$句)
{
呼应“”。内爆(“”,$句子)。“”;
}
请注意,将数据检索与显示分开通常是一个好主意(提供更多的灵活性)。一个简单快捷的方法是为每个段落设置一个静态句子量,如4或5,并在循环中这样使用:
$count = 0;
while ($row = mysql_fetch_array($result)) {
// do something with $row. The following echos the results and adds a space after each sentence.
echo $row['line'], " ";
if ($count >= 4) {
echo '<br /> ';
$count = 0;
} else {
$count++;
}
}
$count=0;
而($row=mysql\u fetch\u数组($result)){
//用$row做一些事情。下面是对结果的回应,并在每个句子后添加空格。
echo$行[“行”],“;
如果($count>=4){
回声“
”;
$count=0;
}否则{
$count++;
}
}
一种简单快捷的方法是,设置每个段落的静态句子数量,如4或5,并在循环中使用:$count=0;while($row=mysql\u fetch\u array($result)){//对$row执行一些操作。以下内容将对结果进行回音,并在每个句子后添加一个空格。回音$row['line'],“ ;if($count Hi)。我尝试了这个方法,得到了每个句子(数据库结果)在单独的一行上重复。我需要他们每段分成4或5个句子。谢谢,我的意思是:如果($count>=4)。试试看!在这里,我将把它作为一个格式化的答案放进去。你是个天才!这正是我想要的。你知道我如何在每个段落的第一句之前加上三到四个空格(比如缩进?)谢谢你。呵呵,没问题。检查我发布的答案……它现在在每个段落之间有两个“
”标记。echo$foo,$bar;
非常好,比echo$foo.$bar;
快。谢谢你。一定要防止SQL注入。还有,为什么我需要用点而不是逗号。它可以用点来工作。我意识到这可能是一个非常幼稚的问题。ta@user1022772它们都可以工作。点将多个字符串连接成1,然后echo()
函数将打印单个字符串。使用逗号,您将向echo()传递多个参数
,然后循环遍历参数并按顺序打印。我一直使用点,但正如AlienWebuy所评论的,逗号也很好,而且显然更快。事实上,我不认为逗号与点对大多数普通PHP应用程序的性能有显著差异。请使用您更熟悉的任何一个。@Ozzah Actually,echo不是一个函数,而是一个语言构造。强烈建议不要将括号与echo一起使用。(例如,echo('string');实际上应该是echo'string';)=)感谢您在这方面的帮助。这让它更清楚了。您好。我尝试了这一点,得到了错误消息:警告:内爆()[函数.内爆]:传递的参数无效。