PHP/MYSQL تخزين المستخدمين بين الصفحات حتى يتمكن المستخدم من العودة إليها

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

سؤال

أنا أكتب تطبيق php-mysql. يتيح التطبيق للمستخدم تشغيل بحث مقابل قاعدة البيانات. عند تشغيل البحث ، إذا نقر المستخدم على زر العودة للعودة إليه بعد فحص عنصر تم طرحه ، فسيُسأل عما إذا كانوا يرغبون في إعادة تقديم الاستعلام (يستخدم Post). التي من شأنها إعادة تشغيل البحث في قاعدة البيانات. لن يؤدي استخدام GET إلى طلب إعادة النشر - لكنه لا يزال يدير البحث مرة أخرى.

هل هناك طريقة لتخزين البحث وتذكره ، مع إعادة تشغيله في قاعدة البيانات؟

هذا يمكن أن يحفظه في قاعدة البيانات ، أو بطريقة ما في PHP - ربما مع الجلسات؟ يمكن أن يكون هناك الكثير من البيانات التي تخرج من عمليات البحث هذه ، أشعر أنها ربما تكون أكثر من اللازم للجلسات.

الطريقة الأخرى التي يمكنني تخيلها هي تخزينها في قاعدة البيانات ، في جدول مؤقت من نوع ما. إنشاء الجدول مع الأعمدة التي أعتزم الاستعلام عنها ، ثم الاختيار في إدراج. ثم اختيار * من الجدول. هذا يبدو أيضا مثل فكرة سيئة. الكثير من الجداول المؤقتة التي تم إنشاؤها ديناميكيا تطفو حولها.

أعلم أن هذا يمكن القيام به. عمليات البحث المحفوظة هي الأشياء التي تراها في العديد من تطبيقات الويب. فكيف يتم ذلك بشكل عام؟

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

المحلول

memcached

أو

APC

ومع ذلك ، لاحظت أنك لا تعطي أي سبب لماذا تريد تخزين نتائج البحث. "لأنه أسرع ، وقرأت أنه يجعل تطبيقي أكثر قابلية للتطوير" ، هو السبب المعتاد لذلك. هذه الروائح مثل التحسين المبكر.

أنصحك ببناء التطبيق الخاص بك وملف تعريفه. ما مدى تكلفة هذه "عمليات البحث"؟ لماذا هل هم مكلفون؟ هل هو تصميم مخطط ضعيف؟ هل هو فهرسة سيئة؟ هل هو اختيار ضعيف لمحرك التخزين؟

أنت تدرك أن MySQL لديه ذاكرة التخزين المؤقت الاستعلام, ، حق؟ في كثير من الحالات ، قد يكون هذا كل ما تحتاجه. حاول تشغيل أحد استفسارات "البحث" باهظة الثمن باستخدام عميل MySQL وقم بإلغاء تشغيل الوقت ، ثم قم بتشغيله مرة أخرى. يرى؟

نصائح أخرى

لإصلاح الخطأ "هل تريد إعادة تقديم" ، يمكنك تخزين الطلب في الجلسة أو في DB ، ثم إعادة توجيه على الفور إلى صفحة جديدة لتنفيذ البحث بالفعل:

search.php?searchId=22

if (isset($_GET['searchId'])) {
  $search = $_SESSION['search'][$_GET['searchId'];
  // do search
} elseif (isset($_POST['search'])) {
  $_SESSION['search'][] = $_POST;
  header('Location: search.php?searchId=' . (count($_SESSION['search']) - 1);
}

يمكن ذلك بعد ذلك الاستيلاء على حقول الاستعلام من $ _session ['Search'] [22] أو db ...

بالنسبة لتوفير النتائج ، يمكنك الاعتماد على ذاكرة التخزين المؤقت للمتصفح ، أو يمكنك تخزين SERPs الفردية في الجلسة أو DB ... تنتهي صلاحيتها في وقت ما إذا لزم الأمر ...

إن إنشاء جدول نتائج أمر جيد (وسيسرع ترقيم الصفحات في عمليات البحث المعقدة) ، ولكن من المحتمل أن يكون لديك ملايين الزيارات هناك ، وبالتالي فإن ترقيم التخزين مؤقت مع التخزين المؤقت سيكون أكثر عمومية.

إذا أراد المستخدم العودة إلى أيام البحث بعد أيام أو أسابيع ، فيمكنك إعادة تشغيل البحث باستخدام حقول الاستعلام المحفوظة.

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