Frage

Ich versuche, ein Registrierungssystem zu erstellen, mit dem Benutzer ihre Website-URLs übermitteln können.Wenn ein Benutzer jetzt eine URL eingibt, prüft er anhand der Datenbank, ob sie bereits vorhanden ist, und lehnt sie gegebenenfalls ab.

Mein Problem liegt jedoch daran :

Wenn http://www.example.com ist in der Datenbank und ich gebe ein http://example.com, dies zählt als eine andere URL, was die Prüfung betrifft, und es erlaubt die Übermittlung.

Gibt es eine geeignete Möglichkeit, dies zu handhaben, abgesehen vom Abrufen aller Datensätze, dem Entfernen der www wenn vorhanden, und dann vergleichen?(Was ein schrecklich ineffizienter Weg ist, dies zu tun!)

Beachten :Hinzufügen eines Laravel-Tags für den Fall, dass es dafür Hilfsfunktionen gibt (ich verwende eine Laravel-4-Installation).

BEARBEITEN :Dies ist meine aktuelle Logik für die Überprüfung :

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

BEARBEITEN 2 :Eine Möglichkeit besteht darin, die angegebene URL zu verwenden http://www.example.com, und durchsuchen Sie dann die Datenbank nach http://www.example.com, www.example.com, http://example.com und example.com.Ich versuche jedoch, einen effizienteren Weg zu finden, dies zu tun!

War es hilfreich?

Lösung

Ich denke, bevor Sie eine Lösung implementieren, sollten Sie Ihre Richtlinie abstrakter ausarbeiten.Es gibt viele Teile einer URL, die gleichwertig sein können oder nicht.Möchten Sie Protokolle als gleichwertig behandeln? https://foo.com vs http://foo.com.Einige Subdomains können Aliase sein, andere nicht. http://www.foo.com vs http://foo.com, oder http://site1.foo.com vs http://foo.com.Was ist mit dem Pfad der URL? http://foo.com vs http://foo.com/index.php.Ich würde Ihre Zeit nicht damit verschwenden, eine Vergleichsfunktion zu schreiben, bis Sie Ihre Richtlinie vollständig durchdacht haben.Toi toi toi!

UPDATE:

So etwas vielleicht:

$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

Andere Tipps

Sie können dies überprüfen, bevor Sie Daten mit PHP an die Datenbank senden.Es folgt ein kleines Beispiel.Natürlich können Sie es nach Ihren Wünschen weiterentwickeln.

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

Es folgt ein MySQL-Ersetzungsbeispiel.In diesem Beispiel ist 'URL' ein Datenbankfeld.

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

Auch dies ist sehr einfach, nur zu Ihrem besseren Verständnis.

Falls Sie weitere Hilfe benötigen, lassen Sie es mich bitte wissen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top