-1

我不知道逻辑上哪里出错了......我想通过 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>";
    }

?>
4

2 回答 2

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;
}
于 2012-08-18T20:22:28.380 回答
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. 使用您创建的变量,例如$emailand $contact,而不是重新调用$_POST变量 - 它们是更清晰、更短的变量名称。
  4. 使用更好的MySQLi 库,而不是 MySQL 库。
  5. 在脚本开始时创建一个到数据库的连接 ( $con = ...),以后不要再创建第二个,就像您在此处所做的那样。
  6. 明确指定您的查询正在针对哪个连接运行 - 您说$q2=mysql_query("SELECT ...")但您也应该传递您构建的连接, $q2=mysql_query("SELECT ...",$con).
于 2012-08-18T20:35:59.123 回答