Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: две кнопки в одной форме
 
 автор: MIB   (15.04.2008 в 18:43)   письмо автору
 
 

День добрый! Хочу сделать две кнопки в одной форме, как разделить задачи выполнения операций над передаваемыми данными?

   
 
 автор: elenaki   (15.04.2008 в 18:47)   письмо автору
 
   для: MIB   (15.04.2008 в 18:43)
 

каждой кнопке присвоить имя и проверять, какая из кнопок нажата. а передаваться будут ВСЕ данные формы. их можно только по-разному обрабатывать в зависимости от того, какая кнопка нажата. да, и кнопки должны быть типа button, не пытайтесь два сабмита прицепить.

   
 
 автор: MIB   (15.04.2008 в 19:04)   письмо автору
 
   для: elenaki   (15.04.2008 в 18:47)
 

если просто button, то как передавать значения? почему нельзя 2 submita? Ведь будет выполняться какой-то один из них...

   
 
 автор: elenaki   (15.04.2008 в 19:07)   письмо автору
 
   для: MIB   (15.04.2008 в 19:04)
 

onclick=document.getElementById("form").submit();

   
 
 автор: MIB   (15.04.2008 в 19:28)   письмо автору
 
   для: elenaki   (15.04.2008 в 19:07)
 

Всё здорово, только уже прописано onclick="return confirm ('Вы уверены?')"... как быть в такой ситуации?

   
 
 автор: elenaki   (15.04.2008 в 19:32)   письмо автору
 
   для: MIB   (15.04.2008 в 19:28)
 

<input type="button" onclick='document.getElementById("form").submit(); return confirm ("вы уверены?");'>

   
 
 автор: MIB   (15.04.2008 в 20:13)   письмо автору
 
   для: elenaki   (15.04.2008 в 19:32)
 

ну вот и дошёл до самого главного! как проверить-то теперь какая кнопка была нажата?

   
 
 автор: sim5   (15.04.2008 в 20:16)   письмо автору
 
   для: MIB   (15.04.2008 в 20:13)
 

Если передача методом POST, то:
if (isset($_POST['имя кнопки'])) ....

   
 
 автор: MIB   (15.04.2008 в 20:26)   письмо автору
 
   для: sim5   (15.04.2008 в 20:16)
 

<input type="button" name="del" value="Удалить" onclick=document.getElementById("add").submit(); return confirm ("Вы уверены?");>

if (isset($_POST['del']))
{
Echo "DELETE!";
}

