php数据访问之注册登陆

数据访问中的登陆和注册原理就是利用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 "登录失败";
}