一步一步制作一个php项目
目录结构:
项目名称:订餐派
dingcanpai:
cache //缓存
core //核心代码,本来想把一些类对象放入,因为我之前一直用的是面向对象的语言。
image //图片资源
inc //include的文件,引用的文件
scripts //js文件夹
styles //css文件夹
uploads //上传的文件的文件夹
注册:
注册的本质还是向数据库内插入信息。
注册前需要做些准备:
启动session,顶一个常量,引入公共函数库。
1 //启动session 2 session_start(); 3 //定义个常量,用来授权调用includes里面的文件 4 define('IN_TG',true); 5 //定义个常量,用来指定本页的内容 6 define('SCRIPT','register'); 7 //引入公共文件 8 require dirname(__FILE__).'/inc/common.inc'; 9 //引入验证文件 10 include ROOT_PATH.'inc/check.func.inc';
获取url中的动作 用$_GET['action'],如果想测试的话可以用print_r($_POST) 打印出post的内容。 这是个很好用的测试过程。
代码中的_is_repeat是用来执行传入的sql语句,并获得一行的内容。 以此行来判断是否正确。
1 if(isset($_GET['action']) && $_GET['action']=='register'){ 2 /* if (empty($_system['register'])) { 3 exit('不要非法注册!'); 4 }*/ 5 //echo('测试'); 6 7 //创建一个空数组,用来存放提交过来的合法数据 8 $_clean = array(); 9 //可以通过唯一标识符来防止恶意注册,伪装表单跨站攻击等。 10 //这个存放入数据库的唯一标识符还有第二个用处,就是登录cookies验证 11 $_uniqid = $_SESSION['uniqid']; 12 $_clean['uniqid'] = _check_uniqid($_POST['uniqid'],$_SESSION['uniqid']); 13 //active也是一个唯一标识符,用来刚注册的用户进行激活处理,方可登录。 14 $_clean['username'] = _check_username($_POST['username'],2,20); 15 $_clean['password'] = _check_password($_POST['password'],6); 16 $_clean['reg_real_name'] = $_POST['reg_real_name']; //真实姓名 17 18 //在新增之前,要判断用户名是否重复 19 _is_repeat( 20 "SELECT name FROM user WHERE name='{$_clean['username']}' LIMIT 1", 21 '对不起,此用户已被注册' 22 ); 23 24 //新增用户 //在双引号里,直接放变量是可以的,比如$_username,但如果是数组,就必须加上{} ,比如 {$_clean['username']} 25 _query("INSERT INTO USER (name, pwd, uniqid, realname)values 26 ('{$_clean['username']}','{$_clean['password']}', '{$_clean['uniqid']}', '{$_clean['reg_real_name']}' )"); 27 28 if (_affected_rows() == 1) { 29 //获取刚刚新增的ID 30 $_clean['id'] = _insert_id(); 31 _close(); 32 //_session_destroy(); 33 //生成XML 34 //_set_xml('new.xml',$_clean); 35 _location('恭喜你,注册成功!','active.php?active='.$_clean['active']); 36 } else { 37 _close(); 38 //_session_destroy(); 39 _location('很遗憾,注册失败!','register.php'); 40 } 41 }
1 function _is_repeat($_sql,$_info) { 2 if (_fetch_array($_sql)) { 3 _alert_back($_info); 4 } 5 }
_fetch_array 执行的是mysql_fetch_array的这个方法,这个方法直接判断query的值是否是多行的如果是的就认为是错误的。
_query调用的是mysql_query的方法,用来执行sql,如果失败直接进来,如果成功,就返回结果
1 function _query($_sql){ 2 if (!$_result = mysql_query($_sql)) { 3 exit('SQL执行失败'.mysql_error()); 4 } 5 return $_result; 6 }
_affected_rows是获取受影响函数的方法。
_insert_id 调用的是mysql_insert_id 获取刚刚插入的数据的id。这样就OK了。
登录:
1 $_clean = array(); 2 print_r($_POST); 3 //可以通过唯一标识符来防止恶意注册,伪装表单跨站攻击等。 4 //这个存放入数据库的唯一标识符还有第二个用处,就是登录cookies验证 5 $_uniqid = $_SESSION['uniqid']; 6 $_clean['uniqid'] = _check_uniqid($_POST['uniqid'],$_SESSION['uniqid']); 7 //active也是一个唯一标识符,用来刚注册的用户进行激活处理,方可登录。 8 $_clean['username'] = _check_username($_POST['login_name'],2,20); 9 $_clean['password'] = _get_modify_password($_POST['password'],6); 10 11 //登录 12 $_rows = _fetch_array("SELECT name,uniqid FROM user WHERE name='{$_clean['username']}' AND pwd='{$_clean['password']}' LIMIT 1"); 13 if(!empty($_rows)){//成功 14 print_r($_rows); 15 //登录成功? 16 _close(); 17 _setcookie($_rows['name'], $_rows['uniqid']); 18 //_location('恭喜你,登录成功!','active.php?active='.$_clean['active']); 19 }else{ 20 _close(); 21 _location('登录失败,请确认你的用户名和密码.','active.php?active='.$_clean['active']); 22 }
empty($rows)通过判断返回的值是否为空来确定是否登录成功。
当然返回有结果了这事儿还没有完,要设置下cookie才行,设置后才算是完成。这样才能把前面和后面的都穿起来。

浙公网安备 33010602011771号