не работает (

2 кнопки - 2 условия, а выполняется ни то, ни другое, а else...

   
 
 автор: elenaki   (15.04.2008 в 20:29)   письмо автору
 
   для: MIB   (15.04.2008 в 20:26)
 

надо сравнивать не только по isset, но и по имени кнопки.
для проверки сначала выведите весь массив POST, посмотрите ЧТО там.

   
 
 автор: sim5   (15.04.2008 в 23:03)   письмо автору
 
   для: MIB   (15.04.2008 в 20:26)
 


<?
switch (key($_POST)) {
  case 
'del' //work
  
break;
  case 
'set' //work
  
break;
  
// etc....
}

   
 
 автор: Artem S.   (15.04.2008 в 23:09)   письмо автору
 
   для: sim5   (15.04.2008 в 23:03)
 

Правильнее все таки будет вариант Киналь, т.к. он работает без JS, да и код валиден вполне.

   
 
 автор: sim5   (15.04.2008 в 23:24)   письмо автору
 
   для: Artem S.   (15.04.2008 в 23:09)
 

С одной сторы да, с другой... Если форма ради двух кнопок, то еще может быть, но есть радиокнопки, если форма это не только две кнопки, то в чем смысл этих махинаций? Не проще ли якорь и принять GET запрос?

   
 
 автор: Киналь   (15.04.2008 в 23:52)   письмо автору
 
   для: sim5   (15.04.2008 в 23:24)
 

А если в форме есть, например, загрузка файла? Тогда придется смешивать POST и GET, а если из эстетических соображений нужны непременно кнопки, то еще и JS чуток приплести придется. Некрасиво, имхо.

   
 
 автор: sim5   (15.04.2008 в 23:59)   письмо автору
 
   для: Киналь   (15.04.2008 в 23:52)
 

Вот именно - а если... Автор похоже мучится с двумя кнопками, стоит ли для этого заморачивать JS или два SUBMIT? Это что эстетика?

   
 
 автор: MIB   (16.04.2008 в 10:42)   письмо автору
 
   для: sim5   (15.04.2008 в 23:59)
 

Господа, кнопки действительно всего 2. На выбор пользователя представляется либо изменить запись в БД - "edit", либо совсем удалить её. В данном случае сложного ничего придумывать не стоит и всячески извращаться... Хотелось бы наоборот максимально упростить код и быть уверенным что он 100% выполниться, а чем больше всяких бирюлек и перламутровых пуговок, тем, мне кажется, только хуже. Всем принявшим огромное спасибо за проявленную инициативу! Данные передаю только методом POST, кнопки находятся рядом, поэтому подскажите наиболее простой и максимально надёжный(рабочий) вариант...

   
 
 автор: elenaki   (16.04.2008 в 10:55)   письмо автору
 
   для: MIB   (16.04.2008 в 10:42)
 

просто и надежно - вообще без кнопок, а ссылками. ведь и редактирование и удаление
производится над ОПРЕДЕЛЕННОЙ записью, которая уже явно есть в базе. поэтому
достаточно передать ТОЛьКО ее id, а в принимающих файлах (edit.php или delete.php)
проверить на числовое заначение, найти запись по id и удалить или выдать форму для
редактирования (заполненную) соответственно.

   
 
 автор: Thrasher   (16.04.2008 в 11:11)   письмо автору
 
   для: MIB   (16.04.2008 в 10:42)
 

В форме пишешь:
<input type="submit" name="edit" value="редактировать" />
<input type="submit" name="delete" value="удалить" />

А в обработчике:
if(isset($_POST['delete']))
{
  ...
}
if(isset($_POST['edit']))
{
  ...
}

   
 
 автор: MIB   (16.04.2008 в 12:15)   письмо автору
 
   для: Thrasher   (16.04.2008 в 11:11)
 

ок, всё работает без проблем, за исключением подтверждения нажатия второй кнопки... onclick=return confirm ("Вы уверены?") не работает...

   
 
 автор: sim5   (16.04.2008 в 12:54)   письмо автору
 
   для: MIB   (16.04.2008 в 12:15)
 


<a href="as.php?delete=1" onclick="return confirm('Вы уверены?')">Удалить</a>
<a href="as.php?edit=1">Редактировать</a>
<?
if (isset($_GET['delete'])) .....
if (isset(
$_GET['edit'])) .....
?>

   
 
 автор: MIB   (16.04.2008 в 13:15)   письмо автору
 
   для: sim5   (16.04.2008 в 12:54)
 

с ковычками проблема, так как это организовано так:

echo '<input type="submit" name="del" value="Удалить" onclick="return confirm("Вы уверены?")">';

соответственно встаёт проблема с кавычками я так понимаю... или нет?

   
 
 автор: elenaki   (16.04.2008 в 13:17)   письмо автору
 
   для: MIB   (16.04.2008 в 13:15)
 

можно и без echo обойтись, если так трудно слеши расставить перед кавычками.

   
 
 автор: MIB   (16.04.2008 в 13:19)   письмо автору
 
   для: elenaki   (16.04.2008 в 13:17)
 

не понимаю я эту тему со слешами!... вся форма рисуется внутри <?php ... ?> как без echo?

   
 
 автор: elenaki   (16.04.2008 в 13:28)   письмо автору
 
   для: MIB   (16.04.2008 в 13:19)
 

<?php ... ?> как без echo?
=========================
закрыть вывод php ?>, начать вывод html, открыть вывод php <? и продолжать в том же
духе. рисовать html-код внутри echo или print - дурной тон. сами же потом в коде заплутаете.

   
 
 автор: MIB   (16.04.2008 в 14:03)   письмо автору
 
   для: elenaki   (16.04.2008 в 13:28)
 

всё понял, исправил.... просто иногда в поля приходится вставлять переменные... поэтому вся эта суета...

   
 
 автор: elenaki   (16.04.2008 в 14:06)   письмо автору
 
   для: MIB   (16.04.2008 в 14:03)
 

переменные вставляются очень просто
<a href="page.php?value=<?=$peremennyaya?>">link</a>

   
 
 автор: sim5   (16.04.2008 в 13:19)   письмо автору
 
   для: MIB   (16.04.2008 в 13:15)
 

Правильно понимаете.

   
 
 автор: MIB   (16.04.2008 в 13:20)   письмо автору
 
   для: sim5   (16.04.2008 в 13:19)
 

как организовать это тогда?

   
 
 автор: sim5   (16.04.2008 в 13:24)   письмо автору
 
   для: MIB   (16.04.2008 в 13:20)
 

Накрыть стол, я так пологаю. ) Вы что издеваетесь? У вас есть учебники или вы хотите изучить все по ответам на форуме? Вам elenaki сказала, а я приводил пример без echo, либо раставьте слеши. Попробуйте это сделать в редакторе, ведь подсветка кода вам указывает, что не верна запись.

   
 
 автор: Киналь   (15.04.2008 в 20:20)   письмо автору
 
   для: elenaki   (15.04.2008 в 18:47)
 

> да, и кнопки должны быть типа button, не пытайтесь два сабмита прицепить.

Почему? Разве не пойдет

<input type='submit' name='act' value='Первое действие'>
<input type='submit' name='act' value='Второе действие'>

В обработчике проверить $_POST['act']. Не проверял, но должно бы работать.

   
 
 автор: sim5   (15.04.2008 в 20:21)   письмо автору
 
   для: Киналь   (15.04.2008 в 20:20)
 

И зачем?

   
 
 автор: Antohins   (16.04.2008 в 10:14)   письмо автору
 
   для: sim5   (15.04.2008 в 20:21)
 

А вдруг форма большая?

Я бы тоже поставил одну кнопку наверху, а другую внизу

   
 
 автор: Thrasher   (16.04.2008 в 10:46)   письмо автору
 
   для: elenaki   (15.04.2008 в 18:47)
 

>каждой кнопке присвоить имя и проверять, какая из кнопок нажата. а передаваться будут ВСЕ данные формы. их можно только по-разному обрабатывать в зависимости от того, какая кнопка нажата. да, и кнопки должны быть типа button, не пытайтесь два сабмита прицепить.

Это почему же нельзя два сабмита? Очень даже можно. Я так часто делаю, и всё работает. Зачем лишние извращения с JS?

   
 
 автор: MIB   (16.04.2008 в 12:49)   письмо автору
 
   для: Thrasher   (16.04.2008 в 10:46)
 

ок, всё работает без проблем, за исключением подтверждения нажатия второй кнопки... onclick=return confirm ("Вы уверены?") не работает...

   
 
 автор: KPETuH   (16.04.2008 в 14:07)   письмо автору
 
   для: MIB   (16.04.2008 в 12:49)
 

кнопки картинками с сылками, подтверждение сделайте без java а средствами php.

   
 
 автор: elenaki   (16.04.2008 в 18:25)   письмо автору
 
   для: KPETuH   (16.04.2008 в 14:07)
 

зачем лишний раз обращаться к серверу?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования