PHP学习——登录验证(第一级)

前言

最近一段时间在学php,昨天和今天又在W3C上快速的过了一遍HTML,CSS,有些东西总是记不住,然后之前又快速的过了一边php,打算写一个登录验证的小代码练练手,也记录一下过程中新学习到的一些知识点,一级级往上升。

代码结构

话不多说,上代码先~~~

代码目录结构

在同一个目录下三个文件:

index.html//登录页面
login_auth.php//验证页面
index.php//登录成功页面

数据库结构:

user:数据库
  =》username表
    =>username 字段名
    =>password 字段名

具体代码

ndex.html代码

该页面代码如下,比较简单,我就不多说啦。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
<style>
body {text-align: center;position: relative;}
</style>
</head>
<body>
<form name="login" action="login_auth.php" method="post">
username:
<input type="text" name="user"/></br>
password:
<input type="password" name="pwd"/></br>
<input class="submit" type="submit" value="登录"/>
</form>
</body>
</html>

点击登录后,会触发表单动作,跳转到login_auth.php页面认证

login_auth.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
header("Content-Type: text/html;charset=utf-8");
$username=$_POST['user']; //$_POST 变量是一个数组,内容是由 HTTPPOST方法发送的变量名称和值
$password=$_POST['pwd'];
if($username==""){
echo "请输入用户名";
echo "<a href='index.html'>返回</a>";
}elseif($password==""){
echo "请输入密码";
echo "<a href='index.html'>返回</a>";
}else{
$link=mysql_connect("localhost","root","")or die("不能连接数据库");
mysql_select_db("user",$link)or die("选择错误");
$sql="select * from username where username='$username' AND password='$password'";
$result=mysql_query($sql,$link);
$news=mysql_fetch_assoc($result);
mysql_free_result($result);
if($news){
echo "登陆成功";
echo "<a href='index.php'>登陆</a>";
}else{
echo "密码错误或用户名不正确";
echo "<a href='index.html'>返回</a>";
}
}
?>

由于页面中有中文,为防止乱码,需要在头部增加一句:

header("Content-Type: text/html;charset=utf-8");

相关函数

以上用了一个php中与mysql数据库有关的函数
1、mysql_connect:连接一个数据库
语法:

mysql_connect(servername,username,password);
servername  可选。规定要连接的服务器。默认是 "localhost:3306"。
username    可选。规定登录所使用的用户名。默认值是拥有服务器进程的用户的名称。
password    可选。规定登录所用的密码。默认是 ""。

2、mysql_select_db:选择数据库

mysql_select_db(database,connection)
database    必需。规定要选择的数据库。
connection  可选。规定 MySQL 连接。如果未指定,则使用上一个连接。

如果成功,则该函数返回 true。如果失败,则返回 false。
3、mysql_query:执行一条 MySQL 查询。

mysql_query(query,connection)
query 必需。规定要发送的 SQL 查询。注释:查询字符串不应以分号结束。
connection 可选。规定 SQL 连接标识符。如果未规定,则使用上一个打开的连接。

4、mysql_fetch_assoc:从结果集中取得一行作为关联数组。返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返回 false。如

Array
(
[userame] => admin
[password] => 123456
)
 mysql_fetch_assoc(data)

5、mysql_free_result:释放结果内存。如果成功,则返回 true,如果失败,则返回 false。

所以有了以上的代码啦~
还有,die() 函数输出一条消息,并退出当前脚本。该函数是 exit() 函数的别名。
这里特地在说一下 or这个语法:之所以 用 or 可以达到,当函数错误后,执行or后面的函数是因为:

  1. 逻辑运算的运算顺序是从左向右
  2. or运算符的左结合性
  3. or运算中,如果运算时有值为真了,则整个表达式为真,后面不需要运算

终合上面三个因素,当or左侧函数运行正常(返回非假值),则不会执行后面的函数。这里利用了or的这个特性,将die(终止并输出函数)用于此处,巧妙的实现了函数异常而报错的功能。

根据上面的分析,想到如果左侧函数就是返回假的函数,或者无返回值的函数,应该也是执行后面的函数mysql_connect()执行错误,并不是这个函数本身执行错误了,如果是它本身执行错误是PHP的系统错误,它仅仅是返回了一个假值而已。

那这是一个非常简陋的代码,时间不早啦,今天就先写到这,下一次介绍一下其中存在的一些隐患与改进的地方~~