PHP 学习之数据库基本操作

写在前面,本章通过Laravel框架实现一个简单的增删改查操作


数据库连接设置:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=valet
DB_USERNAME=root
DB_PASSWORD=root

创建数据库迁移文件:

php artisan make:migration _create_users_table

编辑迁移生成文件:database\migrations\2018_08_19_112230_create_users_table.php

public function up()
    {   //创建users表
        Schema::create('users', function (Blueprint $table) {
            //increments创建一个integer类型自增id
            $table->increments('id');
            //string创建一个name字段用户保存用户名
            $table->string('name');
            //string创建一个email字段,unique指定该字段的唯一用于保存用户邮箱
            $table->string('email')->unique();
            //string创建一个password字段设定最大长度为16
            $table->string('password',16);
            //timestamps创建一个create_at和一个update_at字段分别用于保存用户的创建和更新时间
            $table->timestamps();
        });
    }
public function down()
    {
        //执行回滚时删除users表
        Schema::dropIfExists('users');
    }

执行迁移

php artisan migrate

数据库表:


users表

创建资源控制器:

php artisan make:controller UsersController --resource

路由:

Route::resource('users','UsersController');

基本页面:resources\views\layouts\default.blade.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@yield('title','default')</title>
    <link rel="stylesheet" type="text/css" media="screen" href="" />
</head>
<body>
    <div>
    @yield('centent')
    </div>  
</body>
</html>

信息提示:resources\views\layouts_messages.blade.php

@foreach (['danger', 'warning', 'success', 'info'] as $msg)
  @if(session()->has($msg))
    <div class="flash-message">
      <p class="alert alert-{{ $msg }}">
        {{ session()->get($msg) }}
      </p>
    </div>
  @endif
@endforeach

错误信息提示:resources\views\layouts_errors.blade.php

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

用户登录界面:resources\views\users\login.blade.php

@extends('layouts.default')
@section('title','登陆')

@section('centent')
    <form action="{{ route('users.store')}}" method = "post">
    
    {{ csrf_field()}}
        <table align = "center">
        
            <tr>
                <td colspan=2 align = "center">
                @include('layouts._errors')
                @include('layouts._messages')
                登 陆</td>
            </tr>
            <tr>
                <td>邮 箱:</td>
                <td><input type ="text" name = "email" value = "{{old('email')}}"/></td>
            </tr>
            <tr>
                <td>密 码:</td>
                <td><input type ="password" name = "password"/></td>
            </tr>
            <tr>
                <td align = "center">
                    <input type = "submit" value = "登陆"/>
                </td>
                <td>
                    <p>没有用户?现在就<a href="{{ route('users.create')}}">注册</a>吧</p>
                </td>
            </tr>
        </table>
    </form>
@stop

用户注册界面:resources\views\users\sgin_up.blade.php

@extends('layouts.default')
@section('title','注册')

@section('centent')
    <form action="{{ route('users.sginup')}}" method = "post">
    
    {{ csrf_field()}}
        <table align = "center">
        
        
            <tr>
                <td colspan=2 align = "center">@include('layouts._messages')@include('layouts._errors')注 册</td>
            </tr>
            <tr>
                <td>邮 箱:</td>
                <td><input type ="text" name = "email" value = "{{old('email')}}"/></td>
            </tr>
            <tr>
                <td>用户名:</td>
                <td><input type ="text" name = "name" value = "{{old('name')}}"/></td>
            </tr>
            <tr>
                <td>密 码:</td>
                <td><input type ="password" name = "password"/></td>
            </tr>
            <tr>
                <td>确认密码:</td>
                <td><input type ="password" name = "password_confirmation"/></td>
            </tr>
            <tr>
                <td align = "center" colspan = 4>
                    <input type = "submit" value = "注册"/>
                </td>
            </tr>
        </table>
    </form>
@stop

用户修改页面:resources\views\users\modify.blade.php

@extends('layouts.default')
@section('title','修改')

@section('centent')
    <form action="{{ route('users.update',$id)}}" method = "post">
    {{ method_field('put')}}
    {{ csrf_field()}}
        <table align = "center">
        
            <tr>

                <td colspan=2 align = "center">@include('layouts._errors')修 改</td>
            </tr>
            <tr>
                <td>邮 箱:</td>
                <td>{{ $email}}</td>
            </tr>
            <tr>
                <td>用户名:</td>
                <td><input type ="text" name = "name" value = "{{$name}}"/></td>
            </tr>
            <tr>
                <td>密 码:</td>
                <td><input type ="password" name = "password"/></td>
            </tr>
            <tr>
                <td>确认密码:</td>
                <td><input type ="password" name = "password_confirmation"/></td>
            </tr>
            <tr>
                <td align = "center" colspan = 4>
                    <input type = "submit" value = "修改"/>
                </td>
            </tr>
        </table>
    </form>
