Disponibilité de l'URL à partir de la base de données MySQL à l'aide de Php [duplicata]

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

  •  20-12-2019
  •  | 
  •  

Question

J'essaie de créer un système d'enregistrement qui permet aux utilisateurs de soumettre les URL de leurs sites Web.Désormais, lorsqu'un utilisateur saisit une URL, il vérifie dans la base de données si elle existe déjà et la rejette si c'est le cas.

Cependant, mon problème vient de ceci :

Si http://www.example.com est dans la base de données et j'entre http://example.com, cela compte comme une URL différente en ce qui concerne le contrôle et permet la soumission.

Existe-t-il un moyen approprié de gérer cela, outre la récupération de tous les enregistrements, la suppression des www s'il est présent, puis comparer ?(Ce qui est une manière terriblement inefficace de le faire !)

Note :Ajout d'une balise Laravel au cas où elle aurait des fonctions d'assistance pour cela (j'utilise une installation de Laravel-4).

MODIFIER :Voici ma logique actuelle pour le contrôle :

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

MODIFIER 2 :Une solution consiste à prendre l'URL donnée http://www.example.com, puis recherchez dans la base de données http://www.example.com, www.example.com, http://example.com et example.com.Cependant, j'essaie de trouver un moyen plus efficace de procéder !

Était-ce utile?

La solution

Je pense qu'avant de mettre en œuvre une solution, vous devriez étoffer votre politique de manière abstraite et plus approfondie.Il existe de nombreuses parties d’une URL qui peuvent ou non être équivalentes.Voulez-vous traiter les protocoles comme équivalents ? https://foo.com contre http://foo.com.Certains sous-domaines peuvent être des alias, d'autres non. http://www.foo.com contre http://foo.com, ou http://site1.foo.com contre http://foo.com.Qu'en est-il du chemin de l'URL ? http://foo.com contre http://foo.com/index.php.Je ne perdrais pas votre temps à rédiger une fonction de comparaison tant que vous n'aurez pas complètement réfléchi à votre politique.Bonne chance!

MISE À JOUR:

Quelque chose comme ça peut-être :

$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

Autres conseils

Vous pouvez vérifier avant d'envoyer des données à la base de données en utilisant PHP.Voici un petit exemple.Évidemment, vous pouvez le rendre plus avancé selon vos préférences.

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

Voici un exemple de remplacement MySQL.Dans cet exemple, « url » est le champ de la base de données.

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

Encore une fois, c'est très basique juste pour votre meilleure compréhension.

Si vous avez besoin d'aide supplémentaire, veuillez me le faire savoir

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top