数据访问中的登陆和注册原理就是利用php来操作数据库中的数据表内容,进行增添和查询。
1.注册
这页面在HTML页面实现
<body>
<h1>注册</h1>
<form action="chuli.php" method="post"> //action表示表单提交的路径, method表示提交方式,get方式会在地址栏显示提交内容,并且有长度限制,post方式则不
<div>用户名:<input type="text" name="uid" /></div> //注意这里的name,在提交后的php代码中会以name来辨识和获取数据
<div>密码:<input type="text" name="pwd" /></div>
<div>姓名:<input type="text" name="name" /></div>
<div>性别:
男<input type="radio" name="sex" value="1" /> //单选框的name值相同才能互斥实现单选,
女<input type="radio" name="sex" value="0" />
</div>
<div>生日:<input type="text" name="birthday" /></div>
<div><input type="submit" value="注册" /></div>
</form>
</body>
创建一个chuli的php文件来读取和处理
<?php
1.取提交的数据
$uid = $_POST["uid"]; //如果是get方式提交的表单,这里就是$_GET[];获取数据的关键就是靠标签的name值
$pwd = $_POST["pwd"];
$name = $_POST["name"];
$sex = $_POST["sex"];
$birthday = $_POST["birthday"];
2.向数据库写入
$db = new MySQLi("localhost","root","123","mydb"); //链接数据库
$sql = "insert into users values('{$uid}','{$pwd}','{$name}',{$sex},'{$birthday}',0,'')"; //写入SQL语句
if($db->query($sql)) //判断是否写入成功
{
echo "success";
}
else
{
echo "fail";
}
2.登陆
首先也是要在HTML提交数据
<body>
<h1>登录页面</h1>
<form action="denglu.php" method="post">
<div>用户名:<input type="text" name="uid" /></div>
<div>密码:<input type="password" name="pwd" /></div>
<input type="submit" value="登录" />
</form>
</body>
现在就是在创建的denglu.php文件里来处理和查询数据
<?php
$uid = $_POST["uid"]; //获取到HTML中的提交的数据
$pwd = $_POST["pwd"];
$db = new MySQLi("localhost","root","123","mydb"); //链接数据库
这里会有两种方法,第一种方法会出现一点问题 ,先看代码
$sql = "select count(*) from users where uid='{$uid}' and pwd='{$pwd}'"; //写入sql语句
$reslut = $db->query($sql);
$arr = $reslut->fetch_row();
if($arr[0]) //判断是否存在(count不为0就存在)
{
echo "登录成功";
}
else
{
echo "登录失败";
}
这里会出现问题,可能会出现SQL注入攻击的危险,因为当登陆时用户名填写 'a' or 1=1 #这样的恒等式时,会截取到数据库中的用户数据,造成数据库被盗取或攻击
防止SQL注入攻击的方法有
1.过滤用户的输入
2.使用预处理语句
3.写代码的时候尽量避免
第二种方式
$sql = "select pwd from users where uid='{$uid}'";
$result = $db->query($sql);
$arr = $result->fetch_row();
if($arr[0]==$pwd && !empty($pwd)) //防止用户密码为空时也能登陆的发生
{
echo "登录成功";
}
else
{
echo "登录失败";
}