2013-04-30 99 views
0

我对PHP很新,但很努力学习。我为我的学校网站创建了一个提交表单,并在表单中有一组单选按钮。请看下图:PHP中所需的单选按钮检查文本框

*Account Fund: <input type="radio" name="accfnd" value="nonprofit" <?php 
echo $nonprofitChecked; ?>> 

Academic/Non-Profit <input type="radio" 
name="accfnd" value="commercial" <?php echo $commercialChecked; ?>> 

Commercial <input type="radio" name="accfnd" value="uc" <?php echo $ucChecked; ?>> 

UC <input type="text" size="40" name="ucfund" 
value="<?php if(isset($_POST['ucfund'])) echo $_POST['ucfund'];?>" /> 
<?php if($ucfundError != '') { ?> 
    <span class="error"> 
    <?=$ucfundError;?> 
    </span> 
<?php } ?> 

当与value="uc"单选按钮被选中,在它旁边是必需的文本框中填写否则会得到一个错误信息。大多数情况下,这工作正常,我遇到的问题是,即使我已经检查了其他单选按钮之一,我仍然收到要求填写文本消息的错误消息。仅需要输入文本框的时候是uc单选按钮被选中。我希望我有道理。

以下是php代码。我将不胜感激任何帮助。谢谢。

$accfnd = $_POST['accfnd']; 

if (isset($_GET['uc'])){ 
    if ($_GET['accfnd'] == 'uc'){ $ucChecked = ' checked="checked" '; } 
} else if (trim($_POST['ucfund']) === '') { 
    $ucfundError = '<span class="error">Account fund is required for UCI users.</span>'; 
    $hasError = true; 
} else { 
    $ucfund = trim($_POST['ucfund']); 
} 

$body = " Account Fund: $accfnd \n\n UCI Account Fund: $ucfund"; 
+0

您如何提交数据?我看不到表格。您是通过GET还是POST发送的? – 2013-04-30 20:48:11

回答

0

何塞提到的,您同时使用$ _GET和$ _POST表单数据的变量可以互换。

最好的解决方案是使用$_REQUEST[]无论你可能使用$_GET[]$_POST[]$_REQUEST是一个合并超级全局,包含所有提交的表单数据,无论是POST还是GET。它基本上是$ _GET和$ _POST的组合(以及$ _COOKIE)。更多信息/澄清here in the manual

其次,你问的问题是比较数据。你有多个嵌套的if()和elseif()语句永远不会执行,因为$_GET['uc']不存在。

$accfnd = $_REQUEST['accfnd']; 

if ($accfnd == 'uc'){ // Commercial selected, text box required 
    $ucChecked = ' checked="checked" '; 
    if (trim($_REQUEST['ucfund']) === '') { 
     $ucfundError = '<span class="error">Account fund is required for UCI users.</span>'; 
     $hasError = true; 
    } 
} else { 
    $ucfund = trim($_REQUEST['ucfund']); 
} 

$body = " Account Fund: $accfnd \n\n UCI Account Fund: $ucfund"; 
0

我没有看到名为uc表单元素;您的代码也可以简化为

$accfnd = isset($_POST['accfnd']) ? $_POST['accfnd'] : ''; 
$ucfund = isset($_POST['ucfund']) ? $_POST['ucfund'] : ''; 

if ($accfnd == 'uc') { 
    $ucChecked = ' checked="checked" '; 

    if (trim($ucfund) == '') { 
     $ucfundError = '<span class="error">Account fund is required for UCI users.</span>'; 
     $hasError = true; 
    } 
} 

$body = " Account Fund: $accfnd \n\n UCI Account Fund: $ucfund"; 
+0

哇!非常感谢大家的回复。我现在看到我做错了什么。何塞,我通过电子邮件发送数据,我不明白$ _GET或$ _POST之间的差异,所以我想我只是使用两者。但是我想我现在将使用$ _REQUEST作为Set Sail建议。再次感谢!! – user2292856 2013-04-30 22:51:43