使用PHP / MySQL的注册页面不将用户值存储到数据库

时间:2014-03-19 13:01:57

标签: php html mysql

我正在开发一个用户注册和登录的网站,在完成页面配置后,我尝试注册它完美工作,然后第二天我尝试注册但页面没有加载,填写数据后,如果我点击提交,重新加载相同的注册页面,没有效果,如何解决这个问题

SQL查询处理代码:

<?php
class User
{
    public $user_active = 0;

    private $clean_email;
    public $status = false;

    private $clean_password;
    private $clean_username;
    private $unclean_username;
    public $sql_failure = false;

    public $mail_failure = false;

    public $email_taken = false;

    public $username_taken = false;

    public $activation_token = 0;

    function __construct($user, $pass, $email)
    {
        // Used for display only
        $this->unclean_username = $user;
        // Sanitize
        $this->clean_email = sanitize($email);
        $this->clean_password = trim($pass);
        $this->clean_username = sanitize($user);
        if (usernameExists($this->clean_username)) {
            $this->username_taken = true;
        }
        else if (emailExists($this->clean_email)) {
            $this->email_taken = true;
        }
        else {
            // No problems have been found.
            $this->status = true;
        }
    }
    public function userPieAddUser()

    {
        global $db, $emailActivation, $websiteUrl, $db_table_prefix;
        // Prevent this function being called if there were construction errors
        if ($this->status) {
            // Construct a secure hash for the plain text password
            $secure_pass = generateHash($this->clean_password);
            // Construct a unique activation token
            $this->activation_token = generateactivationtoken();
            // Do we need to send out an activation email?
            if ($emailActivation) {
                // User must activate their account first
                $this->user_active = 0;
                $mail = new userPieMail();
                // Build the activation message
                $activation_message = lang("ACTIVATION_MESSAGE", array(
                    "{$websiteUrl}/",
                    $this->activation_token
                ));
                // Define more if you want to build larger structures
                $hooks = array(
                    "searchStrs" => array(
                        "#ACTIVATION-MESSAGE",
                        "#ACTIVATION-KEY",
                        "#USERNAME#"
                    ) ,
                    "subjectStrs" => array(
                        $activation_message,
                        $this->activation_token,
                        $this->unclean_username
                    )
                );
                /* Build the template - Optional, you can just use the sendMail function
                Instead to pass a message. */
                if (!$mail->newTemplateMsg("new-registration.txt", $hooks)) {
                    $this->mail_failure = true;
                }
                else {
                    // Send the mail. Specify users email here and subject.
                    // SendMail can have a third parementer for message if you do not wish to build a template.
                    if (!$mail->sendMail($this->clean_email, "New User")) {
                        $this->mail_failure = true;
                    }
                }
            }
            else {
                // Instant account activation
                $this->user_active = 1;
            }
            if (!$this->mail_failure) {
                // Insert the user into the database providing no errors have been found.
                $sql = "INSERT INTO `" . $db_table_prefix . "users` (
                        `username`,
                        `username_clean`,
                        `password`,
                        `email`,
                        `activationtoken`,
                        `last_activation_request`,
                        `LostpasswordRequest`, 
                        `active`,
                        `group_id`,
                        `sign_up_date`,
                        `last_sign_in`
                        )
                        VALUES (
                        '" . $db->sql_escape($this->unclean_username) . "',
                        '" . $db->sql_escape($this->clean_username) . "',
                        '" . $secure_pass . "',
                        '" . $db->sql_escape($this->clean_email) . "',
                        '" . $this->activation_token . "',
                        '" . time() . "',
                        '0',
                        '" . $this->user_active . "',
                        '1',
                        '" . time() . "',
                        '0'
                        )";
                return $db->sql_query($sql);
            }
        }
    }
}
?>

注册处理的Config.php文件

<?php
if (is_dir("install/")) {
    header("Location: install/");
    die();
}
require_once ("settings.php");

// Dbal Support - Thanks phpBB ; )
require_once ("db/" . $dbtype . ".php");

// Construct a db instance
$db = new $sql_db();
if (is_array($db->sql_connect($db_host, $db_user, $db_pass, $db_name, $db_port, false, false))) {
    die("Unable to connect to the database");
}
if (!isset($language)) $langauge = "en";
require_once ("lang/" . $langauge . ".php");

require_once ("class.user.php");

require_once ("class.mail.php");

require_once ("funcs.user.php");

require_once ("funcs.general.php");

require_once ("class.newuser.php");

