php - User class not returning duplicate emails as false in database -
i've made user class validates data passed through form , subsequently updates database table users. want add functionality such checking if username , email exists in table, i've acquired members of stackoverflow in order start building this, below code still allowing duplicate emails inserted database, don't sql error messages success message follows "1 row inserted." expect error message "email exists"
any helpful.
public function insert() { $result = $this->mysqli->prepare("select count(*) users email=?"); $result->bind_param("s", $_post['email']); $result->execute(); $result->bind_result($email_count); $result->close(); if ($email_count > 0) { echo "email exisits!"; } else { //escape post data added protection $username = isset($_post['username']) ? $this->mysqli->real_escape_string($_post['username']) : ''; $cryptedpassword = crypt($_post['password']); $password = $this->mysqli->real_escape_string($cryptedpassword); $name = isset($_post['name']) ? $this->mysqli->real_escape_string($_post['name']) : ''; $email = isset($_post['email']) ? $this->mysqli->real_escape_string($_post['email']) : ''; $stmt = $this->mysqli->prepare("insert users (username, password, name, email) values (?, ?, ?, ?)"); //var_dump($this->mysqli->error); $stmt->bind_param('ssss', $username, $password, $name, $email); // bind strings paramater /* execute prepared statement */ $stmt->execute(); printf("%d row inserted.\n", $stmt->affected_rows); /* close statement , connection */ $stmt->close(); } // end email_count , insert table } // end function
i have used ajax code attached below , worked me.... try if helpful....
ajax code-----------------
<script type="text/javascript"> $(document).ready(function() { // check username availability on focus lost $('#username').focusout(function() { if ($('#username').val()!='') { var username=$('#username').val(); $.ajax({ url: "/gtlqa/checkusernameavailability/checkavailability.html?username="+username, method:'get', success:function(data){ if(data!="available") { $('input:submit').attr("disabled", true); $("#usernameerrormessage").html("username exists"); } else { $("#usernameerrormessage").html("available"); $('input:submit').attr("disabled", false); } } }); } }); }); function checkavailability() { $.getjson("/checkusernameavailability", { username : $('#username').val() }, function(available) { if (available) { fieldvalidated("username", {valid : true}); $('input:submit').attr("disabled", false); } else { $('input:submit').attr("disabled", true); fieldvalidated("username", {valid : false, message : $('#username').val() + " not available"}); } }); } </script>
controller----------------
@requestmapping(value="checkavailability",method = requestmethod.get) public @responsebody string getavailability(@requestparam("username") string username) { system.out.println("username is"+username); boolean status=userservice.available(username); if(status) { return "available"; } else return "username exists"; }
you need call fetch
after that:
$result->bind_result($email_count); $result->close(); $result->fetch();//fecth $result->close(); //then if ($email_count > 0) { echo "email exisits!"; }
note no need use real_escape_string
prepared statement
Comments
Post a Comment