Одна форма может иметь несколько действий?

Я желаю отправить форму различным местам на основе выборов, сделанных в форме. Я первоначально планировал к отправить, все в центральный файл/местоположение и иметь его определяют, куда пойти затем. Однако я хотел бы обойтись без этого дополнительного шага, если я мог.

Если пользователь хочет создавать/редактировать/удалять элементы, переходят к странице 1.
Если пользователь хочет группироваться/присоединять, элементы переходят к странице 3.

Я пытаюсь записать конструктор форм. Можно создавать/редактировать/удалять формы, вопросы и ответы. У меня есть все для создания, редактирования и сделанного удаления. Те функции выполняются, не оставляя страницу, но теперь я надеюсь присваивать ответы на конкретные вопросы. Страница вопросов и страница ответов являются отдельными. Я желаю выбрать группу ответов и отправить массив Ids ответа (установленные флажки) к странице вопроса, где те Ids будут затем присвоены вопросу. Таким образом, в основном создавание, редактирование, и удаляют функции, идут, не оставляя страницу, но присваивать функция была бы выполнена на другой странице.

if(empty($delRowID) || empty(updateRowID) || empty($groupRows)) {
    qInsert();
}else{
    if(!empty($delRowID)) qDelete($delRowID);
    if(!empty(updateRowID)) qUpdate($updateRowID);
    if(!empty($groupRows)) {
        submit $groupRows to Question.php;
    }
}
5
задан Brook Julias 8 June 2010 в 16:49
поделиться

9 ответов

Можно использовать JavaScript, но это не рекомендуется, потому что некоторые люди отключают JS по умолчанию из-за троянов и шумного поведения некоторых сайтов. Считается вежливым, если ваш сайт работает как с включенным, так и с выключенным JS.

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

index.php

<?  
mysql_connect(); 
mysql_select_db("new"); 
$table = "test"; 
if($_SERVER['REQUEST_METHOD']=='POST') { //form handler part: 
  $name = mysql_real_escape_string($_POST['name']); 
  if ($id = intval($_POST['id'])) { 
    $query="UPDATE $table SET name='$name' WHERE id=$id"; 
  } else { 
    $query="INSERT INTO $table SET name='$name'"; 
  } 
  mysql_query($query) or trigger_error(mysql_error()." in ".$query); 
  header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);  
  exit;  
}  
if (!isset($_GET['id'])) { //listing part: 
  $LIST=array(); 
  $query="SELECT * FROM $table";  
  $res=mysql_query($query); 
  while($row=mysql_fetch_assoc($res)) $LIST[]=$row; 
  include 'list.php'; 
} else { // form displaying part: 
  if ($id=intval($_GET['id'])) { 
    $query="SELECT * FROM $table WHERE id=$id";  
    $res=mysql_query($query); 
    $row=mysql_fetch_assoc($res); 
    foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v); 
  } else { 
    $row['name']=''; 
    $row['id']=0; 
  } 
  include 'form.php'; 
}  
?>

form.php

<form method="POST">
<input type="text" name="name" value="<?=$row['name']?>"><br>
<input type="hidden" name="id" value="<?=$row['id']?>">
<input type="submit"><br>
<a href="?">Return to the list</a>
</form>

list.php

<a href="?id=0">Add item</a>
<? foreach ($LIST as $row): ?>
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a>
<? endforeach ?>
6
ответ дан 18 December 2019 в 05:33
поделиться

Нет , форма имеет только одно действие.

Но у вас есть варианты:

Javascript

Однако вы можете изменить атрибут действия с помощью javascript :

<input type="submit" value="Edit" onclick="editform();return true;">
<input type="submit" value="Delete" onclick="deleteform();return true;">

вместе с небольшим JavaScript:

function editform() {
    document.myform.action = '/edit';
}
function deleteform() {
    document.myform.action = '/delete';
}

См. Также

Несколько форм

Если javascript не подходит для вас, вы можете рассмотреть возможность использования нескольких форм на своей странице .

 Несколько форм = несколько действий

Нет проблем с клиентами с отключенным javascript и соответствует стандартам.

Несколько кнопок отправки - на стороне сервера

Или вы можете обрабатывать различие редактирования или удаления на стороне сервера. JavaScript не требуется.

Добавьте в форму несколько кнопок отправки и присвойте им одно и то же имя, но другое значение:

<input type="submit" name="btSubmit" value="Edit">
<input type="submit" name="btSubmit" value="Delete">

Затем вы можете получить значение кнопки, которая была нажата. В php следующее должно работать:

$_POST['btSubmit']

См. http://www.chami.com/tips/internet/042599I.html для примера с классическим asp.

18
ответ дан 18 December 2019 в 05:33
поделиться

Нет, вы не можете иметь несколько действий только в html, но вы можете использовать javascript для переключения действия в зависимости от того, какая кнопка нажата.

Я бы сделал что-то вроде этого (в псевдо-mootools)

<form action='default.php'>
 ... form elements ...

<button onclick='editButtonClick()' value='edit'/>
<button onclick='deleteButtonClick()' value='delete'/>
</form>

function editButtonClick() {
   $('form').action = 'editaction.php';
   $('form').submit();
}

function deleteButtonClick) {
   $('form').action = 'deleteaction.php';
   $('form').submit();
}
3
ответ дан 18 December 2019 в 05:33
поделиться

на странице Submit вы можете вызвать CURL и передать все переменные Get или post этому url.

-1
ответ дан 18 December 2019 в 05:33
поделиться
<input type="submit" value="Add" onclick="submitForm(this,'add')" />
<input type="submit" value="Update" onclick="submitForm(this,'update')" />
<input type="submit" value="Delete" onclick="submitForm(this,'delete')" />

var submitForm = function(context,uri)
{
    form = contenxt.parent; //Go back to the form
    form.action = uri; // Set the action
    form.submit(); //Submit the form;
}

Java script - лучший способ справиться с этим, альтернатив не так много, если только вы не создадите 3 единственные формы.

0
ответ дан 18 December 2019 в 05:33
поделиться

Если бы я смотрел на то, как это сделать, я бы передал vaule того, что вы хотите делать, с помощью POST.

Затем сравните это значение с набором функций, и каждая функция будет делать разные вещи в зависимости от своего выбора

1
ответ дан 18 December 2019 в 05:33
поделиться

Просто отправьте их в центральное место и используйте логику, чтобы отправить их куда-нибудь еще в зависимости от того, что они выбрали.

например:

<?php
switch($_POST['choice']) {
    case 'edit':
        $page = 'edit.php';
        break;
    case 'group':
        $page = 'group.php';
        break;
}

header("Location: " . $page);

(очевидно, требуется некоторая входная фильтрация и значения по умолчанию)

РЕДАКТИРОВАТЬ: как указано в Кол. Шрапнель ниже, использование header () для этого довольно бессмысленно, поскольку затем он уничтожит ваш массив $ _POST - вместо этого используйте include () , но будьте осторожны, чтобы только разрешить использование ваших собственных файлов и никогда не позволять пользователю называть файл, который будет включен (например, используя значение поля формы для выбора включаемого файла).

5
ответ дан 18 December 2019 в 05:33
поделиться

Нет, не может (по крайней мере, если не зависит от JavaScript).

Отправьте на один URI, и пусть процедура отправки передает данные различным функциям в зависимости от того, какой переключатель (или что-то еще) выбран.

1
ответ дан 18 December 2019 в 05:33
поделиться

Поместите вашу форму в центральный скрипт formhandler. На этой странице просто используйте простую логику (используя php в данном случае) для перенаправления пользователя на нужную вам страницу

0
ответ дан 18 December 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: