post-redirect-get并将双条目发布到数据库中

时间:2011-07-30 10:12:10

标签: php post redirect get double

我目前正在为学校的最后一年做一个网络应用项目。我更像是一个网页设计师,而不是一个网络开发者,所以我需要尽可能多的帮助!

对于我的项目,我创建了一个非常类似于博客网站的网站。

我想要实现的第一个函数在用户注册时运行,我想要signUp.php(html form)/ doSignUp.php(php将数据发布到数据库)以防止用户使用已经存在的用户名数据库中。

  

例如,database有username =“happy”。 User1填写表格   用户名中的signUp.php填写“happy”并将表单提交到   doSignUp.php。 doSignUp.php检查数据库是否   username =“happy”在里面。如果它在里面,它将不会发布数据   再次进入内部,以防止双重进入,而是REDIRECT回到   signUp.php并通知用户“用户名是   在使用“。

对于第一个函数,我有以下想法:

    $selectUser = executeSelectQuery("SELECT username FROM user WHERE username="$username")
if ($selectUser==0) {
    $doRegister = executeInsertQuery("INSERT INTO user (Name,Username, Email,
            Password, DOB_Date, DOB_Month, DOB_Year, Gender,admin, Country) VALUES
            ('$Name','$Username','$Email',SHA1('$Password'),'$DOB1','$DOB2','$DOB3','$Gender','$role' ,
            '$Country')");
} else {
<// redirect codes here to signUp.php with message "user name is in used">
}

我要实现的第二个函数涉及login.php(登录表单),doLogin.php(检查发布的数据是否与登录表单中输入的数据匹配)和memberPage.php(如果他是,则将用户重定向到memberPage)成员并为他创建一个会话,否则重定向到login.php,如果他不是向他显示某些消息的成员)。

至于第二个函数,我真的不知道如何为我的登录实现post-redirect-get方法。我尝试使用谷歌进行演示尝试,但无济于事。如果可以的话请帮忙!提前致谢:D

2 个答案:

答案 0 :(得分:0)

要重定向的代码:

header("Location: signUp.php?message=" . urlencode("user name is in use"));

在signUp.php中,要打印错误,请打印$_GET['message']

答案 1 :(得分:0)

在您的情况下,使用header()函数重定向到您的注册显示页面(signUp.php)并显示一条消息将起作用,但是我经常不鼓励这种多文件尝试进行表单处理。<登记/> 更吸引人的东西(至少对我来说)是将处理逻辑放在显示表单的文件的顶部。这个逻辑需要包装在支票中,以确保表格已经提交。如果出现任何问题,它会将错误存储在稍后可能在文件中显示的变量中。看一下这个例子:

<?php
if($_POST['submit'] == 'Submit') {
    if(!$userNameIsUnique) { //Mysql Processing - duplicate check here
        $message = "Username has already been used.";
    }
    //Check other fields for duplicates or invalid data
    if(!isset($message)) {
        //Form submit successful send info to data
        mail(); //Send confirmation email
        die('Check your email to verify your account!'); //Display success message
    }
}
?>
<html>
<head><title>Signup</title></head>
<body>
    <?php if(isset($message)) echo '<p>'.$message.'</p>'; ?>
    <form action="" method="post">
        <input name="username" />
        <input type="submit" name="submit" value="Submit" />
    </form>
</body>
</html>

在这种情况下,您仍然可以将视图和控制器逻辑(包含文件包含)分开,但是当有一个文件时,您可以避免使用两个文件并强制执行两个请求(一个用于表单提交,另一个用于重定向到表单)输入错误。