@stop

显示所有用户:resources\views\users\show_all.blade.php

@extends('layouts.default')
@section('title','所有用户')

@section('centent')
        <table align = "center">
            <tr>
                <td colspan=4 align = "center"> @include('layouts._messages')所有用户</td>
            </tr>
            <tr>
                <th>id</th>
                <th>用户名</th>
                <th>邮箱</th>
                <th>操作</th>
            </tr>
            @foreach($users as $user)
            <tr>
                <td>{{$user -> id}}</td>
                <td>{{$user -> name}}</td>
                <td>{{$user -> email}}</td>
                <td>
                    
                    <form method="POST" action = "{{ route('users.destroy',$user -> id)}}">
                        {{csrf_field()}}
                        {{ method_field('delete')}}
                        <a href = "{{ route('users.edit',$user -> id)}}">修改</a>
                        <input type = "submit" value = "删除"/>
                    </form>
                </td>
            </tr>
            @endforeach
        </table>  
@stop

路由:routes\web.php

Route::resource('users','UsersController');
Route::post('sginup','UsersController@sginUp') -> name('users.sginup');
Route::get('showAll','UsersController@showAll') -> name('user.showAll');

控制器:app\Http\Controllers\UsersController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class UsersController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
 
    public function index()
    {
        //返回用户登录界面
        return view('users.login');
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //返回用户登录界面
        return view('users.sgin_up');
    }
    /**
     * 
     * 用户注册
     */
    public function sginUp(Request $request){
        //验证规则
        $validatedData = $request->validate([
            //姓名不能为空
            'name' => 'required',
            //邮箱格式为Email不能为空最大255
            'email' => 'required|email|max:255',
            //两次密码一样不能为空最大16
            'password' => 'required|confirmed|max:16',
        ]);
        //从请求中获取email
        $email = $request -> input('email');
        //查询该email在数据库中是否存在
        $email = DB::select("select * from users where email = ?",[$email]);
        //如果为空则进行注册
        if(empty($email)){
            DB::insert("insert into users ( name,email,password) values (?,?,?)",[$request -> input('name'),$request -> input('email'),$request -> input('password')]);
            session() -> flash('success','注册成功');
            return redirect() -> action("UsersController@index");
        }else{
            session() -> flash('warning','邮箱已经存在');
            return back();
        }
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //验证规则
        $validatedData = $request->validate([
            //邮箱格式为Email不能为空最大255
            'email' => 'required|email|max:255',
            //密码不能为空最大16
            'password' => 'required|max:16',
        ]);
        //从请求中获取email
        $email = $request -> input('email');
        //查询该email在数据库中是否存在
        $email1 = DB::select("select * from users where email = ?",[$email]);
        //从请求中获取password
        $password = $request -> input('password');
        //通过Email查询密码
        $password1 = DB::select("select password from users where password = ?",[$email]);
        //取出查询到的密码
        foreach($password1 as $key){
            $password1 =  $key -> password;
        }
        //Email存在并且密码匹配则登陆成功
        if((!empty($email1))&&($password == $password1)){
            session() -> flash('success','登陆成功');
            return redirect() ->route('user.showAll');
        }else{
            session() -> flash('warning','用户名或密码输入错误');
            return back();
        }

    }
    /**
     * 显示所有用户
     */
    public function showAll(){
        $users  = DB::select("select * from users");
        return view('users.show_all',['users'=>$users]);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //通过id查相应用户
        $user = DB::select("select * from users where id = ?",[$id]);
        //去出该用户的信息
        foreach($user as $u){
           $email = $u -> email;
           $name = $u -> name;
        }
        //带参传入修改页面
        return view("users.modify",compact('email','name','id'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //验证规则
        $validatedData = $request->validate([
            'name' => 'required',
            'password' => 'required|confirmed|max:16',
        ]);
        //更新用户操作
        DB::update("update users set name = ?,password =? where id = ?",[$request -> input('name'),$request -> input('password'),$id]);
            session() -> flash('success','修改成功');
            return redirect() ->route('user.showAll');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //删除用户操作
        DB::delete('delete from users where id = ?',[$id]);
        session() -> flash('success','删除成功');
        return redirect() ->route('user.showAll');
    }
}

浏览器访问:http://localhost:8000/users
由于不知道怎么上传演示视频所以暂不上传了~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容