PDO查询未插入数据库

时间:2016-03-16 09:26:19

标签: php

创建以下代码以在我的网站中注册用户。当我尝试注册用户时,正在执行“查询”,但未显示数据库中的新记录。

以下代码是注册表格:

<div class="row">
 <div class="col-lg-8 col-lg-offset-2">
    <div class="page-header">
        <h2>Register Now</h2>

    </div>
    <div>
    <form id="defaultForm" method="post" name="registerform" class="form-horizontal" action="index.php">
        <div class="form-group">
            <div class="col-lg-11">
                <?php include('include/showErrors.php'); ?>
            </div>
        </div>
        <div class="form-group">
            <label class="col-lg-3 control-label">Username</label>
            <div class="col-lg-5">
                <input type="text" class="form-control" name="username" autocomplete="off" />
            </div>
        </div>

        <div class="form-group">
            <label class="col-lg-3 control-label">Email address</label>
            <div class="col-lg-5">
                <input type="email" class="form-control" name="email" autocomplete="off" />
            </div>
        </div>

        <div class="form-group">
            <label class="col-lg-3 control-label">Password</label>
            <div class="col-lg-5">
                <input type="password" class="form-control" name="password" autocomplete="off" />
            </div>
        </div>

        <div class="form-group">
            <label class="col-lg-3 control-label">Age</label>
            <div class="col-lg-5">
                <input type="text" class="form-control" name="age" autocomplete="off" />
            </div>
        </div>

        <div class="form-group">
            <label class="col-lg-3 control-label">Sex</label>
            <div class="col-lg-5">
                <input type="text" class="form-control" name="sex" autocomplete="off" />
            </div>
        </div>


        <div class="form-group">
            <label class="col-lg-3 control-label">Country</label>
            <div class="col-lg-5">
                <input type="text" class="form-control" name="country" autocomplete="off" />
            </div>
        </div>

        <div class="form-group">
            <div class="col-lg-8 col-lg-offset-3">
                <button name="Submit" type="submit" class="btn btn-primary">Sign up</button>
            </div>
        </div>
        <br>
    </form>
  </div>
</div>

以下是doRegister用户:

class Registration
{
    private $dbCon = null;
    public $regSuccessful = false;
    public $verificationSuccess = false;
    public $errors = array();
    public $messages = array();


    //the below function will automaticcaly start when a obejct of this class is created
    public function __construct()
    {
        //session_start();
        if(isset($_POST["Submit"]))
        {
            $this->registerUser($_POST['username'], $_POST['password'],$_POST['email'],$_POST['age'],$_POST['sex'],$_POST['country']);
        }
        else if (isset($_GET["id"]) && isset ($_GET["verification_code"]))
        {
            $this->verifyUser($_GET["id"], $_GET["verification_code"]);
        }
    }

