كيف يمكن PHP تحديد ما إذا ضغط المستخدم على مفتاح الإدخال أو زر إرسال؟

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

  •  18-09-2019
  •  | 
  •  

سؤال

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

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

هل هناك طريقة ل PHP لتحديد ما إذا كان قد تم النقر فوق الإدخال أم لا، أو كان مجرد المدخلات التي تم تحديدها عند الضغط على المستخدم يدخل مفتاح؟

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

المحلول

يمكنك تحديد أي زر تم استخدامه شريطة أن تقوم بنية HTML بشكل صحيح

<input type="submit" name="action" value="Edit">
<input type="submit" name="action" value="Preview">
<input type="submit" name="action" value="Post">

ال $_POST صفيف (أو $_GET/$_REQUEST) سيحتوي على مفتاح "العمل" مع قيمة الزر السمن (سواء تم النقر أو لا).

الآن، "النقر" هو سلوك من جانب العميل بشكل صريح - إذا كنت ترغب في التمييز بين النقرة والكائنات الأساسية، فستحتاج إلى إضافة بعض البرمجة النصية إلى النموذج الخاص بك للمساعدة في هذا التصميم.

يحرر

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

<?php

if ( 'POST' == $_SERVER['REQUEST_METHOD'] )
{
    echo '<pre>';
    print_r( $_POST );
    echo '</pre>';
}

?>
<form method="post">

    <input type="text" name="test" value="Hello World">

    <input type="submit" name="action" value="None" style="display: none">
    <input type="submit" name="action" value="Edit">
    <input type="submit" name="action" value="Preview">
    <input type="submit" name="action" value="Post">

</form>

نصائح أخرى

روبرتو،

PHP هي تقنية جانب الخادم، وبالتالي يتم تشغيلها على الخادم - لذلك لا توجد طريقة لذلك لتحديد المفاتيح التي يتم الضغط عليها في العميل (AKA المستخدم). هذا هو، بالطبع، ما لم يكن لديك رمز على وجه التحديد أن يقوم جانب العميل بتضمين هذه المعلومات مع طلبات الخادم (بيانات نموذج النشر هو شكل طلب أيضا).

طريقة واحدة لإنجاز ذلك باستخدام JavaScript في رمز العميل الخاص بك.

راجع هذه الصفحة كنقطة انطلاق فيما يتعلق بتقديم الأحداث باستخدام JavaScript.http://www.w3schools.com/jsref/jsref_onsubmit.asp.asp.

قد تضطر أيضا إلى إضافة مستمع للأحداث الصحفية الرئيسية على صفحتك من أجل التقاط المستخدم دون الضغط على المفتاح ENTER الخاص بك ثم تسجيل هذه المعلومات.http://www.howtocreate.co.uk/ututorials/javascript/domevents. تقدم مناقشة حول موضوع إضافة / إزالة مستمعي الأحداث في جافا سكريبت ولكن عليك أن تكون حذرا للغاية عند استخدام الأحداث لأنها غير صحيحة يمكن أن تكون مصدر تسرب الذاكرة التي يصعب تصحيحها وتسبب في تصحيح المستخدمين غير العسكريين :)

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

الآن، يمكن أن تخبر PHP أي تم تشغيل إدخال المدخلات، حيث ستظهر في بيانات النموذج بينما لن يفعل الآخرون. جعل معظم المتصفحات أول إرسال إدخال الافتراضي (الذي يتم تشغيله على يدخل ضغط المفتاح). يمكنك إعادة طلب كل ما تبذلونه من تقديمك من أجل التحكم في إرسال إرسال.

لا يمكن أن يعرف PHP حقا ما حدث على جانب العميل.

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

سوف يذهب الرمز من هذا القبيل (لم أتحقق من بناء الجملة)

<input type="text" onfocus="setCurrent(this)" id="1" />
<input type="hidden" id="hid" />

function setCurrent(o){
  $('hid').value = o.id;
}

أعتقد أن اللعب مع الأحداث يصطاد الحقول والخفية يجب أن يمنحك النتيجة التي تريدها.

امل ان يساعد

إنها طريقة كتابة العلامات على جانب العميل.

على سبيل المثال، هنا طريقة واحدة (غير XHTML) يمكنك القيام بذلك:

في ملف HTML:

<form method="post" action="myform.php" id="myform">
  ... form items here ...

<input type="submit" name="enter_key" value="true" style="display:none">
<input type="hidden" name="pressed_button" id="pressed_button" value="false">
<input type="button" value="Submit"
  onclick="document.getElementById('pressed_button').value='true';document.getElementById('myform').submit();">
</form>

في myform.php:

if ($_POST['pressed_button']=='false') {
   // Logic for enter key
} else {
   // Logic for button press
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top