2012-05-23 203 views
0

我有以下函数,用文字说明并验证它们。如果它们有效,则将它们插入到数据库中。一旦插入,检查它们是否被成功插入。如果不返回false。如果电子邮件无效,首先返回false。 Eclipse + Aptana插件报告最后一个部分的语法错误。当我试图合理化代码时,它似乎应该正常运行。我可以确认所有{括号}的是在正确的等级秩序如果Else语句语法错误

下面是代码:

public function storeUser($name, $email, $password) { 
    $uuid = uniqid('', true); 
    $hash = $this->hashSSHA($password); 
    $encrypted_password = $hash["encrypted"]; // encrypted password 
    $salt = $hash["salt"]; // salt 
    if((filter_var($email, FILTER_VALIDATE_EMAIL)) && preg_match('/@.+\./', $email)); { //validate the email 
    $result = mysql_query("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())"); 

    // check for successful store 
    if ($result) { 
     // get user details 
     $uid = mysql_insert_id(); // last inserted id 
     $result = mysql_query("SELECT * FROM users WHERE uid = $uid"); 
     // return user details 
     return mysql_fetch_array($result); 
    } else { 
     return false; //unsuccessful store 
    } 
    else { //THIS IS LINE 45 
     //not a valid email 
     return false; 
    } 
    } 
} 

它返回以下错误:

05-23 11:07:10.758: E/JSON(1601): <b>Parse error</b>: syntax error, unexpected T_ELSE in <b>/home/content/40/8529140/html/webapps/projects/functions/DB_Functions.php</b> on line <b>45</b><br /> 
05-23 11:07:10.758: E/JSON Parser(1601): Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject 
+2

线45上有什么? – Neal

+0

在代码中看到我的评论 – KDEx

+2

你应该真的缩进你的代码 - 它有助于发现丢失或过时的括号。 – acme

回答

2

你的else声明对于右花括号是错误的。如果您在第二个else之前移动其中一个},它将起作用。其实也许不会,你也有一个流浪的;,但其他建议仍然存在。

如果您更加一致地缩进您的代码,您将不会被这类问题困扰。

public function storeUser($name, $email, $password) { 
    $uuid = uniqid('', true); 
    $hash = $this->hashSSHA($password); 
    $encrypted_password = $hash["encrypted"]; // encrypted password 
    $salt = $hash["salt"]; // salt 
    if (//validate the email 
     filter_var($email, FILTER_VALIDATE_EMAIL) && 
     preg_match('/@.+\./', $email) 
     ) { 
     $result = mysql_query (
      "INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())" 
     ); 
     if ($result) { // check for successful store 
      // get user details 
      $uid = mysql_insert_id(); // last inserted id 
      $result = mysql_query("SELECT * FROM users WHERE uid = $uid"); 
      // return user details 
      return mysql_fetch_array($result); 
     } else { 
      return false; //unsuccessful store 
     } 
    } else { 
     //not a valid email 
     return false; 
    } 
} 

另外:不要使用mysql_*函数。学习使用PDO和参数化查询。

+1

**不要**是一个强词:-P – Neal

+0

就缩进形式而言,好的建议,更多的常量可能会帮助我抓住它。 – KDEx

3
if((filter_var($email, FILTER_VALIDATE_EMAIL)) 
     && preg_match('/@.+\./', $email)); { //<<<REMOVE THE ; 
+0

@KDEx删除分号! – Neal

-2

你为什么最后有两块else {}块......?你只能有一个。

+2

有2个if语句。 – Neal

1

您没有正确关闭您的括号和你有外if后多余的分号:

if((filter_var($email, FILTER_VALIDATE_EMAIL)) && preg_match('/@.+\./', $email)) { //validate the email 
    $result = mysql_query("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())"); 

    // check for successful store 
    if ($result) { 
     // get user details 
     $uid = mysql_insert_id(); // last inserted id 
     $result = mysql_query("SELECT * FROM users WHERE uid = $uid"); 
     // return user details 
     return mysql_fetch_array($result); 
    } else { 
    return false; //unsuccessful store 
    } 
} // close of outer if 
else { 
    //not a valid email 
    return false; 
}  
+0

为什么downvote? – Tudor

+0

错误....在那之后有一个分号如果语句... – Neal

+0

@Neal:修正它,但他的外层如果没有正确关闭。 – Tudor

1

你看到的这一端小分号? if((filter_var($email, FILTER_VALIDATE_EMAIL)) && preg_match('/@.+\./', $email));

0

您错位了一个支架。试试这个

public function storeUser($name, $email, $password) { 
    $uuid = uniqid('', true); 
    $hash = $this->hashSSHA($password); 
    $encrypted_password = $hash["encrypted"]; // encrypted password 
    $salt = $hash["salt"]; // salt 
    if((filter_var($email, FILTER_VALIDATE_EMAIL)) && preg_match('/@.+\./', $email)) { //validate the email 
    $result = mysql_query("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())"); 

    // check for successful store 
    if ($result) { 
     // get user details 
     $uid = mysql_insert_id(); // last inserted id 
     $result = mysql_query("SELECT * FROM users WHERE uid = $uid"); 
     // return user details 
     return mysql_fetch_array($result); 
    } else { 
     return false; //unsuccessful store 
    } 
    } 
    else { 
     //not a valid email 
     return false; 
    } 

} 
+0

错误....在那之后有一个分号if if语句。 – Neal

+0

@Neal没看见。固定 – dInGd0nG

+0

你应该告诉OP你修好了什么。 – Neal