我有一个PHP功能,可以满足我的需要,但现在我发现它有机会失败。我使用mod重写来重写url,这个函数需要重写url才能工作。如果我有2个页面已被重写为相同,即使它们不相同,也可能会失败。
该函数读取url并使用/作为分隔符将其拆分为部分。
我想要做的是检查网址中是否包含“论坛”一词,以及是否使用查询中的以下网址部分查询数据库。
说我有一个像http://www.mydomain.com/forum/1/2/6这样的网址我希望得到1和2作为我的查询,这将是boardid和topicid。最后一位是页码。
这是一个重写的网址,通常看起来像http://www.mydomain.com/topic.php?boardid=1&topicid=2&pagenum=6,但是使用我无法拆分的功能,因为没有/。
我可以轻松完成查询,只需检查网址以确保“论坛”在那里,然后执行查询。如果它不在网址中,则继续正常进行。
这是我的php breadcrumb的代码
function breadcrumb(
$home = 'Home', // Name of root link
$division = ' / ', // Divider between links
$hidextra = true, // Toggle hide/show get data and fragment in text
$index = false, // Toggle show/hide link to directory if it does not contain a file
$indexname = 'index.php' // The definition of the file the directory must contain
) {
$breadcrumb="";
// Requested addons...
$extension = '.php'; // Extension to cut off the end of the TEXT links
$ifIndex = 'index.php'; // Filename of index/default/home files to not display
// End requested addons
$whole = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if(stristr($whole,"contact-bidder")) {
$whole = substr($whole,0,strrpos($whole,'/'));
}
$parts = explode('/', $whole);
$parts[0] = 'http://'.$parts[0];
$array = array('-', '%20');
$breadcrumb .= "<a href=\"{$parts[0]}\">{$home}</a>{$division}";
$k = 1;
for ($i=1;$i < sizeof($parts);$i++) {
$uri = '/';
while ($k <= $i) {
$uri .= $parts[$k];
if ($k != (sizeof($parts)-1)) $uri .= '/';
$k++;
}
if (($index && is_dir($_SERVER['DOCUMENT_ROOT'].$uri) && is_file($_SERVER['DOCUMENT_ROOT'].$uri.$indexname)
|| !$index
|| !is_dir($_SERVER['DOCUMENT_ROOT'].$uri)) && $parts[$i] != $ifIndex) {
$breadcrumb .= "<a href=\"$uri\">";
if ($hidextra) {
$breadcrumb .= rtrim(preg_replace("/\?.*$/", '', ucwords(str_replace($array," ",$parts[$i]))), $extension);
}
else {
$breadcrumb .= rtrim(ucwords($parts[$i]), $extension);
}
$breadcrumb .= '</a>';
}
else {
$breadcrumb .= ucwords(str_replace($array," ",$parts[$i]));
}
if (isset($parts[($i+1)])) {
$breadcrumb .= $division;
}
$k = 1;
}
return $breadcrumb;
}
如果这不可能或不容易,有没有办法可以拆分?和&amp;只获得之前的东西?并且=对于url中的每个变量
答案 0 :(得分:1)
URL后面的变量字符串称为查询字符串。检查查询字符串中是否存在变量的最佳方法是查看$ _GET数组。
所以......如果你有:
http://google.com/?key=value&another_key=another_value&forum=22
您可以像这样检查变量'forum':
if (isset($_GET['forum'])){
// 'forum' has been set in the query string, do something...
} else {
// 'forum' has NOT been set.
}
答案 1 :(得分:0)
我设法解决了我需要的方式,并没有那么难
function breadcrumb(
$home = 'Home', // Name of root link
$division = ' / ', // Divider between links
$hidextra = true, // Toggle hide/show get data and fragment in text
$index = false, // Toggle show/hide link to directory if it does not contain a file
$indexname = 'index.php' // The definition of the file the directory must contain
) {
global $host,$dbUser,$dbPass,$dbName;
require_once("php/database/connection.php");
require_once("php/database/MySQL.php");
// Connect to the database and grab the email
$db = & new MySQL($host,$dbUser,$dbPass,$dbName);
$breadcrumb="";
// Requested addons...
$extension = '.php'; // Extension to cut off the end of the TEXT links
$ifIndex = 'index.php'; // Filename of index/default/home files to not display
// End requested addons
$whole = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$parts = explode('/', $whole);
$parts[0] = 'http://'.$parts[0];
$array = array('-', '%20');
$breadcrumb .= "<a href=\"{$parts[0]}\">{$home}</a>{$division}";
$k = 1;
for ($i=1;$i < sizeof($parts);$i++) {
$uri = '/';
while ($k <= $i) {
$uri .= $parts[$k];
if ($k != (sizeof($parts)-1)) $uri .= '/';
$k++;
}
if (($index && is_dir($_SERVER['DOCUMENT_ROOT'].$uri) && is_file($_SERVER['DOCUMENT_ROOT'].$uri.$indexname)
|| !$index
|| !is_dir($_SERVER['DOCUMENT_ROOT'].$uri)) && $parts[$i] != $ifIndex) {
$breadcrumb .= "<a href=\"$uri\">";
if ($hidextra) {
if($parts[$i-1]=="forum") {
$board = substr($parts[$i],6);
$sql = "SELECT boardname FROM boards WHERE boardid='".$board."'";
$result = $db->query($sql);
while($row=$result->fetch()) {
extract($row, EXTR_PREFIX_INVALID, '_');
$breadcrumb .= $boardname;
}
}
else if($parts[$i-2]=="forum") {
$topic = substr($parts[$i],10);
$sql = "SELECT topicname FROM topics WHERE topicid='".$topic."'";
$result = $db->query($sql);
while($row=$result->fetch()) {
extract($row, EXTR_PREFIX_INVALID, '_');
$breadcrumb .= $topicname;
}
}
else {
$breadcrumb .= rtrim(preg_replace("/\?.*$/", '', ucwords(str_replace($array," ",$parts[$i]))), $extension);
}
}
else {
$breadcrumb .= rtrim(ucwords($parts[$i]), $extension);
}
$breadcrumb .= '</a>';
}
else {
$breadcrumb .= ucwords(str_replace($array," ",$parts[$i]));
}
if (isset($parts[($i+1)])) {
$breadcrumb .= $division;
}
$k = 1;
}
return $breadcrumb;
}
如果以前是'论坛',我必须检查当前部分,建立与数据库的连接,获取我需要的信息,然后替换面包屑中的内容。下一个面包屑也是如此。
它现在应该如何运作。