Titanium教程day4-php+MySQL后台做注册登录模块
来源:互联网 发布:中国画入门 知乎 编辑:程序博客网 时间:2024/05/04 15:36
原文:http://wiki.appcelerator.org/display/guides/HTTPClient+with+PHP+and+MySQL
本课用Titanium.Network.HTTPClient对象结合php+MySQL 后台做注册登录模块。下载源文件。
要点:
* 用Titanium.Network.HTTPClient发送变量给后台
* PHP后台验证用户信息
* 接收并解析JSON
介绍
本课以iPhone为目标设备。准备工作
安装php建站集成软件包XAMPP,集成了Apache,MySQL & PHP。创建名为db_mobile的数据库,并创建mobile_users 表,列名如下:
*'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY
*'email' VARCHAR( 255 ) NOT NULL
*'user' VARCHAR( 255 ) NOT NULL
*'pass' VARCHAR( 255 ) NOT NULL
创建项目
创建手机项目,项目名MyDatabaseApp。进入Resources 文件夹,是系统自动生成的文件夹,包括主文件app.js 。创建3个js文件:
*config.js
*RegistrationWindow.js
*LoginWindow.js
config.js 放全局变量,RegistrationWindow.js是注册窗口的代码,LoginWindow.js是登录窗口的代码。
app.js
删掉app.js的所有代码,改成以下代码://set the default background colorTitanium.UI.setBackgroundColor('#FFF'); //create tab groupvar tabGroup = Titanium.UI.createTabGroup(); //create our registration windowvar registerWindow = Titanium.UI.createWindow({ title: 'Register', backgroundColor: '#FFF', url: "RegisterWindow.js"}); //create our login windowvar loginWindow = Titanium.UI.createWindow({ title: 'Login', backgroundColor: '#FFF', url: "LoginWindow.js"}); //create the tab to hold the registration windowvar registerTab = Titanium.UI.createTab({ icon: 'register.png', title: 'Register', window: registerWindow}); //create the tab to hold the login windowvar loginTab = Titanium.UI.createTab({ icon: 'login.png', title: 'Login', window: loginWindow}); //add our tabs to the tabgrouptabGroup.addTab(registerTab);tabGroup.addTab(loginTab); //display the tabgrouptabGroup.open();
注册表单
有几个文本框,来填写email ,用户名,和密码。建立UI
UI内容,看Designing the User Interface guide
复制下面代码到RegistrationWindow.js:
var curWindow = Titanium.UI.currentWindow; var scrollView = Titanium.UI.createScrollView({ contentWidth:'auto', contentHeight:'auto', top:0, showVerticalScrollIndicator:true, showHorizontalScrollIndicator:true}); var view = Titanium.UI.createView({ width:"100%", height: 400, top:10, paddingBottom: 15}); var lbl_Email = Titanium.UI.createLabel({ text:'Email:', height:30, width:"98%", color:'#222', font:{fontSize:16}, top: 10}); var txt_Email = Titanium.UI.createTextField({ width: "98%", color: "#222", paddingLeft: 5, border: 1, borderColor: "gray", borderRadius: 3, font:{fontSize:16}, height: 40, top: 40}); var lbl_User = Titanium.UI.createLabel({ text:'Username:', height:30, width:"98%", color:'#222', font:{fontSize:16}, top: 90}); var txt_User = Titanium.UI.createTextField({ width: "98%", color: "#222", paddingLeft: 5, border: 1, borderColor: "gray", borderRadius: 3, font:{fontSize:16}, height: 40, top: 120}); var lbl_Pass1 = Titanium.UI.createLabel({ text:'Password:', height:30, width:"98%", color:'#222', font:{fontSize:16}, top: 170}); var txt_Pass1 = Titanium.UI.createTextField({ width: "98%", color: "#222", paddingLeft: 5, border: 1, borderColor: "gray", borderRadius: 3, font:{fontSize:16}, height: 40, top: 200, passwordMask: true}); var lbl_Pass2 = Titanium.UI.createLabel({ text:'Repeat Password:', height:30, width:"98%", color:'#222', font:{fontSize:16}, top: 250}); var txt_Pass2 = Titanium.UI.createTextField({ width: "98%", color: "#222", paddingLeft: 5, border: 1, borderColor: "gray", borderRadius: 3, font:{fontSize:16}, height: 40, top: 280, passwordMask: true}); var btn_Register = Titanium.UI.createButton({ width: "98%", color: "#555", font:{fontSize: 22, fontWeight: "bold"}, height: 50, top: 340, title: "Register"}); view.add(lbl_Email);view.add(txt_Email);view.add(lbl_User);view.add(txt_User);view.add(lbl_Pass1);view.add(txt_Pass1);view.add(lbl_Pass2);view.add(txt_Pass2);view.add(btn_Register); scrollView.add(view); curWindow.add(scrollView);结果如下:
加注册代码
下面创建2个函数,一个获取文本框的值,并做验证。第2个执行HTTPClient 请求,并接收返回值。结果会是JSON 格式。首先是getUserInfo函数,获取文本值并验证,再把值传给函数registerUser。
把下面代码加到btn_Register声明之后:
function getUserInfo(){ var email = txt_Email.value; var user = txt_User.value; var pass1 = txt_Pass1.value; var pass2 = txt_Pass2.value; if(pass1 == pass2){ registerUser(email, user, pass1); } else { alert("Your passwords do not match."); }}验证2个密码是否相同,如果是,调用registerUser函数,传进3个值。
接着给按钮加事件:
btn_Register.addEventListener('click',getUserInfo);你也可以把这一块写成全局函数,这样登录表单也能调用。但本课还是写成私有函数。
下面用Titanium.Network.HTTPClient对象发送数据给后台。这个函数还用来解析后台返回值。
function registerUser(email, user, pass){ var request = Titanium.Network.createHTTPClient(); var url = "http://localhost/mobile.php?action=add_user&email="+email+"&user="+user+"&pass="+pass; request.open("GET",url); request.onload = function(){ var arrData = []; arrData = eval('('+this.responseText+')'); var result = arrData[0].result; if(result == "true"){ var alrt_Success = Titanium.UI.createAlertDialog({ title: 'Success!', message: 'You have successfuly created a new account. Now you can log in.', buttonNames: ['OK'] }); alrt_Success.show(); } else if (result == "another_user"){ var alrt_Sorry = Titanium.UI.createAlertDialog({ title: 'Sorry!', message: 'According to our database, that username is already in use.', buttonNames: ['OK'] }); alrt_Sorry.show(); } else { var alrt_Fail = Titanium.UI.createAlertDialog({ title: 'Error!', message: 'It seems we are experiencing problems... please try again later.', buttonNames: ['OK'] }); alrt_Fail.show(); } }; request.send();}一行一行看:
var request = Titanium.Network.createHTTPClient();创建Titanium.Network.HTTPClient对象。
var url = "http://localhost/mobile.php?action=add_user&email="+email+"&user="+user+"&pass="+pass;这就是后台地址,本例是localhost。当然可以是IP地址或网址。
request.open("GET",url);这一行指定发送类型GET,和url。
request.onload = function()\{...\}这一行是回调函数。其中:
var arrData = [];arrData = eval('('+this.responseText+')');var result = arrData[0].result;第1行创建变量数组来存储返回数据。
第2行解析后台的JSON 返回值。用eval 方法加上参数this.responseText。
关键词this 指向的是父级对象,也就是request变量。
最后一行存储arrData[0].result值。
if(result == "true"){ var alrt_Success = Titanium.UI.createAlertDialog({ title: 'Success!', message: 'You have successfuly created a new account. Now you can log in.', buttonNames: ['OK'] }); alrt_Success.show();}当返回true时,创建Titanium.UI.AlertDialog对象。
下面是没有收到值的情况:
else if(result == "another_user"){ var alrt_Sorry = Titanium.UI.createAlertDialog({ title: 'Sorry!', message: 'According to our database, that username is already in use.', buttonNames: ['OK'] }); alrt_Sorry.show();}else{ var alrt_Fail = Titanium.UI.createAlertDialog({ title: 'Error!', message: 'It seems we are experiencing problems... please try again later.', buttonNames: ['OK'] }); alrt_Fail.show();}registerUser 函数最后一行:
request.send();现在点按钮,还不能看,因为没写后台。
接收注册数据
到服务器的htdocs 目录或www 目录,建一个mobile.php文件。写上:<?php echo "Test123"; ?>这样就能通过页面http://localhost/mobile.php访问了:
浏览器会输出:
Test123
写入数据库
如果不熟PHP,看w3schools website打开mobile.php修改,
<?php switch($_GET['action']) { case 'add_user': break; case 'login': break; }?>下面是接收变量:
$email = $_GET['email'];$user = $_GET['user'];$pass = md5(trim($_GET['pass']));把下面代码放在变量声明后:
$resultArr = Array();$connection = mysql_connect("localhost","root","");$db = mysql_select_db("mobile",$connection);$q_string = "SELECT * FROM mobile_users WHERE user = '$user'";$query = mysql_query($q_string,$connection);第1行创建 PHP 数组,用来存储JSON值。
第2行连接MySQL数据库。 我用的是默认的,可以是带密码的 'URL', 'username', 'password'.
第3行打开mobile数据表,
第4行创建查询字符串,检查用户名是否已经注册。
第5行执行查询,返回$query变量。
输出结果
继续前面的代码:if(mysql_num_rows($query) > 0){ $resultArr[0]['result'] = "another_user"; } else { $query = mysql_query("INSERT INTO mobile_users (user, email, pass) VALUES ('$user', '$email', '$pass')",$connection); if($query){ $resultArr[0]['result'] = "true"; } else { $resultArr[0]['result'] = "false"; }}echo json_encode($resultArr);mysql_close($connection);
登录表单
构建UI
var curWindow = Titanium.UI.currentWindow;var scrollView = Titanium.UI.createScrollView({ contentWidth:'auto', contentHeight:'auto', top:0, showVerticalScrollIndicator:true, showHorizontalScrollIndicator:true});var view = Titanium.UI.createView({ width:"100%", height: "auto", top:10, paddingBottom: 15}); var lbl_User = Titanium.UI.createLabel({ text:'Username:', height:30, width:"98%", color:'#222', font: {fontSize:16}, top: 10});var txt_User = Titanium.UI.createTextField({ width: "98%", color: "#222", paddingLeft: 5, border: 1, borderColor: "gray", borderRadius: 3, font:{fontSize:16}, height: 40, top: 40});var lbl_Pass = Titanium.UI.createLabel({ text:'Password:', height:30, width:"98%", color:'#222', font:{fontSize:16}, top: 90});var txt_Pass = Titanium.UI.createTextField({ width: "98%", color: "#222", paddingLeft: 5, border: 1, borderColor: "gray", borderRadius: 3, passwordMask: true, font:{fontSize:16}, height: 40, top: 120});var btn_Login = Titanium.UI.createButton({ width: "98%", color: "#555", font:{fontSize: 22, fontWeight: "bold"}, height: 50, top: 180, title: "Log In"});view.add(lbl_User);view.add(txt_User);view.add(lbl_Pass);view.add(txt_Pass);view.add(btn_Login);scrollView.add(view); curWindow.add(scrollView);
加登录代码
function getUserInfo(e){ var user = txt_User.value; var pass = txt_User.value; loginUser(user,pass);}btn_Login.addEventListener('click',getUserInfo);整个代码
function loginUser(user,pass){ var request = Titanium.Network.createHTTPClient(); var url = "http://localhost/mobile.php?action=login&user="+user+"&pass="+pass; request.open("GET",url); request.onload = function(){ var arrData = []; arrData = eval('('+this.responseText+')'); var result = arrData[0]; if(result === "true"){ Titanium.App.Properties.setString("user_id",arrData[0].user_id); var alrt_Success = Titanium.UI.createAlertDialog({ title: 'Success!', message: 'You are now logged in and can access member-only features.', buttonNames: ['OK'] }); alrt_Success.show(); } else { var alrt_Sorry = Titanium.UI.createAlertDialog({ title: 'Unsuccessful...', message: 'You have provided the incorrect username and/or password.', buttonNames: ['OK'] }); alrt_Sorry.show(); }}; loader.send();}逐行讲解:
var request = Titanium.Network.createHTTPClient();创建Titanium.Network.HTTPClient对象。
var url = "http://localhost/mobile.php?action=login&user="+user+"&pass="+pass;创建GET字串。
request.open("GET",url);执行
request.onload = function(){...}回调事件。
登录后台
$resultArr = Array();$user = $_GET['user'];$pass = md5(trim($_GET['pass']));$connection = mysql_connect("localhost","root","");$db = mysql_select_db("mobile",$connection);$query = mysql_query("SELECT * FROM <tt>mobile_users</tt> WHERE <tt>user</tt> = '$user' AND <tt>pass</tt> = '$pass'");if(mysql_num_rows($query) > 0){ $row = mysql_fetch_assoc($query); $resultArr[0]['result'] = "true"; $resultArr[0]['user_id'] = $row['id'];} else { $resultArr[0]['result'] = "false";}echo json_encode($resultArr);mysql_close($connection);
完整代码:
<?php switch($_GET['action']) { case 'add_user': $user = $_GET['user']; $pass = md5(trim($_GET['pass'])); $email = $_GET['email']; $resultArr = Array(); $connection = mysql_connect("localhost","root",""); $db = mysql_select_db("mobile",$connection); $query = mysql_query("SELECT * FROM <tt>mobile_users</tt> WHERE <tt>user</tt> = '$user'",$connection); if(mysql_num_rows($query) > 0){ $resultArr[0]['result'] = "another_user"; } else { $query = mysql_query("INSERT INTO mobile_users (user, email, pass) VALUES ('$user', '$email', '$pass')",$connection); if($query){ $resultArr[0]['result'] = "true"; } else { $resultArr[0]['result'] = "false"; } } echo json_encode($resultArr); mysql_close($connection); break; case 'login': $resultArr = Array(); $user = $_GET['user']; $pass = md5(trim($_GET['pass'])); $connection = mysql_connect("localhost","root",""); $db = mysql_select_db("mobile",$connection); $query = mysql_query("SELECT * FROM <tt>mobile_users</tt> WHERE <tt>user</tt> = '$user' AND <tt>pass</tt> = '$pass'"); if(mysql_num_rows($query) > 0){ $row = mysql_fetch_assoc($query); $resultArr[0]['result'] = "true"; $resultArr[0]['user_id'] = $row['id']; } else { $resultArr[0]['result'] = "false"; } echo json_encode($resultArr); mysql_close($connection); break; }?>
输出结果
var user_id = Titanium.App.Properties.getString("user_id");
- Titanium教程day4-php+MySQL后台做注册登录模块
- Titanium教程day4-控制真机方向
- PHP用户登录注册模块实现
- web编程之注册以及登录验证模块(PHP+mysql)
- PHP PDO+MySQL实现登录注册页面
- 注册登录模块
- 系统登录注册模块
- 登录注册模块解决方案
- 网站注册登录模块
- 登录注册模块解决方案
- PHP和mysql做用户登录验证
- PHP和mysql做用户登录验证 .
- 后台管理登录模块
- 使用Eclipse+MyEclipse+MySql开发一个用户注册登录模块
- php,与ucenter同步用户登录,注册的教程
- 后台学习五---登录注册
- 使用Titanium模块
- php实例-注册&登录
- 实用工具类库java.util包
- 通过Spring读取properties配置文件的信息 Spring 读取properties
- shell java linux
- IPV6+家庭数据中心=私有云
- Qt学习——分割窗口QSplitter类
- Titanium教程day4-php+MySQL后台做注册登录模块
- ASP.NET后台中调用前台Javascript函数的几种方法
- C++面试题源码
- SQL 对表字段的修改操作
- 11、求二叉树中节点的最大距离...
- JVM ClassLoader
- Eclipse下Android开发的配置
- csdn的博客积分如何计算
- css text-decoration下划线