質問

ユーザーが自分の Web サイトの URL を送信できる登録システムを作成しようとしています。ユーザーが URL を入力すると、その URL がすでに存在するかどうかをデータベースと照合して確認し、存在する場合は拒否します。

ただし、私の問題はこれが原因です:

もし http://www.example.com データベースにあるので入力します http://example.com, 、チェックに関する限り、これは別の URL としてカウントされ、送信が許可されます。

すべてのレコードを取得し、レコードを削除する以外に、これを処理する適切な方法はありますか? www 存在する場合は比較しますか?(これは非常に非効率な方法です。)

注記 :このためのヘルパー関数がある場合に備えて、Laravel タグを追加します (laravel-4 インストールを使用しています)。

編集 :これが私の現在のチェックロジックです。

$exists_url = DB::table("user_urls")
        ->where('site_url', 'like', $siteurl)
        ->get();
        if($exists_url)
        {
            return Redirect::to('submiturl')->withErrors('Site already exists!');
    }

編集2:1 つの方法は、指定された URL を取得することです http://www.example.com, 、データベースを検索して、 http://www.example.com, www.example.com, http://example.com そして example.com. 。ただし、これを行うためのより効率的な方法を見つけようとしています。

役に立ちましたか?

解決

ソリューションを実装する前に、ポリシーをより徹底的に抽象的に具体化する必要があると思います。URL には、同等である場合とそうでない部分が多数あります。プロトコルを同等のものとして扱いますか? https://foo.comhttp://foo.com. 。サブドメインの中にはエイリアスである場合もあれば、そうでない場合もあります。 http://www.foo.comhttp://foo.com, 、 または http://site1.foo.comhttp://foo.com. 。URLのパスはどうなるのでしょうか? http://foo.comhttp://foo.com/index.php. 。ポリシーを完全に検討するまでは、比較関数を作成して時間を無駄にしたくありません。幸運を!

アップデート:

おそらく次のようなものです:

$ignore_subdomains = array('www','web','site');
$domain_parts = explode('.',$siteurl); 
$subdomain = strtolower(array_shift($domain_parts));
$siteurl = (in_array($subdomain,$ignore_subdomains)) ? implode('.',$domain_parts) : $siteurl;
//now run your DB comparison query

他のヒント

PHPを使用してデータベースにデータを送信する前に確認できます。以下に小さな例を示します。もちろん、好みに応じてさらに高度なものにすることもできます。

<?php
   $test = "http://www.google.com";
   $testa = "http://google.com";
   if (str_replace("www.","",str_replace("http://","",$testa)) == str_replace("www.","",str_replace("http://","",$test))) {
     echo "same";
   }
   else {
     echo "different";
   }
?>

以下は MySQL の置換例です。この例では、「url」はデータベースフィールドです。

SELECT * FROM `urls` WHERE REPLACE(url, "http://www","") = "google.com" OR REPLACE(url,"http://","") = "google.com"

繰り返しになりますが、これは理解を助けるための非常に基本的なものです。

さらにサポートが必要な場合は、お知らせください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top