【问题标题】:isset() not working properly on formisset() 在表单上无法正常工作
【发布时间】:2012-08-15 21:14:47
【问题描述】:

我有一个用户提交的注册表单,使用 isset($_POST) 发送数据以查看是否有任何内容放入表单输入框中。如果不是,则将其发送到 else ,然后将其发送到一个函数,该函数将用户返回到注册表单以完成一些丢失的表单。由于某种原因,它无法正常工作。

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

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>

已更新 ----------------------------------------------

很抱歉,它跳过了函数 returnBack(),即使没有正确填写表单,也只是将其插入到数据库中。

【问题讨论】:

  • “无法正常工作”是什么意思?它会出错吗?给你一个空白页?没做什么?做某事,但不是你所期望的?
  • 什么工作不正常?它只是没有重定向,还是没有获取 POST 数据...?
  • 对不起 ------ 它忽略了 (isset) 并跳过了函数
  • 我觉得你使用 PDO 有点奇怪,但没有使用占位符和 ->bindParam() 或 ->bindValue()。您确定这可以保护您的数据库免受 sql 注入吗?
  • 嗯杯子我不知道。你有更好的解决方案吗?

标签: php


【解决方案1】:

尝试!empty() 而不是isset()。仅当存在除 null、false、0 或空字符串 '' 之外的其他内容时,这将评估为 true。您可能提交了空字符串。

【讨论】:

  • @DavidBiga 没问题。如果解决方案对您有用,请将答案标记为正确。
【解决方案2】:

其他人已经发布了答案,但让我解释一下原因。

isset() 检查是否设置了值,而不是检查值是什么,而只是检查它是否有值。当您提交表单时,您将传递一个空字符串作为每个输入的值。

通常我会使用:

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

第一部分确保变量存在(以便第二个条件不会抛出错误),第二个条件确保字符串不为空。

【讨论】:

  • 哦,非常感谢!我现在明白了@Ray 的工作和更少的代码:)
  • 是的,当然.. 如果变量不存在($_POST['variable'] 从未设置),我不知道@Ray 的函数将如何工作,这就是我通常检查 isset() 的原因在检查变量值之前,但它可能已经内置了?
  • @trevorkavanaugh empty() 首先检查他的变量是否已设置。
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 2011-09-20
  • 2016-03-11
  • 2017-05-23
  • 2019-05-18
  • 2013-04-29
  • 1970-01-01
  • 2012-11-18
相关资源
最近更新 更多