首页 >php教程 >php手册 >PHP和MySQL生成的标签云实现代码

PHP和MySQL生成的标签云实现代码

WBOY
WBOY原创
2016-05-25 16:51:061049浏览

用户输入文本和输入的文本在过去的一个标签云,标签云是一个用户生成的标签的可视化描述,或只是一个网站的文字内容,通常用来描述网站的内容。

为此,我们将创建一个HTML表格,将接受用户文本,也让用户可以看到从 MySQL数据库,其中包含在过去输入的文本生成的标签云,代码如下:

<?php
echo &#39;<form method="post" action="tag_cloud_gen.php" name="gen_tag_db">&#39;;
echo &#39;<p>Input your text here:<br /><textarea name="tag_input" rows="20" cols="80"></textarea></p>&#39;;
echo &#39;<input type="submit" name="submit">&#39;;
echo &#39;</form>&#39;;
?>
<br /> 
<h3>OR</h3> 
<br /> 
<p>see the current tag cloud here</p> 
<?php
echo &#39;<form name="show_tag_cloud" method="post" action="show_tag_cloud.php">&#39;;
echo &#39;<input type="submit" value="show current tag cloud" >&#39;;
echo &#39;</form>&#39;;
?>

其中每个计算其频率和对将进入一个数组,输入的文本将被表征为单个词。然后将这个数组存储到一个MySQL数据库,我们可以选择保存在MySQL数据库表coloumn存储任何链接,如果这个项目未来的扩展。

1) tag_id -- int,primary key,auto increament 1)tag_id - 整型,主键,自动increament

2) keyword - varchar(20),unique 2)关键字 - 数据类型为varchar(20),独特的

3) weight - int 3)重量 - 诠释

4) link - varchar(256). 4)链接 - 为varchar(256)。

代码如下:

<?php
/** 
 * this function will update the mysql database table to reflect the new count of the keyword
 * i.e. the sum of current count in the mysql database &amp;amp;amp;amp; current count in the input.
 */
