-2

リンクhttp://devlup.com/programming/php/create-url-shortener-php/853/ を使用して短縮URLを作成しました。これにはEasyPhp5.3.6.0を使用していますが、必要なものが見つかりません出力、つまり、短縮された URL をクリックした後、元のページにリダイレクトされないことを意味します。おそらく、問題はデータベース側にあると考えています。これはデータベース側で行った手順です。何か問題がある場合はお知らせください。

最初に Configuration->PhpMyAdmin リンクに移動し、ここで「leaf」という名前のデータベースを作成しました。「Collat​​ion」という名前のドロップダウンを選択しませんでした。テーブル名を「team」、フィールド数を「3」にしてから、次のようにフィールドを変更しました。下

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

Lenght/Values    255                 10000                       10000  
Default          None                None                        None

次に、「id」を主キーとして作成しました

これらは、データベース処理が sortner.php で行われる 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);
?>

デコーダー.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 です。

4

2 に答える 2

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(短い文字列の URL が 1 つしかないため)
  • 反復を維持する必要はありません。mysql_fetch_array一度呼び出すだけです
  • その文の後に変更locationLocationて追加exit
于 2011-05-28T19:19:25.783 に答える
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 短縮スクリプトを自分で開発し、ここで配布しています。作り方はよく知っているので、詳しく教えていただけると助かります。私のデモはhttp://trisle.net/u/で試すことができます。

私が助けてくれることを願っています。

于 2011-05-28T21:10:49.260 に答える