MySQL & PHP - قوائم تحديد/خيار وعرض البيانات للمستخدمين الذين لا يزالون يسمحون لي بإنشاء استعلامات

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

  •  23-09-2019
  •  | 
  •  

سؤال

آسف على العنوان غير الواضح ، فإن مثالًا سيؤدي إلى توضيح الأشياء:

TABLE: Scenario_victories

ID  scenid        timestamp      userid side    playdate
1   RtBr001   2010-03-15 17:13:36   7     1     2010-03-10
2   RtBr001   2010-03-15 17:13:36   7     1     2010-03-10
3   RtBr001   2010-03-15 17:13:51   7     2     2010-03-10

ID و timestamp هي الإفراط التلقائي في قاعدة البيانات عند إضافة الحقول الأربعة الأخرى.

أول شيء يجب ملاحظته هو أنه يمكن للمستخدم تسجيل ألعاب متعددة من نفس السيناريو (المنظر) في نفس التاريخ (playdate) ربما بالنتيجة نفسها (الجانب = الفائز). وبالتالي الحاجة إلى الهوية الفريدة والجدول الزمني لقياس جيد.

الآن ، على صفحة المستخدم الخاصة بهم ، أعرض تاريخ اللعب المسجل في أ <select><option>... نموذج قائمة مع 2 أزرار في النهاية - Delete Record و Go to Scenario

السيناريو يأخذ scenid وبعد ضرب بعض الجداول الأخرى ، تعود مع شيء أكثر سهولة في الاستخدام:

  (playdate)   (from scenid)        (from side)
#########################################################
# 2010-03-10  Road to Berlin #1 -- Germany, Hungary won #
# 2010-03-10  Road to Berlin #1 -- Germany, Hungary won #
# 2010-03-10  Road to Berlin #1 -- Soviet Union won     #
#########################################################
     [Delete Record]              [Go To Scenario]

في HTML:

<select name="history" size=3>
  <option>2010-03-10  Road to Berlin #1 -- Germany, Hungary won</option>
  <option>2010-03-10  Road to Berlin #1 -- Germany, Hungary won</option>
  <option>2010-03-10  Road to Berlin #1 -- Soviet Union won</option>
</select>

الآن ، إذا كنت تريد تسليط الضوء على السجل الأول وانقر فوق Go to Scenario هناك معلومات كافية لي لتحليلها وإنتاج السيناريو الدقيق الذي تريد رؤيته. ومع ذلك ، إذا كنت ستختار Delete Record ليس هناك - لدي playdate ويمكنني تحليل scenid و side من ما هو مدرج ، ولكن في هذا المثال ، سيكون لدى جميع السجلات الثلاثة نفس النتيجة.

يبدو أنني رسمت نفسي في زاوية. هل لدى أي شخص اقتراح حول كيفية الحصول على بعض بيانات التعريف الفريدة (ID و/أو timestamp) لركوب على هذا النموذج دون إظهاره للمستخدم؟

PHP-only من فضلك ، يجب أن أكون متوافقة مع noscript!

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

المحلول

يمكنك تعيين أ value قم بموافقة على خياراتك ، وجعلها تحتوي على ID (وهو فريد) من بياناتك:

<select name="history" size=3>
  <option value="1">2010-03-10  Road to Berlin #1 -- Germany, Hungary won</option>
  <option value="2">2010-03-10  Road to Berlin #1 -- Germany, Hungary won</option>
  <option value="3">2010-03-10  Road to Berlin #1 -- Soviet Union won</option>
</select>

ثم ، عند تلقي البيانات التي تم نشرها ، $_POST['history'] سوف تحتوي على ID هذا يتوافق مع الإدخال الذي اختاره المستخدم.

و ، هذا ID فريد من نوعه ، يمكنك استخدامه لتحديد بياناتك دون أدنى شك.


محتوى value يتم تمرير السمة ، عند تعيينها ، إلى الخادم عند إرسال النموذج - لا يتم عرضه على المستخدم.

عندما لا value تم تعيينه لخيار ما ، سيقوم المتصفح بتمرير محتوى هذا الخيار للخادم ، عند تقديم النموذج - وهو ما كنت تحصل عليه.

بصفتك جانبًا جانبيًا: كما هو الحال مع كل ما قدمه المستخدم ، يجب عليك التحقق من أن القيمة المستلمة $_POST['history'] صحيح وآمن وكل ذلك - يجب أن يكون عددًا صحيحًا ، يجب أن يكون واحدًا يمكن للمستخدم الوصول إليه ، ...

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