如何将CSS应用于动态生成的PHP数据库结果

如何将CSS应用于动态生成的PHP数据库结果,php,mysql,css,Php,Mysql,Css,我正在尝试解决如何使用CSS或PHP将一大块文本拆分为段落或换行符。我的PHP脚本查询MYSQL数据库,并根据用户选择的数字返回随机数目的条目(句子)。结果在一个大段落中呼应出来 我可以把这一段分成几个小段吗?我不想在每次结果后都换行 我可以用HTML中带有标记或标记的固定文本来实现这一点,但是当我不知道文本块的长度时,如何使用动态生成的结果来实现这一点呢?我对PHP很陌生。如有任何建议,我们将不胜感激 代码如下: <?php $host="localhost"; // Host name

我正在尝试解决如何使用CSS或PHP将一大块文本拆分为段落或换行符。我的PHP脚本查询MYSQL数据库,并根据用户选择的数字返回随机数目的条目(句子)。结果在一个大段落中呼应出来

我可以把这一段分成几个小段吗?我不想在每次结果后都换行

我可以用HTML中带有
标记或

标记的固定文本来实现这一点,但是当我不知道文本块的长度时,如何使用动态生成的结果来实现这一点呢?我对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'], "&nbsp";
}

// 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'] . "&nbsp;";

  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('&nbsp;&nbsp;',$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('&nbsp;', $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'], "&nbsp"; 
    if ($count >= 4) { 
        echo '<br />&nbsp;&nbsp;&nbsp;&nbsp;'; 
        $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';)=)感谢您在这方面的帮助。这让它更清楚了。您好。我尝试了这一点,得到了错误消息:警告:内爆()[函数.内爆]:传递的参数无效。