如果在PHP中阻塞了

时间:2012-08-18 20:16:29

标签: php validation if-statement block login-script

如果逻辑错误,我不知道我在哪里出错了... 我想通过3个步骤验证此注册脚本:

1st:检查是否有任何字段为空,在这种情况下包括errorreg.php和register.php。

第二:如果电子邮件已经存在,请包括register.php。

第三:如果一切顺利,请将数据插入数据库。

<?php
    $address =$_POST["add"];
    $password =$_POST["pw"];
    $firstname =$_POST["fname"];
    $lastname =$_POST["lname"];
    $email =$_POST["email"];
    $contact =$_POST["cno"];


    $con=mysql_connect("localhost","root","");
    mysql_select_db("bookstore");
    $q2=mysql_query("select * from customer where email='$email'");
    $b=mysql_fetch_row($q2);
    $em=$b[0];

   if($password != $_POST['pwr'] || !$_POST['email'] || !$_POST["cno"] || !$_POST["fname"] || !$_POST["lname"] || !$_POST["add"])
    {
        include 'errorreg.php';
        include 'register.php';
    }

    else if($em==$email)
    {
        echo 'email already present try another';
        include 'register.php';
    }
    else
    {
        $con=mysql_connect("localhost","root","");
        mysql_select_db("bookstore");
        $q1=mysql_query("insert into customer values('$email','$password','$firstname','$lastname','$address',$contact)");

        echo 'query completed';
        $q2=mysql_query("select * from customer where email='$email'");
        $a=mysql_fetch_row($q2);
        print "<table border =2px solid red> <tr><th>id </th></tr>";
        print "<td>$a[0]</td>";

        print "</table>";
        include 'sucessreg.php';
        echo " <a href='newhome.php'>goto homepage</a>";
    }

?>

2 个答案:

答案 0 :(得分:1)

首先,您要检查$ _POST对象中是否设置了属性:

if(isset($_POST["name"])

第二,你要检查值集是否为空

if(isset($_POST["name"] && !empty($_POST["name"]))

现在你只需要扩大它以检查所有属性,将它移动到这样的函数中会很方便

function ispostset($post_var)
{
if (isset($_POST[$post_var]))
{
    if ($_POST[$post_var] != '')
    {
        return true;
    }
    else
        return false;
}
else
    return false;
}

答案 1 :(得分:1)

这里有很多要纠正的地方,但是你特别关注的是,“循环”没有继续进行第二和第三个“步骤”,那是因为你正在考虑这个错误。在if / else if / else代码块中,一次只执行一个块,而其他块则不执行。例如,如果用户提交了一个号码,我们可以通过以下方式告诉他们它是偶数还是奇数:

if($_GET['number'] % 2 == 0){
  echo "That's even!";
} else {
  echo "That's odd!";
}

您正在尝试进行一次检查,然后进行另一次检查,然后进行第三次检查。在这种情况下,你想嵌套你的条件(if语句),而不是让它们一个接一个地出现,如下所示:

if(/* first, basic sanity check*/) {
  if(/* second, more complex check */) {
    if(/* final check */) {
      // Database update
    } else {
      // Failed final check
    }
  } else {
    // Failed second check
  }
} else {
  // Failed basic check
}

您的代码的其他一些评论:

  1. 注意格式化 - 以一致且视觉上清晰的模式布置代码将有助于更容易地查看何时出错。
  2. 在使用isset($_POST['variable'])之前使用$_POST['variable'],否则您将收到错误消息。一个想法是使用如下行:$address = isset($_POST['address']) ? $_POST["add"] : ''; - 如果您不知道该表示法,则可以将$address设置为$_POST数组中的值或''如果它没有设置。
  3. 使用您创建的变量,例如$email$contact,而不是重新调用$_POST变量 - 它们是更清晰,更短的变量名称。
  4. 使用更好的MySQLi library,而不是MySQL库。
  5. 在脚本开头为您的数据库创建一个连接($con = ...),稍后不要像在此处那样创建第二个连接。
  6. 明确指定运行查询的连接 - 您说$q2=mysql_query("SELECT ...")但是您也应该传递您构建的连接, $q2=mysql_query("SELECT ...",$con)