URL de disponibilidad de Base de datos MySQL usando Php [duplicar]
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!
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