<?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-я форма
И так до бесконечности. Вы неправильно составили проверку условий
Сами посудите:
Если существует ($_POST['send1'])
то не существует$_POST['send2']
Соответственно выводится вторая форма.
Если сабмитим вторую форму. То
Не существует ($_POST['send1']),
соответственно выводится 1-я форма
И так до бесконечности. Вы неправильно составили проверку условий
Спустя 13 часов, 39 минут, 31 секунда (5.04.2012 - 04:12) Guest написал(а):
Т. е. в одном скрипте можно использовать только одну форму?
Как тогда правильно реализовать такое:
1. выводится 1-я форма
2. При нажатии на кнопку первой формы:
Если есть ошибки, то выводится ошибка
иначе выводится 2-я форма
3. Если есть ошибка выводится ошибка
иначе выводится ок
И все это в одном скрипте
Как-то работают же многостраничные формы
Как тогда правильно реализовать такое:
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']);
}
}
?>
Как сделать без ансета переменной сеанса?