16

اريد الاعتماد على hash بدلآ من id فى قاعدة بيانات mysql شرط عدم التكرار

  • true

السلام عليكم ورحمة الله وبركاتة

اريد ان اعتمد فى جدول المواضيع فى قاعدة البيانات لاحد الاسكربتات لدى على hash بدلآ من Id لعمل صعوبة لسحب المواضيع

مثال: الان الرابط كذلك

http://domain.com/news?id=6...

اريدوا ان يصبح كذلك

http://domain.com/news?id=s...

جربت الاعتماد على md5 لاكن وجدى مشكلة وهى ان دالة Md5 تخرج احيانآ hash متشابهه

فهل يوجد فى قواعد mysql خاصية تسمح بتوليد hash غير مكرر دون الأعتماد على لغة البرمجة

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

14

اذا فهمت سؤالك فأنت تبحث عن الـ UUID

MySQL

PHP

Python

الهدف هو عدم الأعتماد على البرمجة بسبب الضغط الكبير على الموقع مقصدى هو ان تتم العملية من خلال أستعلام واحد أثناء عمل Insert

عليك عمل ثلاث دوال , الأولى تسمى hash_maker و الثانية تسمى hash_checker و الثالثة تسمى hash_generator

عندما تريد أن تقوم بتوليد hash تقوم بطلب دالة hash_generator

دالة hash_generator تقوم بـ :

  • إستدعاء لدالة hash_checker

دالة hash_checker تقوم بـ :

  • إستدعاء دالة hash_maker و يرجع لها هاش عشوائى

  • إستعلام mysql_query بهذا الهاش و الناتج فى متغير $query

  • while loop تحتوى على num_rows للمتغير $query

  • بداخل ال while loop تضع :

  • دالة hash_maker

  • إستعلام mysql_query بالهاش الجديد و الناتج فى نفس متغير $query

خارج ال while loop

return hash

مرحبا اخى عبد سعيد برؤية مشاركتك فى انا اتابع مواضيع لك من سنين ايام سوالف ما كان موقع,

بالنسبة لحلك هو افضل حل فكرت فية قبل ذلك لاكن لم اجربوا لانى كنت على امل ان توفر mysql هذة الخطوات من خلال خطوة واحدة فى Insert لاكن الظهار هو دة انسب حل

استخدم hash مع id في الروابط، بحيث يصبح العنوان:

domain.com/news/id/hash

بحيث يكون ال hash هو ناتج md5 للمعرف id مع كلمة سرية واحدة لكامل لموقع secret

hash = md5(id+secret)

بهذه الطريقة لايمكن للمستخدم معرفة عنوان الرابط الا اذا عرف كلمة السر.

لكن من جهة الخادم يمكنك معرفة اذا كان الرابط صحيح بانتاج hash جديد من المعرف id والتأكد من مطابقته للمعطى من المستخدم.

هذا حل افكر فية أيضآ

ما هو الهدف؟ بالتأكيد الرقم أفضل وأسهل وأسرع. إن كان الهدف هو تجنب سحب المحتوى من خلال تسلسل الأرقام من موقع منافس عندها فلتقم بخربشة الأقام من طرفك في التطبيق ويظل يحفظ في قاعدية البيانات باستخدام رقم.

مثلا يكون لديك في التطبيق slug_to_id و id_to_slug

هذا امر غير جيد بلنسبة لمحركات البحث ...

اذا كان هذا الرابط مافيش مشاكل بية مع جوجل

/topic?id=1445556

فا أعتقد ان هذا لا يختلف عنوا

/topic/ddf52fr5f65rf26r65f626f2r

نعم, لكن من معايير ال SEO اختيار رابط يعبر عن الموضوع,

مثلا

www.example.com/اسم-خبر-معين

ان اقصد اذا كان الرابط هكذا

topic/585555csd2s2

او هكذا

topic?id=112255

مش بتفرق ابدآ لاكن بالتايكد لو عنون الرابط له دلاله على الموضوع فهذا افضل

topic/link+web+site

لاكنى لا استخدم تلك الطريقة لعدة اسباب ان العنوان قد يحصل علية تعديل فى بعض الاحيان اذا هنا الرابط بالكامل اصبح ليس له وجود لدى محركات البحث

الا يمكن ان يكون للمقال مثلا 2 عنوان القديم يحيلك للجديد ؟

اعمل هاش لأسم الموضوع و الوقت دلوقت بالثانية وجزء من الثانية مثلاً

php code:

$topicName ="اريد الاعتماد على hash بدلآ من id فى قاعدة بيانات mysql شرط عدم التكرار";

$post_id = md5($topicName . date('ymdhis'));

لو اخدت 32 رمز مش ممكن تتكرر طبعاً

وممكن تاخد جزء من ال 32 لكن وارد انها تصادف وتتكرر

ومن الممكن تتأكد إذا كان الهاش موجود قبل كدة ولا لا بناء علية تحفظ

md5 تخرج هاش مكرر ولابد التشيك علي قاعدة البيانات لتاكد من عدم وجود hash ومن ثم ادخالوا او توليد hash جديد

لا يهم حتى لو تكرر الهاش لان العنوان سيحتوي المعرف id على اي حال، الهاش الهدف منه منع سحب المواضيع، وليس الربط بقاعدة البيانات، الهاش حتى لا يخزن في قاعدة البيانات اطلاقا.

عفوا رديت في المكان الخطأ ... تجاهل التعليق

-2

أها اخي فهمتك تفضل :

الحصول على احرف وارقام عشوائيه لن تتكرر ابدأ :

إذا تكرر راجعني أخي ..

-2

دالة Md5 تعمل Hash مكرر بالرغم أن القيمة المدخلة تكون مختلفة

لو جربت تنشىء مليون hash فى قاعدة البيانات بقيم مختلفة ستجد ان هناك تشابهه فى hash