我想知道我在这段代码中做错了什么..
我正在尝试从数据库生成菜单,但我遇到了问题。有些链接是正常的,如“index.php”,但有些看起来像数据库中的“browse.php | some.php | other.php”..我想过滤它并返回所有正常值,如“index.php”和出现“怪异链接”的地方,只需切除“|”之外的任何内容字符并成为“browse.php”。现在,使用我正在使用的代码,index.php不再出现,但奇怪的链接问题已经解决了。我做错了什么?
感谢您的任何建议..
$sql = "SELECT * FROM $tablename WHERE `Parent` = '0' AND Type LIKE 'top' ORDER BY `Order` ASC";
$result = mysql_query($sql) or die ("Error: Query Failed! " .mysql_error());
$output = "<ul>";
while ($rs = mysql_fetch_array($result)) {
$output .= "<li class='menu_top' id='".$rs['ID']."'><a href='".substr($rs['Link'], 0, strpos($rs['Link'], '|'))."'>".$rs['Name']."</a></li>";
//$output .= "<li class='menu_top' id='".$rs['ID']."'><a href='".$rs['Link']."'>".$rs['Name']."</a></li>";
$sql2 = "SELECT * FROM $tablename WHERE `Parent` = '".$rs['ID']."' ORDER BY `Order` ASC";
$result2 = mysql_query($sql2) or die ("Error: Query Failed! " .mysql_error());
if (mysql_num_rows($result2) != 0) {
$output .= "<ul class='menu_sub' id='".$rs['ID']."'>";
while ($rs2 = mysql_fetch_array($result2)){
$output .= "<li><a href='".$rs2['Link']."'>".$rs2['Name']."</a></li>";
}
$output .= "</ul>";
}
}
$output .="</ul>";
echo $output;
答案 0 :(得分:1)
此
strpos($rs['Link'], '|')
当链接类似于'index.php'时,返回false,所以你正在做:
substr($string, 0, false);
答案 1 :(得分:1)
您可以使用regullar expression \|.*$
删除首先|
使用preg_replace的示例代码
// returns only first link before |
preg_replace('/\|.*$/','',$link);
只需在需要输入链接的地方使用此代码,如果链接仅为index.php
或index.php|some.php
等,您就可以了。