0
我在swift應用程序中遇到問題,每當我註冊一個新用戶登錄到我的系統時,該字符串被解析爲不同的東西例如,將用戶名存儲爲see data entry。php在mysql中存儲數據爲可選(" a ")而不是普通字符串
我不知道爲什麼它這樣做。這是我在Xcode SWIFT代碼:
let myURL = NSURL(string: "http://localhost:8888/userRegister.php");
let request = NSMutableURLRequest(URL: myURL!);
request.HTTPMethod = "POST";
let postString = "email=\(userEmail)&password=\(userPassword)";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if error != nil {
print("error=\(error)")
return
}
do{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary
if let parseJSON = json{
let resultValue = parseJSON["status"] as! String
print("result:\(resultValue)")
var isUserRegistered: Bool = false;
if(resultValue == "success"){
isUserRegistered = true;
}
var messageToDisplay:String = parseJSON["message"] as! String;
if (!isUserRegistered)
{
messageToDisplay = parseJSON["message"] as! String;
}
dispatch_async(dispatch_get_main_queue(), {
let myAlert = UIAlertController(title: "Alert", message: messageToDisplay, preferredStyle: UIAlertControllerStyle.Alert);
let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default){ action in
self.dismissViewControllerAnimated(true, completion: nil);
};
myAlert.addAction(okAction);
self.presentViewController(myAlert, animated: true, completion: nil);
}
)};
} catch { print(error)}
}
task.resume();
我的PHP文件(userRegister.php)
<?php
require("Conn.php");
require("MySQLDao.php");
$email = htmlentities($_POST["email"]);
$password = htmlentities($_POST["password"]);
$returnValue = array();
if(empty($email) || empty($password))
{
$returnValue["status"] = "error";
$returnValue["message"] = "Missing required field";
echo json_encode($returnValue);
return;
}
$dao = new MySQLDao();
$dao->openConnection();
$userDetails = $dao->getUserDetails($email);
if(!empty($userDetails))
{
$returnValue["status"] = "error";
$returnValue["message"] = "User already exists";
echo json_encode($returnValue);
return;
}
$secure_password = md5($password); // I do this, so that user password cannot be read even by me
$result = $dao->registerUser($email,$secure_password);
if($result)
{
$returnValue["status"] = "Success";
$returnValue["message"] = "User is registered";
echo json_encode($returnValue);
return;
}
$dao->closeConnection();
?>
最後mysqlDao.php文件,其中查詢存儲
<?php
class MySQLDao {
var $dbhost = null;
var $dbuser = null;
var $dbpass = null;
var $conn = null;
var $dbname = null;
var $result = null;
function __construct() {
$this->dbhost = Conn::$dbhost;
$this->dbuser = Conn::$dbuser;
$this->dbpass = Conn::$dbpass;
$this->dbname = Conn::$dbname;
}
public function openConnection() {
$this->conn = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this- >dbname);
if (mysqli_connect_errno())
echo new Exception("Could not establish connection with database");
}
public function getConnection() {
return $this->conn;
}
public function closeConnection() {
if ($this->conn != null)
$this->conn->close();
}
public function getUserDetails($email)
{
$returnValue = array();
$sql = "select * from users where username='" . $email . "'";
$result = $this->conn->query($sql);
if ($result != null && (mysqli_num_rows($result) >= 1)) {
$row = $result->fetch_array(MYSQLI_ASSOC);
if (!empty($row)) {
$returnValue = $row;
}
}
return $returnValue;
}
public function getUserDetailsWithPassword($email, $userPassword)
{
$returnValue = array();
$sql = "select id,username from users where username='" . $email . "' and password='" .$userPassword . "'";
$result = $this->conn->query($sql);
if ($result != null && (mysqli_num_rows($result) >= 1)) {
$row = $result->fetch_array(MYSQLI_ASSOC);
if (!empty($row)) {
$returnValue = $row;
}
}
return $returnValue;
}
public function registerUser($email, $password)
{
$sql = "insert into users set username=?, password=?";
$statement = $this->conn->prepare($sql);
if (!$statement)
throw new Exception($statement->error);
$statement->bind_param(ss, $email, $password);
$returnValue = $statement->execute();
return $returnValue;
}
}
?>
謝謝
看起來你的電子郵件和密碼字段是可選的,你應該在發佈之前將它們插入到字符串中時將它們解開包裝 – pbush25
輸出的$ _POST [「email」]是什麼?爲什麼要將電子郵件和密碼實體化(密碼應該散列)? – chris85
我看不到我的字段是可選的。你可以指出:pbush25 – user3423164