하나의 양식에 두 개의 제출 단추
양식에 두 개의 제출 단추가 있습니다.서버 측에서 어떤 공격을 받았는지 확인하려면 어떻게 해야 합니까?
1 해결책 1:
이름을 합니다.
<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!
}
문제는 입력 내에서 사용자가 볼 수 있는 텍스트에 논리를 연결한다는 것입니다.
2 솔루션 2:
각각 고유한 이름을 지정하고 $_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
}
각 이름을 지정하면 클릭한 이름이 다른 입력으로 전송됩니다.
<input type="submit" name="button_1" value="Click me">
이에인 HTML5라는 접근법이 formaction
속성:
<button type="submit" formaction="/action_one">First action</button>
<button type="submit" formaction="/action_two">Second action</button>
분명히 이것은 Internet Explorer 9 이전 버전에서는 작동하지 않지만 다른 브라우저의 경우에는 문제가 없습니다(w3schools.com HTML <버튼> formaction Attribute 참조).
개인적으로 저는 일반적으로 이 접근 방식을 백업으로 사용하여 원격으로 양식을 제출합니다(피드백을 빠르게 인식하기 위해).이 둘 중에서, JavaScript가 비활성화된 버전 9 이전의 Internet Explorer만 적용되지 않습니다.
물론 어떤 버튼을 눌렀는지에 관계없이 기본적으로 동일한 작업을 서버 측에서 수행하는 경우에는 적합하지 않을 수 있지만, 사용 가능한 두 개의 사용자 측 작업이 있는 경우에는 두 개의 서버 측 작업에도 매핑됩니다.
Pascal_dher가 코멘트에서 언급한 바와 같이, 이 속성은 또한 다음에서 사용할 수 있습니다.<input>
꼬리표도 붙입니다.
더 나은 솔루션은 버튼 태그를 사용하여 양식을 제출하는 것입니다.
<form>
...
<button type="submit" name="action" value="update">Update</button>
<button type="submit" name="action" value="delete">Delete</button>
</form>
버튼 내부의 HTML(예:..>Update<..
가 볼 수 되기 때문에 . HTML은 사용자가 볼 수 있습니다.value
사용자가 지정한 것이 아니라 서버로만 전송됩니다.이렇게 하면 국제화 및 여러 표시 언어에 불편함이 없습니다(이전 솔루션에서 버튼의 레이블은 서버로 전송되는 값이기도 합니다).
테스트가 매우 쉽습니다.
<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을 확인합니다.
을 합니다.formaction
HTML 속성(5번째 줄):
<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>
<input type="submit" value="Submit to a" formaction="/submit/a">
<input type="submit" value="submit to b" formaction="/submit/b">
</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">JavaScript</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
여기서 제안된 해결책은 2009년에 효과가 있었을 수도 있지만, 저는 이 모든 업데이트된 답변을 테스트했고 아무도 브라우저에서 작동하지 않습니다.
제가 찾은 유일한 해결책은 다음과 같습니다(그러나 사용하기에는 좀 추악합니다).
<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';"/>
</form>
하나의 양식 예제에서 여러 제출 단추에 대한 작업을 구성할 수 있습니다.
<input type="submit" name="" class="btn action_bg btn-sm loadGif" value="Add Address" title="" formaction="/addAddress">
<input type="submit" name="" class="btn action_bg btn-sm loadGif" value="update Address" title="" formaction="/updateAddress">
다른 단추 클릭 시 다른 양식 작업을 보내는 HTML 예제:
<form action="/login" method="POST">
<input type="text" name="username" value="your_username" />
<input type="password" name="password" value="your_password" />
<button type="submit">Login</button>
<button type="submit" formaction="/users" formmethod="POST">Add User</button>
</form>
새 사용자 및 로그인 사용자를 추가하는 데 동일한 양식이 사용되고 있습니다.
정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
매우 중요합니다. 그렇지 않으면 둘 다 구문 분석될 것이기 때문입니다.
사용하는 서버 측 스크립트 방법을 지정하지 않았기 때문에 CherryPy를 사용하여 Python에서 작동하는 예제를 제공합니다(다른 컨텍스트에서도 유용할 수 있음).
<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
<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 배열의 이름/값을 읽을 수 있어야 한다고 생각합니다.클릭하지 않은 버튼은 해당 목록에 나타나지 않을 것 같습니다.
이렇게도 할 수 있습니다(N개의 입력이 있다면 매우 편리하다고 생각합니다).
<input type="submit" name="row[456]" value="something">
<input type="submit" name="row[123]" value="something">
<input type="submit" name="row[789]" value="something">
일반적인 사용 사례는 각 단추에 대해 데이터베이스의 다른 ID를 사용하여 나중에 서버에서 어떤 행이 클릭되었는지 알 수 있습니다.
서버 측(이 예에서는 PHP)에서 "행"을 배열로 읽어 ID를 가져올 수 있습니다.
$_POST['row']
하나만 . 이 은 형에서하있배됩 니열다 [ id => value ]
(예:)[ '123' => 'something' ]
).
클릭한 ID를 얻으려면 다음 작업을 수행합니다.
$index = key($_POST['row']);
참고로 제출 단추가 여러 개 있고 반환(ENTER 키)을 누르면 키보드의 기본 단추 값은 DOM의 첫 번째 단추 값이 됩니다.
예:
<form>
<input type="text" name="foo" value="bar">
<button type="submit" name="operation" value="val-1">Operation #1</button>
<button type="submit" name="operation" value="val-2">Operation #2</button>
</form>
이 양식에서 ENTER를 누르면 다음 매개 변수가 전송됩니다.
foo=bar&operation=val-1
업데이트된 답변은 폼액션 및 폼타겟과 함께 버튼을 사용하는 것입니다.
이 예에서 첫 번째 단추는 다른 URL을 시작합니다./preview
새 탭에서나머지 세 개는 양식 태그에 지정된 작업을 사용합니다.
<button type='submit' class='large' id='btnpreview' name='btnsubmit' value='Preview' formaction='/preview' formtarget='blank' >Preview</button>
<button type='submit' class='large' id='btnsave' name='btnsubmit' value='Save' >Save</button>
<button type='submit' class='large' id='btnreset' name='btnsubmit' value='Reset' >Reset</button>
<button type='submit' class='large' id='btncancel' name='btnsubmit' value='Cancel' >Cancel</button>
HTML5에서 당신은 다음을 사용할 수 있습니다.formaction
&formmethod
입력 필드의 속성
<form action="/addimage" method="POST">
<button>Add image</button>
<button formaction="/home" formmethod="get">Cancel</button>
<button formaction="/logout" formmethod="post">Logout</button>
</form>
또한 href 특성을 사용하여 각 버튼에 대한 값이 추가된 get을 전송할 수 있습니다.하지만 그때는 양식이 필요하지 않을 것입니다.
href="/SubmitForm?action=delete"
href="/SubmitForm?action=save"
다음과 같은 단추를 표시할 수 있습니다.
<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는 제가 설명을 위해 남겨둔 양식에서 추출한 몇 가지 다른 값입니다.)
사용 중인 서버 측 스크립팅 방법을 지정하지 않았기 때문에 PHP에서 작동하는 예를 보여드리겠습니다.
<?php
if(isset($_POST["loginForm"]))
{
print_r ($_POST); // FOR Showing POST DATA
}
elseif(isset($_POST["registrationForm"]))
{
print_r ($_POST);
}
elseif(isset($_POST["saveForm"]))
{
print_r ($_POST);
}
else{
}
?>
<html>
<head>
</head>
<body>
<fieldset>
<legend>FORM-1 with 2 buttons</legend>
<form method="post" >
<input type="text" name="loginname" value ="ABC" >
<!--Always use type="password" for password -->
<input type="text" name="loginpassword" value ="abc123" >
<input type="submit" name="loginForm" value="Login"><!--SUBMIT Button 1 -->
<input type="submit" name="saveForm" value="Save"> <!--SUBMIT Button 2 -->
</form>
</fieldset>
<fieldset>
<legend>FORM-2 with 1 button</legend>
<form method="post" >
<input type="text" name="registrationname" value ="XYZ" >
<!--Always use type="password" for password -->
<input type="text" name="registrationpassword" value ="xyz123" >
<input type="submit" name="registrationForm" value="Register"> <!--SUBMIT Button 3 -->
</form>
</fieldset>
</body>
</html>
Register -> Registration Form 클릭 시
단순합니다. 다른 제출 단추 클릭 시 양식의 동작을 변경할 수 있습니다.
이것을 문서로 작성해 보세요.준비:
$(".acceptOffer").click(function () {
$("form").attr("action", "/Managers/SubdomainTransactions");
});
$(".declineOffer").click(function () {
$("form").attr("action", "/Sales/SubdomainTransactions");
});
언급URL : https://stackoverflow.com/questions/547821/two-submit-buttons-in-one-form
'sourcecode' 카테고리의 다른 글
안드로이드 에뮬레이터에서 GPS 위치를 에뮬레이트하는 방법은 무엇입니까? (0) | 2023.06.02 |
---|---|
루비 앰퍼샌드 콜론 바로가기 (0) | 2023.06.02 |
루비 상속 대 믹스인 (0) | 2023.06.02 |
루비의 해시 값을 기준으로 해시 배열 내에서 검색하려면 어떻게 해야 합니까? (0) | 2023.05.28 |
Swift에서 한 뷰 컨트롤러의 방향을 세로 모드로만 잠그는 방법 (0) | 2023.05.28 |