2012-03-31 3 views
0

У меня есть такая форма, которая позволяет вводить любое количество продукта от 1-10:

<form method='post' action='cart.php'> 
<input type='number' name='quantitychange' size='2' min='1' max='10' value=".$_SESSION["itemsSelected"][$i][1]."> 
<input type='hidden' name='ProductID' value=".$_SESSION["itemsSelected"][$i][0]."> 
<input type='submit' value='Update'> 
</form> 

И другая форма (кнопка), чтобы отобразить выбор режимов оплаты:

<form action='cart.php' method='post'> 
<input type='hidden' name='next'> 
<input type='submit' value='Select Payment Mode'> 
</form> 

Что я хочу, так это то, что когда пользователь ничего не вводил (1-я форма), например. null или 0, я хочу отобразить окно предупреждения, в котором говорится: «Количество продукта не может быть нулевым или 0».

Вот мой код, который:

if (isset($_POST['next'])) { 
if ($_POST['quantitychange']==null || $_POST['quantitychange']==0) { 
?> 
<script type='text/javascript'> 
alert('Product quantity can't be null or 0.'); 
</script> 
<?php 
} 
else { 
echo " 
//Payment modes here 
"; 
} 
} 

Ошибка в том, что даже тогда, когда пользователь вводит ставку количество. От 1 до 10, оно все еще отображает предупреждение. Любая помощь? Спасибо.

Кстати, тип ввода «номер» работает только в браузере Google Chrome.

ответ

1

Используйте небольшую функцию javascript (или jQuery) для проверки формы перед ее отправкой. Эта функция вызывает предупреждение, если ваше условие не выполняется, а затем возвращает false. Если условие выполнено, верните true, и оно будет отправлено.

Отредактировано для добавления, так как это может привести к ошибке в googled, я немного помогу с фрагментом кода, который я использовал. Ниже приведен пример jQuery и использовался для создания веб-приложения, которое я сделал для своих сотрудников. document.form.doit.submit(); должен быть чистым javascript способом отправки формы.

<script type="text/javascript"> 
function subForm() { 
    // document.form.doit.submit(); 
    if(test condition passes) { 
     $('#save_order').submit(); 
    } 
} 
</script> 

<form id="save_order" action="oms_db.php" method="POST"> 
<input id="doit" type="button" 
    value="i am a button" onClick="subForm();"> 
</form> 
+0

+1. Поскольку вы уже используете javascript, вы можете просто проверить, пусто ли поле количества наBlur, а затем пользователю не нужно отправлять всю форму и ждать загрузки страницы-получателя, прежде чем получать уведомление об ошибке. – octern

+0

Мне нравится ставить проверку на кнопку отправки (или сделать кнопку отправки просто вызовом функции на что-то вроде submitMyNumberForm), и тогда функция может выполнять любое пользовательское взаимодействие, которое вам нравится. Если вы onBlur(), то если они ненавязчиво наводят указатель мыши на них, они кричат. Не круто!Кроме того, форма не перезагружается, когда функция считает данные недействительными и возвращает false, это как если бы кнопка не была нажата вообще, и посетитель страницы все еще наблюдает за ней. Я буду использовать jQuery или javascript, чтобы сосредоточиться на этом поле ввода и/или сделать его красным. –

+0

Вы говорите, что перемещение указателя над полем ввода (при перетаскивании?) Заставляет его получать фокус? Раньше такого никогда не было. Я думал, что Блэр произойдут только в том случае, если они ранее нажимали или иным образом перемещались в поле. – octern

0

Я думаю, что у вас есть некоторая ошибка в ваших формах. Вместо того, чтобы ниже:

<input type='number' name='quantitychange' size='2' min='1' max='10' value=".$_SESSION["itemsSelected"][$i][1]."> 
<input type='hidden' name='ProductID' value=".$_SESSION["itemsSelected"][$i][0]."> 

вы должны использовать что-то вроде этого:

<input type='number' name='quantitychange' size='2' min='1' max='10' value="<?php echo $_SESSION["itemsSelected"][$i][1]; ?>"> 
<input type='hidden' name='ProductID' value="<?php echo $_SESSION["itemsSelected"][$i][0]; ?>"> 

Параметров значения в скрытых полях ввода должны быть эхом от PHP. То, что у вас есть сейчас, похоже на значение простых строк ". $ _ SESSION [" itemsSelected "] [$ i] [0].".

0

Я предлагаю вам использовать

if(empty($_POST['quantitychange'])) { echo 'yourerror'; } 

Как это намного чище, то ваш сценарий. (Http://php.net/manual/en/function.empty.php)

Update: Кроме того, вы не можете использовать два отдельных форм, как вы делаете, ваш браузер только сообщения, Что между

<form> 
</form> 

Использование только одного исправит вашу проблему.