Php 创建用户登录/注册页面时,如何将iOS应用程序与数据库连接?
我正在进行一个学校项目,以构建一个类似instagram的应用程序,我们要做的第一件事是创建一个用户登录和注册页面。我的队友创建了一个数据库,但我在连接他的数据库时遇到问题 以下是我在网上找到的源代码():Php 创建用户登录/注册页面时,如何将iOS应用程序与数据库连接?,php,ios,mysql,xcode,swift,Php,Ios,Mysql,Xcode,Swift,我正在进行一个学校项目,以构建一个类似instagram的应用程序,我们要做的第一件事是创建一个用户登录和注册页面。我的队友创建了一个数据库,但我在连接他的数据库时遇到问题 以下是我在网上找到的源代码(): 导入UIKit 类签名查看控制器:UIViewController{ //在此声明两个textfield对象 @IBOutlet弱变量txtUsername:UITextField! @IBOutlet弱var txtPassword:UITextField! 重写func viewDidL
导入UIKit
类签名查看控制器:UIViewController{
//在此声明两个textfield对象
@IBOutlet弱变量txtUsername:UITextField!
@IBOutlet弱var txtPassword:UITextField!
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后执行任何其他设置。
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
//单击“登录”按钮时,将运行以下功能
@iAction func已签名(发件人:UIButton){
变量用户名:NSString=txtUsername.text
var密码:NSString=txtPassword.text
if(username.isEqualToString(“”)| | password.isEqualToString(“”){
var-alertView:UIAlertView=UIAlertView()
alertView.title=“登录失败!”
alertView.message=“请输入用户名和密码”
alertView.delegate=self
alertView.addButtonWithTitle(“确定”)
alertView.show()
}否则{
var post:NSString=“用户名=\(用户名)&密码=\(密码)”
NSLog(“PostData:%@”,post);
//变量url:NSURL=NSURL(字符串:https://dipinkrishna.com/jsonlogin2.php")!
变量url:NSURL=NSURL(字符串:http://php-kingpendragon.rhcloud.com/index.php")!
var postData:NSData=post.dataUsingEncoding(NSASCIIStringEncoding)!
变量postLength:NSString=String(postData.length)
var请求:NSMutableURLRequest=NSMutableURLRequest(URL:URL)
request.HTTPMethod=“POST”
request.HTTPBody=postData
setValue(postLength为字符串,forHTTPHeaderField:“内容长度”)
request.setValue(“application/x-www-form-urlencoded”,forHTTPHeaderField:“内容类型”)
request.setValue(“application/json”,forHTTPHeaderField:“Accept”)
var REPORNSERROR:NSError?
var响应:nsurresponse?
变量urlData:NSData?=NSURLConnection.sendSynchronousRequest(请求、返回响应:&response、错误:&ResponseError)
if(urlData!=nil){
让res=响应为!NSHTTPURLResponse!;
NSLog(“响应代码:%ld”,res.statusCode);
如果(res.statusCode>=200&&res.statusCode<300)
{
var responseData:NSString=NSString(数据:urlData!,编码:NSUTF8StringEncoding)!
NSLog(“响应==>%@”,响应数据);
var错误:N错误?
将jsonData:NSDictionary=NSJSONSerialization.JSONObjectWithData(urlData!,选项:NSJSONReadingOptions.MutableContainers,错误:&error)设为!NSDictionary
让success:NSInteger=jsonData.valueForKey(“success”)作为!NSInteger
//[jsonData[@“success”]integerValue];
NSLog(“成功:%ld”,成功);
如果(成功==1)
{
NSLog(“登录成功”);
var prefs:NSUserDefaults=NSUserDefaults.standardUserDefaults()
prefs.setObject(用户名,forKey:“用户名”)
prefs.setInteger(1,forKey:“ISLOGGEDIN”)
prefs.synchronize()
//self.dismissViewControllerAnimated(真,完成:无)
}否则{
var错误消息:NSString
如果jsonData[“错误消息”]为?NSString!=nil{
error\u msg=jsonData[“error\u message”]as!NSString
}否则{
错误\u msg=“未知错误”
}
var-alertView:UIAlertView=UIAlertView()
alertView.title=“登录失败!”
alertView.message=错误消息为字符串
alertView.delegate=self
alertView.addButtonWithTitle(“确定”)
alertView.show()
}
}否则{
var-alertView:UIAlertView=UIAlertView()
alertView.title=“登录失败!”
alertView.message=“连接失败”
alertView.delegate=self
alertView.addButtonWithTitle(“确定”)
alertView.show()
}
}否则{
var-alertView:UIAlertView=UIAlertView()
alertView.title=“登录失败!”
alertView.message=“连接失败”
如果let error=reponseError{
alertView.message=(错误.localizedDescription)
}
alertView.delegate=self
alertView.addButtonWithTitle(“确定”)
alertView.show()
}
}
}
func textField应该返回(textField:UITextField)->Bool{//delegate方法
textField.resignFirstResponder()辞职
返回真值
}
/*
//标记:-导航
//在基于故事板的应用程序中,您通常需要在导航之前做一些准备
覆盖函数prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject?){
//使用segue.destinationViewController获取新的视图控制器。
//将选定对象传递给新的视图控制器。
}
*/
}
注册页面:
import UIKit
class SignupViewController: UIViewController {
@IBOutlet weak var txtUsername: UITextField!
@IBOutlet weak var txtPassword: UITextField!
@IBOutlet weak var txtConfirmPassword: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
//When user clicks signin button
@IBAction func gotoSignIn(sender: UIButton) {
self.dismissViewControllerAnimated(true, completion: nil)
}
//When user clicks signup button
@IBAction func signupTapped(sender: UIButton) {
var username:NSString = txtUsername.text as NSString
var password:NSString = txtPassword.text as NSString
var confirm_password:NSString = txtConfirmPassword.text as NSString
if ( username.isEqualToString("") || password.isEqualToString("") ) {
var alertView:UIAlertView = UIAlertView()
alertView.title = "Sign Up Failed!"
alertView.message = "Please enter Username and Password"
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
} else if ( !password.isEqual(confirm_password) ) {
var alertView:UIAlertView = UIAlertView()
alertView.title = "Sign Up Failed!"
alertView.message = "Passwords don't match"
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
} else {
var post:NSString = "username=\(username)&password=\(password)&c_password=\(confirm_password)"
NSLog("PostData: %@",post);
//var url:NSURL = NSURL(string: "https://dipinkrishna.com/jsonsignup.php")!
var url:NSURL = NSURL(string: "http://php-kingpendragon.rhcloud.com/index.php")!
var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)!
var postLength:NSString = String( postData.length )
var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.HTTPBody = postData
request.setValue(postLength as String, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
var reponseError: NSError?
var response: NSURLResponse?
var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)
if ( urlData != nil ) {
let res = response as! NSHTTPURLResponse!;
NSLog("Response code: %ld", res.statusCode);
if (res.statusCode >= 200 && res.statusCode < 300)
{
var responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)!
NSLog("Response ==> %@", responseData);
var error: NSError?
let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as! NSDictionary
let success:NSInteger = jsonData.valueForKey("success") as! NSInteger
//[jsonData[@"success"] integerValue];
NSLog("Success: %ld", success);
if(success == 1)
{
NSLog("Sign Up SUCCESS");
self.dismissViewControllerAnimated(true, completion: nil)
} else {
var error_msg:NSString
if jsonData["error_message"] as? NSString != nil {
error_msg = jsonData["error_message"] as! NSString
} else {
error_msg = "Unknown Error"
}
var alertView:UIAlertView = UIAlertView()
alertView.title = "Sign Up Failed!"
alertView.message = error_msg as String
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
}
} else {
var alertView:UIAlertView = UIAlertView()
alertView.title = "Sign Up Failed!"
alertView.message = "Connection Failed"
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
}
} else {
var alertView:UIAlertView = UIAlertView()
alertView.title = "Sign in Failed!"
alertView.message = "Connection Failure"
if let error = reponseError {
alertView.message = (error.localizedDescription)
}
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
}
}
}
func textFieldShouldReturn(textField: UITextField!) -> Bool { //delegate method
textField.resignFirstResponder()
return true
}
}
导入UIKit
类SignupViewController:UIViewController{
@
import UIKit
class SignupViewController: UIViewController {
@IBOutlet weak var txtUsername: UITextField!
@IBOutlet weak var txtPassword: UITextField!
@IBOutlet weak var txtConfirmPassword: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
//When user clicks signin button
@IBAction func gotoSignIn(sender: UIButton) {
self.dismissViewControllerAnimated(true, completion: nil)
}
//When user clicks signup button
@IBAction func signupTapped(sender: UIButton) {
var username:NSString = txtUsername.text as NSString
var password:NSString = txtPassword.text as NSString
var confirm_password:NSString = txtConfirmPassword.text as NSString
if ( username.isEqualToString("") || password.isEqualToString("") ) {
var alertView:UIAlertView = UIAlertView()
alertView.title = "Sign Up Failed!"
alertView.message = "Please enter Username and Password"
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
} else if ( !password.isEqual(confirm_password) ) {
var alertView:UIAlertView = UIAlertView()
alertView.title = "Sign Up Failed!"
alertView.message = "Passwords don't match"
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
} else {
var post:NSString = "username=\(username)&password=\(password)&c_password=\(confirm_password)"
NSLog("PostData: %@",post);
//var url:NSURL = NSURL(string: "https://dipinkrishna.com/jsonsignup.php")!
var url:NSURL = NSURL(string: "http://php-kingpendragon.rhcloud.com/index.php")!
var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)!
var postLength:NSString = String( postData.length )
var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.HTTPBody = postData
request.setValue(postLength as String, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
var reponseError: NSError?
var response: NSURLResponse?
var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)
if ( urlData != nil ) {
let res = response as! NSHTTPURLResponse!;
NSLog("Response code: %ld", res.statusCode);
if (res.statusCode >= 200 && res.statusCode < 300)
{
var responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)!
NSLog("Response ==> %@", responseData);
var error: NSError?
let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as! NSDictionary
let success:NSInteger = jsonData.valueForKey("success") as! NSInteger
//[jsonData[@"success"] integerValue];
NSLog("Success: %ld", success);
if(success == 1)
{
NSLog("Sign Up SUCCESS");
self.dismissViewControllerAnimated(true, completion: nil)
} else {
var error_msg:NSString
if jsonData["error_message"] as? NSString != nil {
error_msg = jsonData["error_message"] as! NSString
} else {
error_msg = "Unknown Error"
}
var alertView:UIAlertView = UIAlertView()
alertView.title = "Sign Up Failed!"
alertView.message = error_msg as String
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
}
} else {
var alertView:UIAlertView = UIAlertView()
alertView.title = "Sign Up Failed!"
alertView.message = "Connection Failed"
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
}
} else {
var alertView:UIAlertView = UIAlertView()
alertView.title = "Sign in Failed!"
alertView.message = "Connection Failure"
if let error = reponseError {
alertView.message = (error.localizedDescription)
}
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
}
}
}
func textFieldShouldReturn(textField: UITextField!) -> Bool { //delegate method
textField.resignFirstResponder()
return true
}
}
<?php
/**
* File to handle all API requests
* Accepts GET and POST
*
* Each request will be identified by TAG
* Response will be JSON data
/**
* check for POST request
*/
if (isset($_POST['tag']) && $_POST['tag'] != '') {
// get tag
$tag = $_POST['tag'];
// include db handler
require_once 'DB_Functions.php';
$db = new DB_Functions();
// response Array
$response = array("tag" => $tag, "error" => FALSE);
// check for tag type
if ($tag == 'login') {
// Request type is check Login
$email = $_POST['email'];
$password = $_POST['password'];
// check for user
$user = $db->getUserByEmailAndPassword($email, $password);
if ($user != false) {
// user found
$response["error"] = FALSE;
$response["uid"] = $user["unique_id"];
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
$response["user"]["created_at"] = $user["created_at"];
$response["user"]["updated_at"] = $user["updated_at"];
echo json_encode($response);
} else {
// user not found
// echo json with error = 1
$response["error"] = TRUE;
$response["error_msg"] = "Incorrect email or password!";
echo json_encode($response);
}
} else if ($tag == 'register') {
// Request type is Register new user
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
// check if user is already existed
if ($db->isUserExisted($email)) {
// user is already existed - error response
$response["error"] = TRUE;
$response["error_msg"] = "User already existed";
echo json_encode($response);
} else {
// store user
$user = $db->storeUser($name, $email, $password);
if ($user) {
// user stored successfully
$response["error"] = FALSE;
$response["uid"] = $user["unique_id"];
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
$response["user"]["created_at"] = $user["created_at"];
$response["user"]["updated_at"] = $user["updated_at"];
echo json_encode($response);
} else {
// user failed to store
$response["error"] = TRUE;
$response["error_msg"] = "Error occured in Registartion";
echo json_encode($response);
}
}
} else {
// user failed to store
$response["error"] = TRUE;
$response["error_msg"] = "Unknow 'tag' value. It should be either 'login' or 'register'";
echo json_encode($response);
}
} else {
$response["error"] = TRUE;
$response["error_msg"] = "Required parameter 'tag' is missing!";
echo json_encode($response);
}
?>
var post:NSString = "tag=login&username=\(username)&password=\(password)&c_password=\(confirm_password)"
var post:NSString = "tag=register&username=\(username)&password=\(password)&c_password=\(confirm_password)"