session_start();
// Global User Object Var
// loggedInUser can be used globally if constructed
if (isset($_SESSION["userPieUser"]) && is_object($_SESSION["userPieUser"])) $loggedInUser = $_SESSION["userPieUser"];
else if (isset($_COOKIE["userPieUser"])) {
    $db->sql_query("SELECT session_data FROM " . $db_table_prefix . "sessions WHERE session_id = '" . $_COOKIE['userPieUser'] . "'");
    $dbRes = $db->sql_fetchrowset();
    if (empty($dbRes)) {
        $loggedInUser = NULL;
        setcookie("userPieUser", "", -parseLength($remember_me_length));
    }
    else {
        $obj = $dbRes[0];
        $loggedInUser = unserialize($obj["session_data"]);
    }
}
else {
    $db->sql_query("DELETE FROM " . $db_table_prefix . "sessions WHERE " . time() . " >=   (session_start+" . parseLength($remember_me_length) . ")");
    $loggedInUser = NULL;
}
?>

注册页面PHP代码

<?php
require_once ("models/config.php");

// Prevent the user visiting the logged in page if he/she is already logged in
if (isUserLoggedIn()) {
    header("Location: index.php");
    die();
}
/*
Below is a very simple example of how to process a new user.
Some simple validation (ideally more is needed).

The first goal is to check for empty / null data, to reduce workload here we    let the user class perform it's own internal checks, just in case they are missed.
*/
// Forms posted
if (!empty($_POST)) {
    $errors = array();
    $email = trim($_POST["email"]);
    $username = trim($_POST["username"]);
    $password = trim($_POST["password"]);
    $confirm_pass = trim($_POST["passwordc"]);
    // Perform some validation
    // Feel free to edit / change as required
    if (minMaxRange(5, 25, $username)) {
        $errors[] = lang("ACCOUNT_USER_CHAR_LIMIT", array(
            5,
            25
        ));
    }
    if (minMaxRange(8, 50, $password) && minMaxRange(8, 50, $confirm_pass)) {
        $errors[] = lang("ACCOUNT_PASS_CHAR_LIMIT", array(
            8,
            50
        ));
    }
    else if ($password != $confirm_pass) {
        $errors[] = lang("ACCOUNT_PASS_MISMATCH");
    }
    if (!isValidemail($email)) {
        $errors[] = lang("ACCOUNT_INVALID_EMAIL");
    }
    // End data validation
    if (count($errors) == 0) {
        // Construct a user object
        $user = new User($username, $password, $email);
        // Checking this flag tells us whether there were any errors  such as possible data duplication occured
        if (!$user->status) {
            if ($user->username_taken) $errors[] = lang("ACCOUNT_USERNAME_IN_USE", array(
                $username
            ));
            if ($user->email_taken) $errors[] = lang("ACCOUNT_EMAIL_IN_USE", array(
                $email
            ));
        }
        else {
            // Attempt to add the user to the database, carry out finishing  tasks like emailing the user (if required)
            if (!$user->userPieAddUser()) {
                if ($user->mail_failure) $errors[] = lang("MAIL_ERROR");
                if ($user->sql_failure) $errors[] = lang("SQL_ERROR");
            }
        }
    }
    if (count($errors) == 0) {
        if ($emailActivation) {
            $message = lang("ACCOUNT_REGISTRATION_COMPLETE_TYPE2");
        }
        else {
            $message = lang("ACCOUNT_REGISTRATION_COMPLETE_TYPE1");
        }
    }
}
?>

HTML注册表单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>
      Registration | 
      <?php echo $websiteName; ?>

    </title>
    <?php require_once("head_inc.php"); ?>
  </head>
  <body>
    <div class="modal-ish">
      <div class="modal-header">
        <h2>
          Sign Up
        </h2>
      </div>
      <div class="modal-body">

        <div id="success">

          <p>
            <?php echo $message ?>
          </p>

        </div>

        <div id="regbox">
          <form name="newUser" action="
<?php echo $_SERVER['PHP_SELF'] ?>
"  method="post">

  <p>
    <label>
      Username:
    </label>
    <input type="text" name="username" />
  </p>

  <p>
    <label>
      Password:
    </label>
    <input type="password" name="password" />
  </p>

  <p>
    <label>
      Re-type Password:
    </label>
    <input type="password" name="passwordc" />
  </p>

  <p>
    <label>
      Email:
    </label>
    <input type="text" name="email" />
  </p>

                  </div>

                </div>



                <div class="modal-footer">
                  <input type="submit" class="btn btn-primary" name="new" id="newfeedform" value="Register" />
                </div>


                 </form>
                 </div>

                 <div class="clear">
                 </div>
                 <p style="margin-top:30px; text-align:center;">
                   <a href="login.php">
                     Login
                   </a>
                   / 
                   <a href="forgot-password.php">
                     Forgot Password?
                   </a>
                   / 
                   <a href="
<?php echo $websiteUrl; ?>
">
  Home Page
               </a>
                 </p>

               </body>
</html>

1 个答案:

答案 0 :(得分:0)

在您的html文件中,删除标记action的{​​{1}}属性或使用form。 Donot使用action = "",因为它很容易从您的页面运行额外的脚本。 除此之外,将检查代码。尽可能尝试使用$_SERVER[PHP_SELF]echo来检查导致问题的部分。使用print_r检查db是否在SQL中返回错误。