    //the following methods checks if a database connection is open or not
    private function dbConnection()
    {
        if($this->dbCon != null)
        {
            return true;
        }
        else 
        {
            //create database connection
            try
            {
                $this->dbCon = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME . ';charset=utf8', DB_USER, DB_PASS);
                return true;
            } catch (PDOException $ex) {
                $this->errors[] = MESSAGE_DATABASE_ERROR;
                return false;
            }
        }
    }

    //the following method will handle and the registration errors
    private function registerUser($username,$password,$email,$age, $sex,$country)
    {
        //this will remove extra spaces
        $username = trim($username);
        $email = trim($email);
        $sex = trim($sex);
        $country = trim($country);


        if(empty($username))
        {
            $this->errors[] = MESSAGE_USERNAME_EMPTY;
        }
        else if(empty($password))
        {
            $this->errors[] = MESSAGE_PASSWORD_EMPTY;
        }
        else if(empty($country))
        {
            $this->errors[] = MESSAGE_COUNTRY_EMPTY;
        }
        else if(empty($sex))
        {
            $this->errors[] = MESSAGE_SEX_EMPTY;
        }
        else if(empty($age))
        {
            $this->errors[] = MESSAGE_AGE_EMPTY;
        }
        else if(strlen($password) < 6)
        {
            $this->errors[] = MESSAGE_PASSWORD_TOO_SHORT;
        }
        elseif (strlen($username) > 64 || strlen($username) < 2) 
        {
            $this->errors[] = MESSAGE_USERNAME_BAD_LENGTH;
        }
        elseif (!preg_match('/^[a-z\d]{2,64}$/i', $username)) {
            $this->errors[] = MESSAGE_USERNAME_INVALID;
        } elseif (!preg_match('/^[a-z\d]{2,64}$/i', $country)) {
            $this->errors[] = MESSAGE_COUNTRY_INVALID;
        }
         elseif (!preg_match('/^[a-z\d]{2,64}$/i', $sex)) {
            $this->errors[] = MESSAGE_SEX_INVALID;
        }
        elseif (empty($email)) {
            $this->errors[] = MESSAGE_EMAIL_EMPTY;
        } elseif (strlen($email) > 64) {
            $this->errors[] = MESSAGE_EMAIL_TOO_LONG;
        } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $this->errors[] = MESSAGE_EMAIL_INVALID;

    }else if ($this->dbConnection())
    {
        // check if username or email already exists
            $check_user_name = $this->dbCon->prepare('SELECT username, email FROM tbl_users WHERE username=:username OR email=:email');
            $check_user_name->bindValue(':username', $username, PDO::PARAM_STR);
            $check_user_name->bindValue(':email', $email, PDO::PARAM_STR);
            $check_user_name->execute();
            $result = $check_user_name->fetchAll();

            // if username or/and email find in the database
            // TODO: this is really awful!
            if (count($result) > 0) {
                for ($i = 0; $i < count($result); $i++) {
                    $this->errors[] = ($result[$i]['username'] == $username) ? MESSAGE_USERNAME_EXISTS : MESSAGE_EMAIL_ALREADY_EXISTS;
                }
            } else {
                // check if we have a constant HASH_COST_FACTOR defined (in config/hashing.php),
                // if so: put the value into $hash_cost_factor, if not, make $hash_cost_factor = null
                //$hash_cost_factor = (defined('HASH_COST_FACTOR') ? HASH_COST_FACTOR : null);

                //the following will encrypt users password with the PHP 5.5's hash function
                //$userPassHash = password_hash($password, PASSWORD_BCRYPT);

//                $userPassHash = password_hash( $password, PASSWORD_BCRYPT, array(
//                    'cost' => 12
//                ));
                //this will generate a random hash for email verification
                $user_activation_hash = sha1(uniqid(mt_rand()), true);

                //the following will write a new user data into the database
                $queryUserInsert = $this->dbCon->prepare('INSERT INTO tbl_users (username, password, email, user_activation_hash, user_registration_ip, user_registration_datetime,age,sex,country) VALUES (:username, :userPassHash, :email, :user_activation_hash, :user_registration_ip, now()), :age, :sex, :country');
                $queryUserInsert->bindValue(':username', $username, PDO::PARAM_STR);
                $queryUserInsert->bindValue(':userPassHash', $password, PDO::PARAM_STR);
                $queryUserInsert->bindValue(':email', $email, PDO::PARAM_STR);
                $queryUserInsert->bindValue(':user_activation_hash', $user_activation_hash, PDO::PARAM_STR);
                $queryUserInsert->bindValue(':user_registration_ip', $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
                $queryUserInsert->bindValue(':age', $age, PDO::PARAM_STR);
                $queryUserInsert->bindValue(':sex', $sex, PDO::PARAM_STR);
                $queryUserInsert->bindValue(':country', $country, PDO::PARAM_STR);
                $queryUserInsert->execute();

                //id of the new user registered
                //$user_id = $this->dbCon->lastInsertId();


                //checks if the query was succesfull, and send verification email
                if($queryUserInsert)
                {
                   $this->messages[] = MESSAGE_REGISTRATION_ACTIVATION_SUCCESSFUL;
                }
                else
                {
                    $this->errors[] = MESSAGE_REGISTRATION_FAILED;
                }
            }

    }


}


}

数据库截图:

enter image description here

2 个答案:

答案 0 :(得分:0)

使用此插入查询:

$queryUserInsert = $this->dbCon->prepare('INSERT INTO tbl_users (username, password, email, user_activation_hash, user_registration_ip, user_registration_datetime,age,sex,country) VALUES (:username, :userPassHash, :email, :user_activation_hash, :user_registration_ip, now(), :age, :sex, :country)');

您在查询中)函数后添加了额外的now();把它放在:country

之后

答案 1 :(得分:0)

更改

$queryUserInsert = $this->dbCon->prepare('INSERT INTO tbl_users (username, password, email, user_activation_hash, user_registration_ip, user_registration_datetime,age,sex,country) VALUES (:username, :userPassHash, :email, :user_activation_hash, :user_registration_ip, now()), :age, :sex, :country');
                                                                                                                                                                                                                                                                                ^ Extra Closing Bracket ^ Closing Bracket For VALUES missing 

$queryUserInsert = $this->dbCon->prepare('INSERT INTO tbl_users (username, password, email, user_activation_hash, user_registration_ip, user_registration_datetime,age,sex,country) VALUES (:username, :userPassHash, :email, :user_activation_hash, :user_registration_ip, now(), :age, :sex, :country)');
  1. now()
  2. 中的额外结束括号
  3. 没有为VALUES关闭括号。
相关问题