PDO用户类不会获得发布数据

I've tried everything I know but it's still not working. I cannot get any posted data from my HTML form and I know it's not getting the data from the HTML form because I've tried to change the values and execute without the form and then it works.

Here is my html form:

<?php

ob_start();
session_start();

error_reporting(E_ALL);
if (!ini_get('display_errors')) { ini_set('display_errors', '1');}

include 'classes/user.class.php';
include 'classes/database.class.php';
include 'classes/config.class.php';
include 'classes/bcrypt.class.php';

if(isset($_POST['submitted'])) {
$user = new MonetizeMedia\Classes\User;
$db = new MonetizeMedia\Classes\Database;

$username = $_POST['username'];
$password = $_POST['password'];

$user->username = $username;
$user->password = $password;


if($user->createUser()) {
    echo "DONE!";
}
else
{   
    echo "<br />An error occured while creating your account. Please try later.";
    return;
}

}

?>
<!DOCTYPE html>
<html>
<head>

<meta charset="UTF-8" />

<title>Register</title>

</head>
<body>

<form method="post" action="">
<ul>
<li>
<label for="usn">Username : </label>
<input type="text" name="username" />
</li>

<li>
<label for="passwd">Password : </label>
<input type="password" name="password" />
</li>

<li class="buttons">
<input type="submit" name="submitted" value="Register" />
</li>

</ul>
</form>

</body>
</html>

my user class

<?php

namespace MonetizeMedia\Classes;

class User {
private $uid;
private $fields;

public function __construct() {
    $this->uid = null;
    $this->fields = array('username' => '',
                          'password' => '');
}

public function __get($field) {
    if($field == 'uid')
    {
        return $this->uid;
    }
    else
    {
        return $this->fields[$field];
    }
}

public function __set($field, $value) {
    if(array_key_exists($field, $this->fields))
    {
        $this->fields[$field] = $value;
    }
}

public function validateUsername($username) {
    return preg_match('/^[a-zA-Z]{4,15}$/i', $username);
}

public function validateEmailAddr($email) {
    return preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email);     
}

public function getUserById($id) {
    $user = new \MonetizeMedia\Classes\User;
    $db = new \MonetizeMedia\Classes\Database;

    $sql = "SELECT * FROM users WHERE uid = :uid";
    $db->prepare($sql);
    $db->bindParam(":uid", $id);
    $row = $db->fetchAll();

    $user->uid = $row['uid'];
    $user->username = $row['username'];
    $user->password = $row['password'];
    return $user; 
}

public function getByUsername($username) {
    $user = new \MonetizeMedia\Classes\User;
    $db = new \MonetizeMedia\Classes\Database;

    $sql = "SELECT * FROM users WHERE username = :username";
    $db->prepare($sql);
    $db->bindParam(":username", $username);
    $row = $db->fetchAll();

    $user->uid = $row['uid'];
    $user->username = $row['username'];
    $user->password = $row['password'];
    return $username;
}

public function createUser() {
    try {

    $username = null;
    $password = null;

    $db = new \MonetizeMedia\Classes\Database();    
    $bcrypt = new \MonetizeMedia\Classes\Bcrypt(15);

    /*** query ***/
    $sql = 'INSERT INTO users(username, password) VALUES(:username, :password)';

    /*** prepare the select statement ***/
    $db->prepare($sql);

    /*** bind the parameters ***/
    $db->bindParam(":username", $username);
    $db->bindParam(":password", $bcrypt->hash($password));
    //$db->bindParam(":username", "test");
    //$db->bindParam(":password", $bcrypt->hash("test"));

    /*** execute the prepared statement ***/
    $db->execute();

    $result = $db->fetchAll();

    return $result;

    } catch ( \PDOException $e ) {
        return $e->getMessage();
    }

}


}

?>

Here is my database class:

<?php

namespace MonetizeMedia\Classes;
use PDO;

class Database {
private $db = array();
private $dbh;
private $error;
private $stmt;


public function __construct() {
    $Config = new \MonetizeMedia\Classes\Config;
    $this->db['username'] = $Config->DB_USERNAME;
    $this->db['password'] = $Config->DB_PASSWORD;
    $this->db['database'] = $Config->DB_DATABASE;
    $this->db['server']   = $Config->DB_SERVER;
    $this->db['port']     = $Config->DB_PORT;
    $this->db['encoding'] = $Config->DB_ENCODING;

    try {
        /* Create a connections with the supplied values */
        $this->dbh = new \PDO("mysql:host={$this->db['server']};dbname={$this->db['database']};port={$this->db['port']};charset={$this->db['encoding']}", $this->db['username'], $this->db['password']);
        $this->dbh->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); // throw exceptions on errors (default: stay silent) 
        $this->dbh->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false); // important! use actual prepared statements (default: emulate prepared statements) 
        $this->dbh->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_CLASS); // fetch associative arrays (default: mixed arrays) 
        $this->dbh->setAttribute(\PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8" ); // set encoding to utf8
        } catch( \PDOException $e ) {
        /* If any errors echo the out and kill the script */
        echo "<center><b>[DATABASE] Error - Connection Failed:</b> " . $this->error = $e->getMessage() . "<br/><br/><br/></center>";
        echo "<center><b>We are currently experiencing technical difficulties. We have a bunch of monkeys working really hard to fix the problem.</b></center>";
        die();
        }   
}

public function prepare($sql) {
    try {
        $this->stmt = $this->dbh->prepare($sql);
    } catch ( \PDOException $e ) {
        $e->getMessage();
        // throw new InvalidSQLException("Invalid SQL. Statement could not be prepared.");
    }

}

public function bindParam($param, $value, $type = null) {
    if (is_null($type)) {
        switch (true) {
            case is_int($value):
                $type = PDO::PARAM_INT;
                break;
            case is_bool($value):
                $type = PDO::PARAM_BOOL;
                break;
            case is_null($value):
                $type = PDO::PARAM_NULL;
                break;
            default:
                $type = PDO::PARAM_STR;
                break;
        }
    }
    return $this->stmt->bindParam($param, $value, $type);
}

public function execute() {
    try {
        return $this->stmt->execute();
        } catch ( \PDOException $e ) {
            $e->getMessage();
        }

}

public function fetchAll() {
    $this->execute();
    return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}

public function fetch() {
    $this->execute();
    return $this->stmt->fetch(PDO::FETCH_ASSOC);
}

public function rowCount() {
    return $this->stmt->rowCount();
}

public function lastInsertId() {
    return $this->dbh->lastInsertId();
}

public function beginTransaction() {
    return $this->dbh->beginTransaction();
}

public function endTransaction() {
    return $this->dbh->commit();
}

public function cancelTransaction() {
    return $this->stmt->rollBack();
}

public function debugDumpParams() {
    return $this->stmt->debugDumpParams();
}

public function errorInfo() {
    return $this->dbh->errorInfo();
}

public function countAll($arr) {
    return count($arr);
}


}

?>

I've been sitting with this problem for more than 10 hours without a proper solution.

What exactly is not working? Anyways, you should rewrite your createUser method:

$username = null;
$password = null;