2010-08-22 4 views
3

Эй, я очень новичок в веб-программировании. Я изучаю PHP за последние несколько дней, и я застрял в одном.Несколько кнопка отправки в форме

У меня есть тег формы в моем коде, который имеет две кнопки отправки, чтобы манипулировать данными. Поскольку у меня может быть только одно определение действия в теге формы, оно может привести меня только к одной странице. (Не очень уверен)

Теперь в зависимости от кнопки, нажатой на форму, я хочу загрузить другую страницу. Один из способов - проверить кнопку, нажатую в конструкции if-else, а затем использовать echo '...' в ветвях и показать, как будто это другая страница. Но по какой-то причине это кажется неправильным. Может ли кто-нибудь дать мне лучшее решение? Благодарю.

+1

Проблема заключается в том, что существуют и другие способы чтобы отправить форму, кроме нажатия на кнопку отправки - как насчет того, когда вы нажимаете ввод в текстовом «ввод», например? Я думаю, что вместо этого вы должны иметь флажок radioobutton/select/check в конце для этого поведения, а не две кнопки отправки. –

ответ

2

Один из способов - использовать Javascript для переключения действия формы в зависимости от того, какой элемент управления был нажат. В следующем примере используется библиотека JQuery:

<form id="theForm" action="foo.php"> 
... 
    <input id="first" type="submit"/> 
    <input id="second" type="submit"/> 
</form>​ 

$(document).ready(function() { 
    $("#theForm input").click(function(e) { 
     e.preventDefault(); 
     if(e.target.id == 'first') { 
      $("#theForm").attr("action", "somePage.php"); 
     } else { 
      $("#theForm").attr("action", "anotherPage.php"); 
     } 
     alert($("#theForm").attr("action")); 
     $("#theForm").submit(); 
    }); 
​});​ 

Демо здесь: http://jsfiddle.net/CMEqC/2/

+0

Это будет полностью нарушено, если JavaScript недоступен (и есть достаточно людей, которые сработали над одной ко многим бомбах JS и установили NoScript там, что вы не должны предполагать, что это будет). Выполнение этого с ветвлением на стороне сервера - правильный подход. – Quentin

+0

@ Давид - Это правда, я должен был сказать это в ответе. Мое решение только хорошо, если его приложение * требует *, что у пользователя есть Javascript. – karim79

+0

Это замечательно! Я буду использовать JS в какой-то момент! Благодаря! Но прямо сейчас я только что сделал две формы, чтобы получить два действия. Благодаря! – Gooner

1

Но это не кажется правильным по какой-то причине.

Это неправильное предположение.
Любое другое решение было бы намного хуже.

Проверка на стороне сервера является единственным надежным решением.
Однако echo в отраслях не требуется. Есть много других способов.
Использовать include заявление наиболее очевидно одно.

+0

Когда мы говорим о архитектуре MVC, я упал, это не правильно, и, кроме того, это хромой способ сделать что-то. – Gooner

+0

@ Gooner LOL, это самый смешной комментарий, который я когда-либо видел. Вы не понимаете, о чем говорите :) –

+0

Спасибо, что сообщили мне: – Gooner

-2

добавить другое решение, основанное на @ karim79, так как он с тегами PHP:

<form id="theForm" action="foo.php"> 
... 
    <input id="first" name="button" value="first" type="submit"/> 
    <input id="second" name="button" value="second" type="submit"/> 
</form>​ 

в вашем foo.php, сделать что-то вроде этого:

<?php 
$submit = isset($_GET['button']) ? trim($_GET['button']) : ''; 

if($submit == 'first') 
{ 
    header('Location: somePage.php'); 
} 
else if($submit == 'second') 
{ 
    header('Location: anotherPage.php'); 
} 
?> 

Резюме: , чтобы быть в состоянии для чтения на вашей кнопке (2 кнопки отправки), вам нужно добавить name на каждом из них. Чтобы сделать его простым, просто используйте одно и то же имя для обоих. Затем добавьте разные value. Затем вам понадобится , чтобы узнать, какая кнопка нажата, проверяя, какое значение отправлено на этой конкретной кнопке.

+0

Это будет отбрасывать все данные формы при перенаправлении, но в остальном это идентично подходу, который задает вопрос. – Quentin

0

только в качестве ссылки ... кнопки HTML5 INT может переопределить действие, метод, тип форме в http://w3schools.com/html5/tag_button.asp и т.д. для меня, это хороший способ контролировать форму :)

+0

Этот ответ может быть полезен в 2030 году, когда браузеры, которые не реализовали эту функцию, вероятно, не будут достаточно распространены, чтобы беспокоиться. – Quentin

+0

Я знаю .. вот почему я сказал «как ссылку» ... я думаю, что это хорошая особенность, хотя – pleasedontbelong

Смежные вопросы