Доступность URL-адреса из базы данных MySQL с использованием Php

StackOverflow https://stackoverflow.com//questions/24007683

  •  20-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать систему регистрации, которая позволит пользователям отправлять 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:Один из способов — взять данный URL-адрес http://www.example.com, а затем выполните поиск в базе данных http://www.example.com, www.example.com, http://example.com и example.com.Однако я пытаюсь найти более эффективный способ сделать это!

Это было полезно?

Решение

Я думаю, что прежде чем реализовывать решение, вам следует более тщательно абстрактно конкретизировать свою политику.Существует множество частей URL-адреса, которые могут быть эквивалентными, а могут и не быть эквивалентными.Хотите ли вы рассматривать протоколы как эквивалентные? https://foo.com против http://foo.com.Некоторые поддомены могут быть псевдонимами, некоторые — нет. http://www.foo.com против http://foo.com, или http://site1.foo.com против http://foo.com.А как насчет пути URL? http://foo.com против http://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