2013-08-05 7 views
3

Я создаю форму, чтобы пользователи могли добавлять свои собственные продукты для продажи на веб-сайте. Javascript должен проверить, заполнены ли все поля, хотя он не работает. Почему не работает javascript?PHP isset не работает с пустым

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

Чтобы избежать этого, если цена2 установлена, а units2 пуст, я хочу, чтобы форма была отклонена, и «вам нужно заполнить обе единицы и цены для каждой опции пакета», чтобы они были эхом. То же самое верно для инверсных и price3 и units3.

Так вот что должен делать PHP. Тем не менее, первый «если» триггеры каждый раз, поэтому «вам нужно заполнить обе единицы и цены для каждой опции пакета1». Почему это работает неправильно?

<script> 
function validproform() 
{ 
var a=document.forms["productentry"]["pname"].value; 
var b=document.forms["productentry"]["pword"].value; 
var c=document.forms["productentry"]["about"].value; 
var d=document.forms["productentry"]["unitabout"].value; 
var e=document.forms["productentry"]["price1"].value; 
var f=document.forms["productentry"]["units1"].value; 
if (a==null || a=="" || b==null || b=="" || c==null || c=="" || d==null || d=="" || e==null || e=="" || f==null || f=="") 
    { 
    alert("Required fields are not all filled out."); 
    return false; 
    } 
</script> 

<?php 
if (isset($_POST['psubmit'])) { 
    if(isset($_POST['price2']) and empty($_POST['units2'])){ 
     echo('You need to fill out both units and prices for each package option1'); 
    } 

    elseif(isset($_POST['units2']) and empty($_POST['price2'])){ 
     echo('You need to fill out both units and prices for each package option2'); 
    } 

    elseif(isset($_POST['price3']) and empty($_POST['units3'])){ 
     echo('You need to fill out both units and prices for each package option3'); 
    } 

    elseif(isset($_POST['units3']) and empty($_POST['price3'])) { 
     echo('You need to fill out both units and prices for each package option4'); 
    } 
} 
?> 

<form name="productentry" action="" method="post" onsubmit="return validproform()"> 
Product Name: <input type="text" name="pname" maxlength="30"><br> 
About: <input type="text" name="about" maxlength="250"><br> 
Describe your product. What is unique about it, what does it do, what sets it apart?<br> 
What each unit contains: <input type="text" name="unitabout" maxlength="250"><br> 
For example: Are you selling, "A bag of chips" or "A box w/ 30 bags of chips" or "a carton of 10 boxes with 30 bags of chips each." Describe what one unit contains.<br> 
Price: <input type="text" name="price1" maxlength="30"><br> 
Number of units: <input type="text" name="units1" maxlength="30"><br> 
---- 
Price 2(optional): <input type="text" name="price2" maxlength="30"><br> 
Number of units(optional): <input type="text" name="units2" maxlength="30"><br> 
Price 3(optional): <input type="text" name="price3" maxlength="30"><br> 
Number of units(optional): <input type="text" name="units3" maxlength="30"><br> 

Password: <input type="password" name="pword" maxlength="30"><br> 
<input type="submit" name="psubmit"> 
</form> 
+1

Попробуйте одиночные кавычки для переменных A, B, C, D и т.д. ... Я вижу, вы использовали дважды. – pattyd

+4

Вам не хватает закрывающей скобки для 'function validproform()' –

+0

Почему это было downvoted? – pattyd

ответ

0

UPDATE снова:

Хорошо, я сделал некоторые эксперименты. Просто нажмите кнопку «Отправить», чтобы установить «$_POST». Поэтому, даже если поле пустое, сервер по-прежнему считает, что он «установлен».

Таким образом, проверка правильности значения переменной - это правильный способ.

Кто бы мог подумать, первый вопрос, на который я бы ответил, был бы моим собственным ха-ха?

Следующий код работает лучше, и чище, чем мой оригинальный ответ:

elseif($_POST['price2'] != 0 and empty($_POST['units2'])){ 
     echo('You need to fill out the number of units corresponding to price 2.'); 
    }  
elseif($_POST['units2'] != 0 and empty($_POST['price2'])){ 
     echo('You need to fill out the price corresponding to your second unit option.'); 
    } 
elseif($_POST['price3'] != 0 and empty($_POST['units3'])){ 
    echo('You need to fill out the number of units corresponding to price 3.'); 
    } 
elseif($_POST['units3'] != 0 and empty($_POST['price3'])) { 
    echo('You need to fill out the price corresponding to your third unit option.'); 
    } 
1
Try this code: 

    <?php 
    if (isset($_POST['psubmit'])) 
     { 
     if(!$_POST['price2']) 
       { 
      echo('You need to fill out both units and prices for each package option1'); 
       } 
     elseif(!$_POST['units2']) 
       { 
      echo('You need to fill out both units and prices for each package option2'); 
       } 
     elseif(!$_POST['price3']) 
       { 
      echo('You need to fill out both units and prices for each package option3'); 
       } 

     elseif(!$_POST['price3']) 
       { 
      echo('You need to fill out both units and prices for each package option4'); 
      } 
     } 
    ?> 

    The !$_POST will the return if the value is FALSE. 
+0

Я не уверен, как сделать вопрос более ясным ... это не сработает, потому что я хочу, чтобы эти поля были необязательными. Однако, если один заполняется (price2), соответствующее поле также должно быть заполнено (units2.) – EveyPortman

+0

вы можете сделать свой вопрос более понятным? потому что им путают с опцией1,2,3,4, потому что в вашем html это необязательно. он отличается от опции –

+0

Цифры были просто так, что я мог определить, очищался ли кто-то, но другого нет. Извините, я понял, как исправить свою проблему, см. Мой ответ, если вам интересно. – EveyPortman