2013-02-19 61 views
0

我打算清理代码,并使其更多的OOP友好以后,但现在我努力让这个工作。我已经设法让它回声'嗨',但执行似乎没有把任何东西放入数据库,并没有给我任何错误。代码是问题与表格和PDO

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; 
    } 

} 

在此先感谢!

+0

这将是很好,让你的错误,它给你。我的直觉反应可能是像'用户'这样的列需要正确引用。 – 2013-02-19 03:10:06

+0

您是否启用了PDO :: ERRMODE_EXCEPTION报告? – mario 2013-02-19 03:10:26

+1

这里缺少逗号'密码first_name'。 – hjpotter92 2013-02-19 03:11:40

回答

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...