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