如何使用php创建urlshortner

时间:2011-05-28 19:11:21

标签: php mysql easyphp

我已经使用链接http://devlup.com/programming/php/create-url-shortener-php/853/创建了url shortner,因为我使用的是EasyPhp5.3.6.0,但是我没有找到所需的输出,这意味着在点击缩短的url之后它没有重定向到原始页面。可能我认为问题出在数据库方面 这是我在数据库方面所做的步骤,请让我知道任何错误

首先我去了Configuration-> PhpMyAdmin链接,,然后我在这里创建了名为“leaf”的数据库我没有选择'Collat​​ion'名为dropdown我将表名称作为“团队”,字段数为“3”然后我修改后的字段如下所示

**Field            id                   url                        shortened**
Type             INT                 VARCHAR                     VARCHAR

Lenght/Values    255                 10000                       10000  
Default          None                None                        None

然后我将'id'作为主键

这些是PHP代码的一部分,其中数据库处理是一个 在sortner.php中

$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("leaf", $con); //Replace with your MySQL DB Name
$urlinput=mysql_real_escape_string($_POST['url']); 
$id=rand(10000,99999);
$shorturl=base_convert($id,20,36);
$sql = "insert into team values('$id','$urlinput','$shorturl')";
mysql_query($sql,$con);
echo "Shortened url is <a href=\"http://projects.devlup.com/url/". $shorturl ."\">http://devlup.com/". $shorturl ."</a>";
mysql_close($con);
?>

在decoder.php中

$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("leaf", $con); //Replace with your MySQL DB Name


$de= mysql_real_escape_string($_GET["decode"]);



$sql = 'select * from team where shortened="$de"';

$result=mysql_query("select * from team where shortened='$de'");

while($row = mysql_fetch_array($result))
{
$res=$row['url'];
header("location:$res");
}

请告诉我这里有什么问题,我的所有文件都在根文件夹(www)下,这意味着C:\ Program Files \ EasyPHP-5.3.6.0 \ www \ test

2 个答案:

答案 0 :(得分:1)

您确定已添加重写规则吗?

Options +FollowSymLinks -Indexes -MultiViews
RewriteEngine on
#
# Internally rewrite shortened URL requests to de-shortened URL lookup script filepath plus query string
RewriteRule ^([\w\d]{4})$ decoder.php?decode=$1 [L]

检查一下。否则检查一下

http://yourdomain.com/decoder.php?decode=<URL>

并检查你是否看到任何东西。

另外:一种丑陋但快速的调试方法是添加die('somehing');并继续通过脚本移动它以查看脚本停止的位置

编辑2:

你的脚本可以很简单:

$result = mysql_query("SELECT * FROM team WHERE shortened = '$de' LIMIT 1");
$row = mysql_fetch_array($result);
$res = $row['url'];
header("Location: $res");
exit;

另外,根据您的评论,您的脚本在哪里?是在文件夹url下还是在根文件夹下?这可能会使工作成为重写规则

编辑1:

此外:

  • 添加到查询LIMIT 1的末尾(因为短字符串只有1个网址)
  • 您不需要继续迭代,只需拨打mysql_fetch_array一次
  • 即可
  • 更改location Location并在该句后添加exit

答案 1 :(得分:0)

我不确定您的问题详细信息是否已详细,但如果您认为从数据库中获取缩短的URL是一个问题,那么至少尝试调试代码并查看周围发生的事情,例如:

$de= mysql_real_escape_string($_GET["decode"]);

echo "Shortened code: $de \n";

$result = mysql_query("select * from team where shortened='$de'");

while($row = mysql_fetch_array($result))
{
    var_dump($result);
    $res=$row['url'];
    echo "Raw URL: $res \n";
    //header("location:$res");
}

我自己也开发了一个URL缩短脚本,分发here。我知道如何制作它很多,所以如果你提供足够的信息,我可以帮助你。您可以在http://trisle.net/u/

上试用我的演示

希望我能提供帮助。