function update_database_entry($connection, $table, $keyword, $weight) {
    $string = $_POST[&#39;tag_input&#39;];
    $connection = mysql_connect("localhost", "root", "");
    /** 
     * now comes the main part of generating the tag cloud
     * we would use a css styling for deciding the size of the tag according to its weight,
     * both of which would be fetched from mysql database.
     */
    $query = "select * from `tagcloud_db`.`tags` where keyword like &#39;%$keyword%&#39;";
    $resultset = mysql_query($query, $connection);
    if (!$resultset) {
        die(&#39;Invalid query: &#39; . mysql_error());
    } else {
        while ($row = mysql_fetch_array($resultset)) {
            $query = "UPDATE `tagcloud_db`.`tags` SET weight=" . ($row[2] + $weight) . " where tag_id=" . $row[0] . ";";
            mysql_query($query, $connection);
        }
    }
}
?>
<?php
/*
 * get the input string from the post and then tokenize it to get each word, save the words in an array
 * in case the word is repeated add &#39;1&#39; to the existing words counter
*/
$count = 0;
$tok = strtok($string, " t,;.&#39;\"!&-`nr"); //considering line-return,line-feed,white space,comma,ampersand,tab,etc... as word separator
if (strlen($tok) > 0) $tok = strtolower($tok);
$words = array();
$words[$tok] = 1;
while ($tok !== false) {
    echo "Word=$tok<br />";
    $tok = strtok(" t,;.&#39;\"!&-`nr");
    if (strlen($tok) > 0) {
        $tok = strtolower($tok);
        if ($words[$tok] >= 1) {
            $words[$tok] = $words[$tok] + 1;
        } else {
            $words[$tok] = 1;
        }
    }
}
print_r($words);
echo &#39;<br /><br />&#39;;
/** 
 * now enter the above array of word and corresponding count values into the database table
 * in case the keyword already exist in the table then update the database table using the function &#39;update_database_entry(...)&#39;
 */
$table = "tagcloud_db";
mysql_select_db($table, $connection);
foreach ($words as $keyword => $weight) {
    $query = "INSERT INTO `tagcloud_db`.`tags` (keyword,weight,link) values (&#39;" . $keyword . "&#39;," . $weight . ",&#39;NA&#39;)";
    if (!mysql_query($query, $connection)) {
        if (mysql_errno($connection) == 1062) {
            update_database_entry($connection, $table, $keyword, $weight);
        }
    }
}
mysql_close($connection);
?>

做出anether文件和将其命名为style.css文件,把下面的代码:

HTML, BODY 
	{ 
	padding: 0; 
	border: 0px none; 
	font-family: Verdana; 
	font-weight: none; 
	} 
	.tags_div 
	{ 
	padding: 3px; 
	border: 1px solid #A8A8C3; 
	background-color: white; 
	width: 500px; 
	-moz-border-radius: 5px; 
	} 
	H1 
	{ 
	font-size: 16px; 
	font-weight: none; 
	} 
	A:link 
	{ 
	color: #676F9D; 
	text-decoration: none; 
	} 
	A:hover 
	{ 
	text-decoration: none; 
	background-color: #4F5AA1; 
	color: white; 
	}

这将使我们的标签云外观漂亮,它保存为style.css的,再次,使一个新的PHP文件,并命名它show_tag_cloud.php。

在PHP代码中,如下我们连接到MySQL数据库,获取所有的标签,其重量和纽带,然后计算每个使用它的重量及最小的标签大小假定为标签的大小,它也是每一个标签从数据库中检索或与Google链接,如果没有链接存在,即"不适用"的链接,代码如下:

<?php
$connection = mysql_connect("localhost", "root", "");
$table = "tagcloud_db";
$words = array();
$words_link = array();
mysql_select_db($table, $connection);
$query = "SELECT keyword,weight,link FROM `tagcloud_db`.`tags`;";
if ($resultset = mysql_query($query, $connection)) {
    while ($row = mysql_fetch_row($resultset)) {
        $words[$row[0]] = $row[1];
        $words_link[$row[0]] = $row[2];
    }
}
// Incresing this number will make the words bigger; Decreasing will do reverse
$factor = 0.5;
// Smallest font size possible
$starting_font_size = 12;
// Tag Separator
$tag_separator = &#39;     &#39;;
$max_count = array_sum($words);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML> 
 <HEAD> 
  <TITLE> Tag Cloud Generator </TITLE> 
  <META NAME="Keywords" CONTENT="tag, cloud, php, mysql"> 
  <META NAME="Description" CONTENT="A Tag Cloud using php and mysql"> 
  <LINK REL="stylesheet" HREF="style.css" TYPE="text/css"> 
 </HEAD> 
<BODY> 
<center><h1>Tag Cloud using php and mysql </h1><div align=&#39;center&#39; class=&#39;tags_div&#39;> 
<?php
foreach ($words as $tag => $weight) {
    $x = round(($weight * 100) / $max_count) * $factor;
    $font_size = $starting_font_size + $x . &#39;px&#39;;
    if ($words_link[$tag] == &#39;NA&#39;) echo "<span style=&#39;font-size: " . $font_size . "; color: #676F9D;&#39;><a href=&#39;http://www.google.co.in/search?hl=en&q=" . $tag . "&meta=&#39;>" . $tag . "</a></span>" . $tag_separator;
    else echo "<span style=&#39;font-size: " . $font_size . "; color: #676F9D;&#39;><a href=&#39;http://" . $words_link[$tag] . "/&#39;>" . $tag . "</a></span>" . $tag_separator;
}
?>
</div></center> 
</BODY> 
</HTML>

现在把他们所有在您的Web服务器的根目录,并观看结果。 每个查询会给你新的结果,随着时间的推移,数据库的增长。

教程链接:

随意转载~但请保留教程地址★

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn