سؤال

لدي اثنين تقدم أزرار في شكل.كيف يمكنني تحديد واحد الذي ضرب serverside?

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

المحلول

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

<input type="submit" name="button_1" value="Click me">

نصائح أخرى

ويمكنك إعطاء كل إدخال قيمة مختلفة والحفاظ على نفس الاسم:

<input type="submit" name="action" value="Update" />
<input type="submit" name="action" value="Delete" />

وبعد ذلك في الاختيار متاحة لرؤية التي نجمت:

if ($_POST['action'] == 'Update') {
    //action for update here
} else if ($_POST['action'] == 'Delete') {
    //action for delete
} else {
    //invalid action!
}

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

<input type="submit" name="update_button" value="Update" />
<input type="submit" name="delete_button" value="Delete" />

وفي التعليمات البرمجية:

if (isset($_POST['update_button'])) {
    //update action
} else if (isset($_POST['delete_button'])) {
    //delete action
} else {
    //no button pressed
}

وهناك حل أفضل يتكون من استخدام علامات زر لإرسال النموذج:

<form>
    ...
    <button type="submit" name="action" value="update">Update</button>
    <button type="submit" name="action" value="delete">Delete</button>
</form>

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

هناك HTML5 الجديدة لهذا النهج ، formaction السمة:

<button type="submit" formaction="/action_one">First action</button>
<button type="submit" formaction="/action_two">Second action</button>

يبدو أن هذا لا يعمل في IE9 في وقت سابق, ولكن المتصفحات الأخرى يجب أن يكون على ما يرام (انظر: w3schools.com HTML <button> formaction السمة).

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

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

تحرير: كما أشار Pascal_dher في التعليقات ، هذه السمة هو متاح أيضا على <input> الوسم كذلك.

وهذا من السهل اختبار للغاية

<form action="" method="get">

<input type="submit" name="sb" value="One">
<input type="submit" name="sb" value="Two">
<input type="submit" name="sb" value="Three">

</form>

وضعت للتو أن في صفحة HTML، انقر فوق أزرار، وإلقاء نظرة على URL

<form>
    <input type="submit" value="Submit to a" formaction="/submit/a">
    <input type="submit" value="submit to b" formaction="/submit/b">    
</form>

وربما الحلول المقترحة عملت هنا في عام 2009، ولكن إيف اختبار جميع هذه الإجابات upvoted ولا أحد يعمل في أي متصفح.

وسوى حل وجدت العامل هو هذا: (ولكن لها قليلا القبيح لاستخدام ما أظن)

<form method="post" name="form">
<input type="submit" value="dosomething" onclick="javascript: form.action='actionurl1';"/>
<input type="submit" value="dosomethingelse" onclick="javascript: form.action='actionurl2';"/>

استخدم السمة formaction HTML (خط 5TH):

<form action="/action_page.php" method="get">
    First name: <input type="text" name="fname"><br>
    Last name: <input type="text" name="lname"><br>
    <button type="submit">Submit</button><br>
    <button type="submit" formaction="/action_page2.php">Submit to another page</button>
</form>

وأفضل طريقة للتعامل مع متعددة زر الإرسال يستخدم حالة التبديل في البرنامج النصي الملقم

<form action="demo_form.php" method="get">

Choose your favorite subject:

<button name="subject" type="submit" value="html">HTML</button>
<button name="subject" type="submit" value="css">CSS</button>
<button name="subject" type="submit" value="javascript">Java Script</button>
<button name="subject" type="submit" value="jquery">jQuery</button>

</form>

والخادم النصي كود / الخادم - أين أنت تقديم النموذج:

وdemo_form.php

<?php

switch($_REQUEST['subject']) {

    case 'html': //action for html here
                break;

    case 'css': //action for css here
                break;

    case 'javascript': //action for javascript here
                        break;

    case 'jquery': //action for jquery here
                    break;
}

?>

المصدر: W3Schools.com

ومنذ كنت لم يحدد ما من جانب الخادم طريقة البرمجة التي تستخدمها، سأعطيك مثالا انه يعمل لبيثون، وذلك باستخدام CherryPy (على الرغم من أنه قد يكون من المفيد للسياقات أخرى، أيضا):

<button type="submit" name="register">Create a new account</button>
<button type="submit" name="login">Log into your account</button>

وبدلا من استخدام القيمة لتحديد الزر الذي تم الضغط، يمكنك استخدام الاسم (مع علامة <button> بدلا من <input>). وبهذه الطريقة، إذا الأزرار الخاصة بك يحدث أن يكون النص نفسه، فإنه لن يسبب مشاكل. يتم إرسال أسماء جميع البنود شكل من الأشكال، بما في ذلك أزرار، كجزء من URL. في CherryPy، كل من هذه حجة لطريقة أن يفعل رمز من جانب الخادم. لذا، إذا الأسلوب الخاص بك فقط و**kwargs لقائمة به المعلمة (بدلا من كتابة مضجر من كل اسم واحد من كل بند من بنود النموذج) ثم يمكنك التحقق لمعرفة الزر الذي تم الضغط مثل هذا:

if "register" in kwargs:
    pass #Do the register code
elif "login" in kwargs:
    pass #Do the login code

وتحديد name كما array.

<form action='' method=POST>
    (...) some input fields (...)
    <input type=submit name=submit[save] value=Save>
    <input type=submit name=submit[delete] value=Delete>
</form>

ورمز الملقم مثال (PHP):

if (isset($_POST["submit"])) {
    $sub = $_POST["submit"];

    if (isset($sub["save"])) {
        // save something;
    } elseif (isset($sub["delete"])) {
        // delete something
    }
}

وelseif مهم جدا، لأنه سيتم تحليل كلا إن لم يكن. التمتع بها.

<form method="post">
<input type="hidden" name="id" value="'.$id.'" readonly="readonly"/>'; //any value to post PHP
<input type='submit' name='update' value='update' formAction='updateCars.php'/>
<input type='submit' name='delete' value='delete' formAction='sqlDelete.php'/>
</form>

وأعتقد أن عليك أن تكون قادرا على قراءة اسم / قيمة في مجموعة GET الخاص بك. أعتقد أن الزر الذي لم النقر لن تظهر في تلك القائمة.

وبسيط يمكنك تغيير شكل عمل على تقديم مختلف أزرار فوق.

وجرب هذا في document.Ready

$(".acceptOffer").click(function () {
       $("form").attr("action", "/Managers/SubdomainTransactions");
});

$(".declineOffer").click(function () {
       $("form").attr("action", "/Sales/SubdomainTransactions");
});

يمكنك أيضا أن تفعل ذلك من هذا القبيل (أعتقد انها مريحة جدا إذا كان لديك N المدخلات).

<input type="submit" name="row[1]" value="something">
<input type="submit" name="row[2]" value="something">
<input type="submit" name="row[3]" value="something">

ثم في جانب الملقم (PHP في بلدي على سبيل المثال) يمكنك قراءة "الصف" كما صفيف للحصول على مؤشر:

$index = key($_POST['row']);

$_POST['الصف'] سوف تكون مجموعة مع عنصر واحد فقط في شكل المؤشر => القيمة (على سبيل المثال:'2' => 'شيء").

http://php.net/manual/en/function.key.php

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

href="/SubmitForm?action=delete"
href="/SubmitForm?action=save"

إذا كان لديك اثنين زر الإرسال مع وظيفة مختلفة ثم صراحة أقول في أزرار الإدخال مع تقديم نوع مثل:

<input type="submit" click="save()" name="saveBtn" value="save">
<input type="submit" click="update()" name="updateBtn" value="update">

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

ويمكنك عرض أزرار مثل هذا:

<input type="submit" name="typeBtn" value="BUY">
<input type="submit" name="typeBtn" value="SELL">

وبعد ذلك في قانون يمكنك الحصول على القيمة باستخدام:

if request.method == 'POST':
    #valUnits = request.POST.get('unitsInput','')
    #valPrice = request.POST.get('priceInput','')
    valType = request.POST.get('typeBtn','')

و(valUnits وvalPrice بعض القيم الأخرى I استخراج من النموذج الذي تركته في أجل التوضيح)

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