-1

我想要做的是创建一个类似永久链接的系统,例如 wordpress 永久链接。

例如:

  $value = 'abc';
    if($query_result > 0){
       $value = 'abc1'; // if exists check abc2, abc3, abc4, abc5, etc. etc.
    } else{
      return $value
    }

查询结果为搜索行数$query_result = mysql_num_rows

此刻我创建了这个:

if(!empty($_POST['ajax'])){
    if($_POST['ajax'] == 'pages'){
        echo prettyName($_POST['title']);
    }
}

function prettyName($string)
{
    $echo = strtolower(str_replace(array('  ', ' '), '-', preg_replace('/[^a-zA-Z0-9 s]/', '', trim($string))));
    $sql = "SELECT * FROM posts WHERE post_pretty = '".$echo."'";
    $res = mysql_query($sql) or die (mysql_error());
    $num = mysql_num_rows($res);
    if($num){
        $echo = $echo.'-'.pretty2($echo, $num);
    }
    return $echo;
}

function pretty2($echo,$num,$i = 1)
{
    $sql = "SELECT * FROM posts WHERE post_pretty = '".$echo.'-'.$i."'";
    $res = mysql_query($sql) or die (mysql_error());
    $num = mysql_num_rows($res);
    if($num){
        $i++;
        $i = pretty2($echo,$num,$i);
    }
    return $i;
}

它有什么作用:

  1. 检查$value( $_POST['title']) 是否存在
  2. 转换为漂亮字符串(例如:abc = abc)
  3. 检查 prettystring 是否存在 else +1(例如:abc 存在,abc-1 - abc-9999)
  4. 循环 prettystring 直到免费名称不存在。

但出问题的是:

例如,如果我创建一个新帖子:

new post 1 name = testpage // results in testpage
new post 2 name = testpage // results in testpage-1
new post 3 name = test-page // results in testpage-2 // should be test-page

如果我创建一个包含太多空格的新帖子,它也会出错,我可以用什么来删除所有空格?尝试使用 TRIM 功能,但没有奏效。还是我应该使用 javascript 来避免这种情况?

4

1 回答 1

2

abc如果 num rows 为 0 ,它将返回

$value = 'abc';
$query_result = mysql_query("SELECT * FROM `table`");
$num_result = mysql_num_rows($query_result);

if($num_result){
   $value = 'abc1';
}

PS。尝试使用 PDO 进行下一次开发。一个很好的教程

对于您的问题:

$query_result = mysql_query("SELECT `name` FROM `Table1` ORDER BY `name` DESC LIMIT 1");
$num_result = mysql_num_rows($query_result);

if($num_result){
   $row = mysql_fetch_assoc($query_result);
   $value = (int)str_replace('abc', '', $row['name']);
   $value = 'abc'.($value+1);
}
于 2012-08-27T06:56:13.700 回答