2012-08-15 77 views
3

我有一个用户提交的注册表单,数据是使用isset($ _ POST)发送的,以查看是否有任何内容被放入表单输入框。如果没有,则将其发送给其他人,然后将其发送到将用户返回到注册表单以完成一些缺失表单的功能。由于某些原因,它不能正常工作。isset在表单上无法正常工作

这里是我的检查代码-------

function returnBack(){ 

    header("Location:register.php"); 
    exit; 

} 

if(isset($_POST['myusername'])) 
{ 
    $myusername = $_POST['myusername']; 
} 
else 
{ 
    returnBack(); 
} 
if(isset($_POST['mypassword'])) { 
    $mypassword=$_POST['mypassword']; 

} 
else{ 

    returnBack(); 
} 
if(isset($_POST['myemail'])) { 

    $myemail=$_POST['myemail']; 
} 
else{ 

    returnBack(); 
} 
if(isset($_POST['myname'])) { 

    $myname=$_POST['myname']; 
} 
else{ 

    returnBack(); 
} 
if(isset($_POST['mylastname'])){ 

    $mylastname=$_POST['mylastname']; 

} 
else{ 

    returnBack(); 
} 
/////////////////////////////////////////////////////////////*******CONNECT TO SERVER ******************************************************************/ 
try { 
    # MySQL with PDO_MYSQL 
    $DBH = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); 
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

} 
catch(PDOException $e) { 
    echo "I'm sorry, I'm afraid I can't do that."; 
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); 
} 
////////////////////////////////////////////////////////////***********INSERT REGISTER DATA INTO DB ***************************************************************/ 
//$encrypt_password = md5($mypassword); 

$insertdata = $DBH->prepare("INSERT INTO members (username, password, email, firstname, lastname) VALUES ('$myusername','$mypassword','$myemail','$myname','$mylastname')"); 
$insertdata->execute(); 
echo "success"; 

$DBH = null; 

这里是表格部分---------------------- --------

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<form name="register" method="post" action="insertnewmem.php"> 
<td> 
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> 
<tr> 
<td colspan="3"><strong>Registration Form </strong></td> 
</tr> 
<tr> 
<td width="78">Username</td> 
<td width="6">:</td> 
<td width="294"><input name="myusername" type="text" id="myusername" ></td> 
</tr> 
<tr> 
<td>Password</td> 
<td>:</td> 
<td><input name="mypassword" type="text" id="mypassword"></td> 
</tr> 
<tr> 
<td>Email</td> 
<td>:</td> 
<td><input name="myemail" type="text" id="myemail"></td> 
</tr> 
<tr> 
<td>First Name</td> 
<td>:</td> 
<td><input name="myname" type="text" id="myname"></td> 
</tr> 
<tr> 
<td>Last Name</td> 
<td>:</td> 
<td><input name="mylastname" type="text" id="mylastname"></td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td>&nbsp;</td> 
<td><input type="submit" name="Submit" value="Register"></td> 
</tr> 
</table> 
</td> 
</form> 
</tr> 
</table> 

UPDATED ---------------------------------- ------------

对不起,它跳过了函数returnBack(),只是插入到db,即使表格没有正确填充。

+2

“不正常工作”是什么意思?它错误吗?给你一个空白页面?没做什么?做点什么,但不是你期望的? – andrewsi 2012-08-15 21:15:40

+0

什么工作不正常?它只是不重定向,还是没有获取POST数据...? – 2012-08-15 21:17:30

+0

对不起------它忽略了(isset)并跳过了函数 – 2012-08-15 21:19:01

回答

7

尝试!empty()而不是isset()。只有当存在除null,false,0或空字符串之外的其他值时,才会评估为true。您可能有空字符串被提交。

+0

谢谢你工作完美! – 2012-08-15 21:21:07

+0

@DavidBiga没问题。如果解决方案为您工作,请将答案标记为正确。 – Ray 2012-08-15 21:24:13

4

其他人发布了答案,但让我解释为什么。 isset()检查是否设置了该值,而不是该值是什么,但只是如果它有一个值。当您提交表单时,您将传递一个空字符串作为每个输入的值。

通常我检查这个使用:

if(isset($_POST['variable']) && $_POST['variable'] !== "") 

,第一部分可以确保变量存在(这样第二个条件不会引发错误),第二个条件可以确保该字符串不为空。

+0

哦,非常感谢!我现在明白了@ Ray的工作和更少的代码:) – 2012-08-15 21:23:18

+0

Yah当然..我不知道如果变量不存在(@ _POST ['变量']从未设置),@ Ray的函数将工作,这就是为什么我通常在检查变量值之前检查isset(),但它可能已经内置了? – trevorkavanaugh 2012-08-15 21:28:01

+0

@trevorkavanaugh empty()首先检查是否设置了变量。 – Ray 2012-08-16 03:52:41