[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Две последовательные формы в одном скрипте
Guest
Есть такой скрипт

<?php
function
form1() {
?>
<form action="index.php" method="POST">
<
select name="sel1">
<
option value='0'>-Выберите-</option>
<
option value='1'>Один</option>
<
option value='2'>Два</option>
<
option value='3'>Три</option>
</
select>
<
input type="submit" name="send1" value="submit">
</
form>
<?php
}
function form2() {
?>
<form action='index.php' method='POST'>
<?php echo $_POST['sel1']?><BR>
<
input type='text' name='text2'>
<
input type='submit' name='send2' value='submit2'>
</
form>
<?php
}
function display_res($res){
echo $res;
}
//Тело скрипта
if (isset($_POST['send1'])) {
if ($_POST['sel1']=='0') {
display_res("error: Выберите sel1");
}
else {
if (isset($_POST['send2'])) {
if ($_POST['text2']=="") {
display_res('error: Введите text2');
}
else {
display_res("ok: ".$_POST['text2']);
}
}

else {
form2();
}
}
}

else {
form1();
}
?>

Почему после нажатия кнопки submit2 выходит form1, по идее должен выйти display_res



Спустя 8 часов, 9 минут, 14 секунд (4.04.2012 - 14:32) Adamant написал(а):
display_res никогда не будет задействована. Потому как при сабмите 1-й формы. Появляется $_POST['sel1'] и выводится вторая форма. При сабмите второй формы появляется $_POST['sel2'], но $_POST['sel1'] не существует. Поэтому условие вывода никогда не выполнится display_res()

Сами посудите:

Если существует ($_POST['send1'])
то не существует$_POST['send2']

Соответственно выводится вторая форма.

Если сабмитим вторую форму. То
Не существует ($_POST['send1']),
соответственно выводится 1-я форма


И так до бесконечности. Вы неправильно составили проверку условий

Спустя 13 часов, 39 минут, 31 секунда (5.04.2012 - 04:12) Guest написал(а):
Т. е. в одном скрипте можно использовать только одну форму?
Как тогда правильно реализовать такое:
1. выводится 1-я форма
2. При нажатии на кнопку первой формы:
Если есть ошибки, то выводится ошибка
иначе выводится 2-я форма
3. Если есть ошибка выводится ошибка
иначе выводится ок
И все это в одном скрипте
Как-то работают же многостраничные формы

Спустя 21 час, 24 минуты, 30 секунд (6.04.2012 - 01:36) Adamant написал(а):
Вам нужно обязательно проверять на заполнение форм на странице с помощью javascript помимо проверки их на самом сервере. Я бы на вашем месте сделал примерно так.


<noscript>
<font
color="red" size="+1">
Внимание, у вашего браузера выключен Javascript.
</font>
</noscript>

<script
language="javascript">
function
checkForm_1() {
if (!document.form_1.sell.selectedIndex) {
window.alert ( "Выберите sell" );
return false;
}
return true;
}

function checkForm_2() {
if (document.form_2.text2.value == "") {
window.alert("Не заполнено поде text2!");
return false;
}
return true;
}
</script>

<?php

if (isset($_POST['send1'])) {
if (!$_POST['sell']) {
echo "Error: Выберите sell <br />\n";
form1();
} else {
form2();
}
}
elseif (isset($_POST['send2'])) {
if (empty($_POST['text2'])) {
echo "Error: введите text2 <br>\n";
form2();
} else {
echo "OK: " . $_POST['text2'];
}
}
else {
form1();
}

function form1()
{
?>
<form
action = '' method = "POST" name='form_1' onSubmit='return checkForm_1()'>
<select
name = 'sell'>
<option
value = '0' selected>-Выберите-</option>
<option
value = '1'>Один</option>
<option
value = '2'>Два</option>
<option
value = '3'>Три</option>
</select>
<input
type = "submit" name = "send1" value = "submit">
</form>
<?php

}

function form2()
{
?>
<form
action = '' method = 'POST' name='form_2' onsubmit='return checkForm_2()'>
<?php
echo $_POST['sell'];?><br />
<input
type="hidden" name="sell" value="<?php echo $_POST['sell'];?>">
<input
type = 'text' name = 'text2'>
<input
type = 'submit' name = 'send2' value = 'submit2'>
</form>
<?php

}
?>

Спустя 4 часа, 52 минуты, 25 секунд (6.04.2012 - 06:28) Guest написал(а):
Спасибо, так получается, оказывается send1 и send2 одновременно существовать не могут (оно и правильно, ведь на две кнопки одновременно не нажмешь)

Спустя 19 дней, 18 часов, 19 минут, 26 секунд (26.04.2012 - 00:48) Spot написал(а):
теперь такой вопрос


<?php
function
page1($ray)
{
echo "Page1 - ".$ray;
?>
<form name='rayform' method='post' action='index.php'>
<
input type='submit' name='next' value='Далее'/>
<
input type='submit' name='changeray' value='Сменить район'/>
</
form>
<?php
}
function page2($ray)
{
echo "Page2 - ".$ray;
}
function selectrayon()
{
?>
<form name='rayform' method='post' action='index.php'>
<
select name='rayid'>
<
option value='0'>-выберите район-</option>
<
option value='1'>Район1</option>
<
option value='2'>Район2</option>
</
select>
<
input type='submit' name='sendray' value='Далее'/>
</
form>
<?php
}
session_start();
if (!isset($_SESSION['rayon'])){
if(isset($_POST['sendray'])){
if ($_POST['rayid']==0) {
echo "Выберите район";
selectrayon();
}
else {
$_SESSION['rayon']=$_POST['rayid'];
header('Location: index.php');
}
}

else {
selectrayon();
}
}

else {
if (isset($_POST['next'])) {
page2($_SESSION['rayon']);
}
elseif (isset($_POST['changeray'])){
unset($_SESSION['rayon']);
header('Location: index.php');
}
else {
page1($_SESSION['rayon']);
}
}

?>

Как сделать без ансета переменной сеанса?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.