PHP Если выбран переключатель, заполните текстовое поле

Я пытался понять эту маленькую проблему и почти готов рвать на себе волосы, лол. Я больше дизайнер, чем программист, но я создал форму отправки на php для своей школы. Вот тестовая форма, над которой я работаю:

http://www.inrf.uci.edu/php-form-test/

Что я пытаюсь сделать, так это то, что когда человек выбирает внешнего пользователя, он должен указать название своей компании. Когда кто-то выбирает Внутренний пользователь, он должен указать имя своей группы/PI. Ну, это не работает. Когда я выбираю «Внутренний», предполагается, что требуется только имя группы/PI, а не название компании. Буду признателен за любую помощь. Благодарю вас!

Вот мой PHP-код здесь:

// internal selected (group pi)

if ($userType == 'internal') {
    $internalChecked = ' checked="checked" ';
} else {
    if(trim($_POST['grpPI']) === '') {
        $grpPIError = '<span class="error">Please enter your group or PI name.</span>';
        $hasError = true;
    } else {
        $grpPI = trim($_POST['grpPI']);
    }
}

    }

// external selected (company name)

 if ($userType == 'external') {
    $externalChecked = ' checked="checked" ';
 } else {
    if(trim($_POST['companyName']) === '') {
        $companyNameError = '<span class="error">Please enter your company name.</span>';
        $hasError = true;
    } else {
        $companyName = trim($_POST['companyName']);
    }
 }

и HTML здесь:

<table class="usertype" id="usertype">   

                         <tr>
                           <td colspan="2">
                             <input type="radio" name="userType" value="external" <?php echo $externalChecked; ?>>External 
                             <select name="externalSelect" size="1">
                               <option selected="selected">Select</option>
                               <option>Academic</option>
                               <option>Non-Profit</option>
                               <option>Commercial</option>
                           </select><?php if($externalError != '') { ?><span class="error"><?=$externalError;?></span><?php } ?></td>
           </tr>
                         <tr>
                           <td colspan="2"><label for="companyName">Company Name:</label> 
                           <input type="text" size="40" name="companyName" id="companyName" value="<?php if(isset($_POST['companyName'])) echo $_POST['companyName'];?>" />
                <?php if($companyNameError != '') { ?>
                <span class="error"><?=$companyNameError;?></span><?php } ?></td>
                         </tr>
                         <tr>
                           <td colspan="3"><input type="radio" name="userType" value="internal" <?php echo $internalChecked; ?>>Internal &nbsp;&nbsp;&nbsp;&nbsp;<input title="Enter Account String. Required for Internal Users." type="text" size="30" name="ucfund" value="<?php if(isset($_POST['ucfund'])) echo $_POST['ucfund'];?>" placeholder="KFS or Account (eg. xxxxxxx)" /><?php if($ucfundError != '') { ?><span class="error"><?=$ucfundError;?></span><?php } ?>&nbsp;-&nbsp; <input title="Enter Fund String. Required for Internal Users." type="text" size="25" name="ucfund2" value="<?php if(isset($_POST['ucfund2'])) echo $_POST['ucfund2'];?>" placeholder="Fund (eg. xxxxx)" /><?php if($ucfund2Error != '') { ?><span class="error"><?=$ucfund2Error;?></span><?php } ?><br /><span class="small">(Please enter KFS number or Accound Fund)</span>
</td>
                         </tr>

                         <tr>
                           <td colspan="3">Optional&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" size="30" name="sub" value="<?php if(isset($_POST['sub'])) echo $_POST['sub'];?>" placeholder="Sub" /><?php if($subError != '') { ?><span class="error"><?=$subError;?></span><?php } ?>&nbsp;-&nbsp; <input type="text" size="25" name="proj" value="<?php if(isset($_POST['proj'])) echo $_POST['proj'];?>" placeholder="Project" /><?php if($projError != '') { ?><span class="error"><?=$projError;?></span><?php } ?>
</td>
                         </tr>
                         <tr>
                           <td colspan="3"><label for="grpPI">Group / PI:</label> 
                           <input type="text" size="40" name="grpPI" id="grpPI" value="<?php if(isset($_POST['grpPI'])) echo $_POST['grpPI'];?>" />
                <?php if($grpPIError != '') { ?>
                <span class="error"><?=$grpPIError;?></span><?php } ?></td>
                </tr>

      </table>

person user2292856    schedule 26.01.2015    source источник
comment
Где определяется $userType? Выполняли ли вы какую-либо отладку, чтобы определить, где код начинает вести себя не так, как вы ожидаете?   -  person Mike Brant    schedule 27.01.2015
comment
Сделать тип пользователя var_dump($userType);, по-видимому, не существует на сервере. Вам нужно отправить его и получить с помощью $_POST   -  person Abel    schedule 27.01.2015


Ответы (1)


Обратите внимание на вашу логику:

if ($user == 'internal') {
   ...
} else {
   ... check for empty field ...
}

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

Точно так же для вашей проверки external поле только для внутреннего использования будет пустым, и вы вызовете еще одну ошибку.

Вам нужно предложение else, чтобы связать эти два оператора if() вместе, чтобы выполнялся только ОДИН из двух путей кода:

if ($user == 'internal') {
   ... do internal-only checks ...
} else if ($user == 'external') {
   ... do external-only checks ...
} else {
   ... $user is undefined type, "zomg how'd you get here" error handling.
}
person Marc B    schedule 26.01.2015