توفر رابط من قاعدة بيانات الخلية باستخدام بي إتش بي [مكررة]

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

  •  20-12-2019
  •  | 
  •  

سؤال

أحاول إنشاء نظام تسجيل يسمح للمستخدمين بإرسال عناوين مواقع الويب الخاصة بهم.الآن عندما يقوم المستخدم بإدخال عنوان ورل ، فإنه يتحقق ضد قاعدة البيانات لمعرفة ما إذا كان موجودا بالفعل ، ويرفض ذلك إذا كان كذلك.

ومع ذلك ، مشكلتي هي بسبب هذا :

إذا http://www.example.com هو في قاعدة البيانات وأنا أدخل http://example.com, ، وهذا يعتبر عنوان ورل مختلفة بقدر ما يتعلق الأمر الاختيار ، وأنه يسمح للتقديم.

هل هناك طريقة مناسبة للتعامل مع هذا ، بصرف النظر عن استرداد جميع السجلات ، وإزالة www إذا كان موجودا, ثم مقارنة?(وهي طريقة غير فعالة بشكل رهيب للقيام بذلك!)

ملاحظة :إضافة علامة لارافيل في حال كان لديه أي وظائف المساعد لهذا (أنا باستخدام تثبيت لارافيل - 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 :طريقة واحدة هي أن تأخذ عنوان ورل معين http://www.example.com, ، ثم ابحث في قاعدة البيانات عن http://www.example.com, www.example.com, http://example.com و example.com.ومع ذلك أحاول العثور على طريقة أكثر كفاءة للقيام بذلك!

هل كانت مفيدة؟

المحلول

أعتقد أنه قبل تنفيذ حل يجب عليك تجسيد سياستك بشكل أكثر شمولا.هناك العديد من أجزاء ورل التي قد تكون أو لا تكون مكافئة.هل تريد التعامل مع البروتوكولات على أنها مكافئة? https://foo.com مقابل http://foo.com.قد تكون بعض النطاقات الفرعية أسماء مستعارة ، والبعض الآخر قد لا يكون كذلك. http://www.foo.com مقابل http://foo.com, ، أو http://site1.foo.com مقابل http://foo.com.ماذا عن مسار ورل? 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
   $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";
   }
?>

وفيما يلي الخلية استبدال سبيل المثال.في هذا المثال ' ورل ' هو حقل قاعدة البيانات.

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

مرة أخرى هذا هو أساسي جدا فقط لفهم أفضل الخاص بك.

في حال كنت بحاجة إلى أي مساعدة أخرى يرجى اسمحوا لي أن أعرف

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top