0

我计划清理代码,并在以后使它对 OOP 更友好,但现在我正在努力让它工作。我已经设法让它回显“嗨”,但执行似乎没有将任何内容放入数据库,也没有给我任何错误。代码是

public function newAccount(array $data) {
    $error = NULL;
    //Check first name length, and make sure its over 2 characters
    if (strlen($data['fname']) > 2) {
        $fname = $data['fname'];
    }
    else  {
        $fname = FALSE;
        $error .= "Please put in a valid First Name. <br />";
    }

    //Check if last name length is over 2 characters
    if (strlen($data['lname']) > 2) {
        $lname = $data['lname'];
    }
    else {
        $lname = FALSE;
        $error .= "Please enter a valid Last Name. <br />";
    }

    // Check username
    if (strlen($data['user']) > 3) {
          $user = $data['user'];
    }
    else {
        $user = FALSE;
        $error .= "Username must be longer than 3 characters.<br />";
    }

    // Mske sure password is atleast 6 characters, and retyped correctly
    if (strlen($data['pass']) > 5) {
        if ($data['pass'] == $data['repass']) {
            $pass = $data['pass'];
        }
        else {
            $pass = FALSE;
            $error .= "Passwords do not match.<br />";
        }
    }
    else {
        $pass = FALSE;
        $error .= "Password must be longer than 6 characters.";
    }

    //make sure email looks correct, strpos makes sure there is an '@'
    if (strlen($data['email']) > 5 && strpos($data['email'], '@')) {
        $email = $data['email'];
    }
    else {
        $email = FALSE;
        $error .= "Please enter a valid email. <br />";
    }
    // Check if user is suppose to be admin
    if (isset($data['admin'])) {
        $admin = '1';
    }
    else {
        $admin = '0';
    }

    if ($fname && $lname && $user && $pass && $email) {
        echo 'hi';
        try {
        $sth = $this->dbc->prepare("INSERT INTO users(user, password first_name, last_name, email, admin) VALUES(:user, MD5(:pass), :fname, :lname, :email, :admin)");

        $sth->execute(array(":user" => $user,
                            ":pass" => $pass,
                            ":fname" => $fname,
                            ":lname" => $lname,
                            ":email" => $email,
                            ":admin" => $admin)
                     );
        }
        catch (PDOException $e) {
            echo $e->getMessage();
        }

    }
    else {
        echo "Error" . $error;
    }

}

提前致谢!

4

1 回答 1

1

在您的插入查询中,您在密码字段后缺少逗号。

它应该是

$sth = $this->dbc->prepare("INSERT INTO
    users(user, password, first_name, last_name, email, admin)
    VALUES(:user, MD5(:pass), :fname, :lname, :email, :admin)");

此外,当输入测试字符串是否为电子邮件地址时,请使用filter_var(). 像这样:

if( filter_var($data['email'], FILTER_VALIDATE_EMAIL) { 
    //do this...
于 2013-02-19T03:15:44.177 回答