Pregunta

Estoy tratando de crear un sistema de registro que permite a los usuarios enviar sus direcciones Url de sitios web.Ahora cuando un usuario accede a una URL, se comprueba con la base de datos para ver si ya existe, y la rechaza si lo hace.

Sin embargo, mi problema es debido a esto :

Si http://www.example.com está en la base de datos y puedo entrar http://example.com, esto cuenta como un URL diferente, tan lejos como la comprobación de que se trate, y que permite el envío.

Hay una forma correcta de manejar esto, aparte de la recuperación de todos los registros, la eliminación de la www si está presente, y luego comparar?(Lo cual es terriblemente ineficiente para hacerlo!)

Nota :La adición de Laravel etiqueta en caso de que tenga cualquier funciones auxiliares para esto (yo estoy usando un laravel-4 instalación).

EDITAR :Este es mi actual lógica de la verificación :

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

EDIT 2 :Una forma es tomar la URL dada http://www.example.com, y , a continuación, buscar en la base de datos para http://www.example.com, www.example.com, http://example.com y example.com.Sin embargo estoy tratando de encontrar una manera más eficiente de hacer esto!

¿Fue útil?

Solución

Creo que antes de implementar una solución que debe de manera abstracta la carne a cabo su política más a fondo.Hay muchas partes de una URL que pueden o no ser equivalentes.¿Quieres tratar de protocolos como equivalente? https://foo.com vs http://foo.com.Algunos subdominios podría ser alias, algunos puede que no. http://www.foo.com vs http://foo.com, o http://site1.foo.com vs http://foo.com.¿Qué acerca de la ruta de acceso de la dirección URL? http://foo.com vs http://foo.com/index.php.Yo no malgastaría su tiempo a escribir una función de comparación hasta que he pensado a través de su política.Buena suerte!

ACTUALIZACIÓN:

Algo como esto tal vez:

$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

Otros consejos

Usted puede comprobar antes de enviar los datos a la base de datos mediante PHP.Siguiente es un pequeño ejemplo.Obviamente, usted puede hacer que sea más avanzadas como por su gusto.

<?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";
   }
?>

Siguiente es MySQL Reemplazar ejemplo.En este ejemplo, 'url' es campo de base de datos.

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

Una vez más, esto es muy básico, sólo para su mejor comprensión.

En caso de que necesite cualquier otra asistencia amablemente me dejan saber

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top