2012-01-28 3 views
1

ユーザーがレコードIDを指定してリダイレクトするURL短縮スクリプトがあります。ただし、検索したレコードが存在しない場合は、特定のページにユーザーをリダイレクトできます。これどうやってするの?レコードがデータベースにない場合にユーザーをリダイレクトする

私の現在のコードは次のとおりです。

<? 

mysql_connect("localhost","username","password"); 
mysql_select_db("database"); 

$sql="select * from shortened where (shortened.id='".mysql_real_escape_string($_GET['url'])."')"; 
$query=mysql_query($sql); 
while($row = mysql_fetch_array($query)){ 
header('Location:'.$row['url']); 
} 

?> 

私は、人々は私が説明しようとしているかを理解することができます願っています。

+0

Guysは、ここで少なくともください - '(!はmysql_num_rows($クエリ))場合には、神のために – zerkms

答えて

2

は右あなたのwhile一部

if (!mysql_num_rows($query)) { 
    header('Location: http://google.com'); 
    exit; 
} 

を入れて、あなたのwhileが実際のように書き換えることができる。

$row = mysql_fetch_array($query); 
header('Location:'.$row['url']); 

(はい、ちょうどwhileを削除する - それが、この場合は無意味です)

+3

が、それは'すべきではない、PDOとプレースホルダを言及していない、または私は何かが足りないのですか?このようにして関数が0/falseを返す場合、if条件はtrueと評価されます。 – xbonez

+0

@xbonez:はい、修正する必要があります。ブラウザでプログラミングしているだけの誤字。ありがとう;-) – zerkms

1
<? 

mysql_connect("localhost","username","password"); 
mysql_select_db("database"); 

$sql="select * from shortened where (shortened.id='".mysql_real_escape_string($_GET['url'])."')"; 
$query=mysql_query($sql); 

$row = mysql_fetch_array($query) 

header('Location:'.$row['url']); 


?> 

ループはここでは必要ありません。

1

これはどうですか。

<? 
mysql_connect("localhost","username","password"); 
mysql_select_db("database"); 

$sql="select * from shortened where (shortened.id='".mysql_real_escape_string($_GET['url'])."')"; 
$query=mysql_query($sql); 

if(mysql_num_rows($query) > 0){ 
    $row = mysql_fetch_array($query); 
    $url = $row['url']; 
} else { 
     $url = "http://othersite.com"; 

} 
header("Location: $url"); 

?> 
+0

+1 - 問題を解決し、いくつかの最適化を導入しました( 'header'を一度呼び出すことは可能ですが)。 – mrlee

+0

リダイレクトの後に' exit; 'を置くことが重要です。サーバー上で実行します。それはあなたがハードな方法を学ぶものです= –

関連する問題