로그인 기능(3)LOGIN

로그인 기능(3)

이전 준비와 로그인 프론트엔드 페이지가 완료되었습니다. 이제 로그인 기능 코드를 소개하겠습니다.

먼저 로그인 PHP 코드를 작성하기 위해 login.php 파일을 만듭니다.

첫 번째 단계는 먼저 데이터베이스에 연결하는 것입니다. 그렇지 않으면 데이터베이스의 정보를 얻을 수 없습니다.

<?php
$link = mysqli_connect("localhost","root","root","joke");//注意后面的这几个参数,服务器名,数据库的用户名,密码,数据库名。密码没有可以不填
if (!$link) {
    die("连接失败: " . mysqli_connect_error());
}
?>

단계 2: 사용자 이름이든 비밀번호이든 항상 프런트 엔드 양식을 통해 PHP 프로그램에 값을 전달한 다음 이를 확인합니다. 따라서 다음 단계는 먼저 프런트 엔드 양식에 의해 전달된 값을 가져오는 것입니다. 가기 전에 값을 가져오는 코드는 다음과 같습니다.

<?php
$username = $_POST['username'];
$password = $_POST['password'];
?>

get 대신 게시하는 이유는 무엇입니까? 이를 위해서는 프런트 데스크의 양식과 양식 태그의 정보를 확인해야 합니다.

<form action="login.php" method="post">
...
</form>

action은 정보가 제출된 위치와 방법이 전달되는 방법을 알려줍니다. 여기에 게시 방법이 있습니다

3단계: 설정 후 가져옵니다. 값이 데이터베이스에 있는 값과 동일한지 확인해야 로그인할 수 있습니다. 확인 코드는 다음과 같습니다.

<?php
$sql="select * from login where username = '{$username}' and password  = '{$password}'";//先从数据库中查询户名和密码
$rs=mysqli_query($link,$sql); //执行sql查询
$row=mysqli_fetch_array($rs);//将查询的结果放入变量$row中
?>

4단계: 결과를 쿼리한 후 인증을 시작합니다:

<?php
if($row) { 
     if ($username == $row['username'] && $password == $row['password']) //判断表单获取的用户名,密码和数据库中的是否一致
     { 
         echo "登陆成功,正在为你跳转至后台页面";
         header("location:index.html");//如果一致会跳转到后台的首页
     }
 }else{
     echo "账号或密码错误" . "<br/>";
     echo "<a href='login.html'>返回登陆页面</a>";//如果不一致,将重新跳转至登录页面重新登录
 }
?>

뭔가 놓친 것 같은데요?

...

...

인증 코드가 언급되지 않은 것 같습니다....

마지막으로 인증에 대해 이야기해 보겠습니다. 암호.

인증코드를 생성하기 위해서는 먼저 passcode.php라는 PHP 파일을 생성하여 인증코드를 작성해야 합니다.

아래에는 인증 코드의 자세한 작성 방법을 적어 놓겠습니다. 각 핵심과 어려운 점을 설명하여 코드를 이해하고 주의 깊게 읽을 수 있도록 하겠습니다.

<?php
//设置开启session
session_start();
$image = imagecreatetruecolor(100, 30);    //设置验证码图片大小的函数
//设置验证码颜色,用法:imagecolorallocate(int im, int red, int green, int blue);
$bgcolor = imagecolorallocate($image,255,255,255); //#ffffff
//区域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的区域着色,col 表示欲涂上的颜色
imagefill($image, 0, 0, $bgcolor);
//设置变量
$captcha_code = "";
//生成随机数字
for($i=0;$i<4;$i++){
    //设置字体大小
    $fontsize = 10;
    //设置字体颜色,随机颜色
    $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120));      //0-120深颜色
    //设置数字
    $fontcontent = rand(0,9);
    //10>.=连续定义变量
    $captcha_code .= $fontcontent;
    //设置坐标
    $x = ($i*100/4)+rand(5,10);
    $y = rand(5,10);
    imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
//存到session
$_SESSION['authcode'] = $captcha_code;
//增加干扰元素,设置雪花点
for($i=0;$i<200;$i++){
    //设置点的颜色,50-200颜色比数字浅,不干扰阅读
    $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200));
    //imagesetpixel — 画一个单一像素
    imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor);
}
//增加干扰元素,设置横线
for($i=0;$i<4;$i++){
    //设置线的颜色
    $linecolor = imagecolorallocate($image,rand(80,220), rand(80,220),rand(80,220));
    //设置线,两点一线
    imageline($image,rand(1,99), rand(1,29),rand(1,99), rand(1,29),$linecolor);
}
//设置头部,image/png
header('Content-Type: image/png');
//imagepng() 建立png图形函数
imagepng($image);
//imagedestroy() 结束图形函数 销毁$image
imagedestroy($image);
?>

각 기능을 이해하고 싶다면 한 줄의 코드를 생생하고 구체적으로 이야기할 수 있습니다. 코드를 변경하고(명확하게 보이도록 이전과 매우 다르게 시도) 그런 다음 변경 사항이 이전과 다른지 확인합니다. 이 코드 줄의 기능을 알게 될 것입니다.

다음 단계는 인증 코드를 확인하는 것입니다. 코드를 보세요:

<?php
//判断验证码是否填写并且是否正确
 if(!$_POST['code']){            //首先判断前端页面是否有验证码的值传过来,没有就提示验证码不能为空
     echo('验证码不能为空');
     return;
 }else if($_POST['code']!=$_SESSION['authcode']){   //如果有,判断是否正确
     echo('验证码不正确');
     return;
 }
?>

자, 이것이 우리의 완전한 로그인 기능입니다.

다음 섹션
<?php session_start(); header("content-type:text/html;charset=utf-8"); //连接数据库 $link = mysqli_connect("localhost","root","root","joke"); if (!$link) { die("连接失败: " . mysqli_connect_error()); } $username =$_POST['username']; $password = $_POST['password']; //判断验证码是否填写并且是否正确 if(!$_POST['code']){ echo('验证码不能为空'); return; }else if($_POST['code']!=$_SESSION['authcode']){ echo('验证码不正确'); return; } $sql="select * from login where username = '{$username}' and password = '{$password}'"; $rs=mysqli_query($link,$sql); //执行sql查询 $row=mysqli_fetch_array($rs); if($row) { // 用户存在; if ($username == $row['username'] && $password == $row['password']) { //对密码进行判断。 echo "登陆成功,正在为你跳转至后台页面"; header("location:index.html"); } }else{ echo "账号或密码错误" . "<br/>"; echo "<a href='login.html'>返回登陆页面</a>"; } // 我这里没有数据库,所以右边会显示连接失败。 ?>
코스웨어