HTTP对话及基于数据库的增删改案例

  • COOKIE

HTTP很重要的一个特点就是无状态,如果单纯希望通过我们的服务端去记住每一个访问者是不可能的,所以必须借助一些手段来让服务器记住客户端,这种手段就是Cookie

Cookie就像是在超市买东西拿到的小票,由超市(服务器)发给消费者(客户端),超市不需要记住消费者的脸,但是他们认识消费者手里的小票(Cookie),可以通过小票知道消费者之间的一些消费信息(在服务端产生的数据)

Cookie的一个案例-猜数字

<?php


//判断游戏开始的条件,如果cookie为空,则生成一个cookie
if (empty($_COOKIE['num'])) {
    //生成一个1-100的随机数
    $num = rand(0,100);
    //将这个数以cookie的方式储存到本地
    setcookie('num',$num);
}else {
   //每执行一次else就相当于提交了一次
  $count =  empty($_COOKIE['count']) ? 0 : (int)$_COOKIE['count'];
  if ($count < 10) {
  //在游戏中cookie和用户提交的数字进行对比
  $result = (int)$_GET['num']-(int)$_COOKIE['num'];
  if ($result == 0) {
   echo "猜对了";
   setcookie('num');
   setcookie('count');
  }elseif ($result > 0) {
    echo "太大了";
  }elseif ($result < 0) {
    echo "太小了";
  }
  setcookie('count',$count +1);
  }else {
    echo "太low了";
    setcookie('num');
    setcookie('count');
  }
}


?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>猜数字</title>
  <style>
    body {
      padding: 100px 0;
      background-color: #2b3b49;
      color: #fff;
      text-align: center;
      font-size: 2.5em;
    }
    input {
      padding: 5px 20px;
      height: 50px;
      background-color: #3b4b59;
      border: 1px solid #c0c0c0;
      box-sizing: border-box;
      color: #fff;
      font-size: 20px;
    }
    button {
      padding: 5px 20px;
      height: 50px;
      font-size: 16px;
    }
  </style>
</head>
<body>
  <h1>猜数字游戏</h1>
  <p>Hi,我已经准备了一个0~100的数字,你需要在仅有的10机会之内猜对它。</p>
  <?php if (isset($message)): ?>
  <p><?php echo $message; ?></p>
  <?php endif ?>
  <form action="index1.php" method="get">
    <input type="number" min="0" max="100" name="num" placeholder="随便猜">
    <button type="submit">试一试</button>
  </form>
</body>
</html>

 

  • Session

由于Cookie是服务端下发给客户端由客户端本地保存的。换而言之客户端可以在本地对其随意操作,包括删除和修改。如果客户端随意伪造一个Cookie的话,对于服务端是无法辨别的,就会造成服务端被蒙蔽,构成安全隐患。

于是有了另外一种基于Cookie基础之上的手段:Session

Session区别于Cookie一个很大的地方就是Session把数据存在了服务端,而给到客户端本地的只是一把‘钥匙’,伪造一把可以用的钥匙,可能性是极地的,所以不需要在意

下面是基于Session的猜数字案例

<?php

session_start();
//判断游戏开始的条件,如果session为空,则生成一个session
if (empty($_SESSION['num']) || empty($_SESSION['count'])) {
    //生成一个1-100的随机数
    $num = rand(0,100);
    //存在本地不安全,存在服务端的箱子里
    $_SESSION['num'] = $num;
}else {
   //每执行一次else就相当于提交了一次
  $count =  empty($_SESSION['count']) ? 0 : (int)$_SESSION['count'];
  if ($count < 10) {
  //在游戏中cookie和用户提交的数字进行对比
  $result = (int)$_GET['num']-$_SESSION['num'];
  if ($result == 0) {
   echo "猜对了";
   unset($_SESSION['num']);
   unset($_SESSION['num']);
  }elseif ($result > 0) {
    echo "太大了";
  }elseif ($result < 0) {
    echo "太小了";
  }
  $_SESSION['count'] = $count +1;
  }else {
    echo "太low了";
    unset($_SESSION['num']);
   unset($_SESSION['num']);
  }
}


?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>猜数字</title>
  <style>
    body {
      padding: 100px 0;
      background-color: #2b3b49;
      color: #fff;
      text-align: center;
      font-size: 2.5em;
    }
    input {
      padding: 5px 20px;
      height: 50px;
      background-color: #3b4b59;
      border: 1px solid #c0c0c0;
      box-sizing: border-box;
      color: #fff;
      font-size: 20px;
    }
    button {
      padding: 5px 20px;
      height: 50px;
      font-size: 16px;
    }
  </style>
</head>
<body>
  <h1>猜数字游戏</h1>
  <p>Hi,我已经准备了一个0~100的数字,你需要在仅有的10机会之内猜对它。</p>
  <?php if (isset($message)): ?>
  <p><?php echo $message; ?></p>
  <?php endif ?>
  <form action="index1.php" method="get">
    <input type="number" min="0" max="100" name="num" placeholder="随便猜">
    <button type="submit">试一试</button>
  </form>
</body>
</html>

 

  • 基于数据库的增删改案例

1、index页面

通过与数据库的连接拿到一些储存在服务端的数据(假数据)

<?php 
//连接数据库
$conn = mysqli_connect('127.0.0.1','root','123','demo');
if (!$conn) {
  exit('<h1>数据库连接失败</h1>');
}
//查询
$query = mysqli_query($conn,'select * from users;');
if (!$query) {
  exit('<h1>查询失败</h1>');
}
 ?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>XXX管理系统</title>
  <link rel="stylesheet" href="assets/css/bootstrap.css">
  <link rel="stylesheet" href="assets/css/style.css">
</head>
<body>
  <nav class="navbar navbar-expand navbar-dark bg-dark fixed-top">
    <a class="navbar-brand" href="#">XXX管理系统</a>
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="index.html">用户管理</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">商品管理</a>
      </li>
    </ul>
  </nav>
  <main class="container">
    <h1 class="heading">用户管理 <a class="btn btn-link btn-sm" href="add.php">添加</a></h1>
    <table class="table table-hover">
      <thead>
        <tr>
          <th>#</th>
          <th>头像</th>
          <th>姓名</th>
          <th>性别</th>
          <th>年龄</th>
          <th class="text-center" width="140">操作</th>
        </tr>
      </thead>
      <tbody>
      <?php while ( $item = mysqli_fetch_assoc($query)):?>
         <tr>
          <th scope="row"><?php echo $item['id'] ?></th>
          <td><img src="<?php echo $item['avatar']; ?>" class="rounded" alt="<?php echo $item['name'] ?>"></td>
          <td><?php echo $item['name'] ?></td>
          <td><?php echo $item['gender'] == 0 ? '♀':'♂'; ?></td>
          <td><?php echo $item['birthday'] ?></td>
          <td class="text-center">
            <a class="btn btn-info btn-sm" href="edit.php?id= <?php echo $item['id'] ?>">编辑</a>
            <a class="btn btn-danger btn-sm" href="delete.php?id= <?php echo $item['id'] ?>">删除</a>
          </td>
        </tr>  
    <?php endwhile ?>               
      </tbody>
    </table>
    <ul class="pagination justify-content-center">
      <li class="page-item"><a class="page-link" href="#">&laquo;</a></li>
      <li class="page-item"><a class="page-link" href="#">1</a></li>
      <li class="page-item"><a class="page-link" href="#">2</a></li>
      <li class="page-item"><a class="page-link" href="#">3</a></li>
      <li class="page-item"><a class="page-link" href="#">&raquo;</a></li>
    </ul>
  </main>
</body>
</html>

 

2、add页面

添加页面,通过数据库把用户添加的信息传到服务端进行解析,呈现到网页上

<?php 
function add(){
 //1.验证非空
  
if (empty($_POST['name'])) {
  $GLOBALS['error_message'] = '请输入姓名';
  return;
}
if (!(isset($_POST['gender']) && $_POST['gender'] !== '-1')) {
  $GLOBALS['error_message'] = '请选择性别';
  return;
}
if (empty($_POST['birthday'])) {
  $GLOBALS['error_message'] = '请输入生日';
  return;
}

//2.取值
$name = $_POST['name'];
$gender = $_POST['gender'];
$birthday = $_POST['birthday'];

//3.接收文件并验证

if (empty($_FILES['avatar'])) {
  $GLOBALS['error_message'] = '上传文件失败';
  return;
}
$files = $_FILES['avatar'];
if ($files['error'] !== UPLOAD_ERR_OK) {
  $GLOBALS['error_message'] = '请上传文件';
  return;
}
$ect = pathinfo($files['name'],PATHINFO_EXTENSION);
$target = '../upload/'. uniqid() . '.' . $ect;
if (!move_uploaded_file($files['tmp_name'], $target)) {
   $GLOBALS['error_message'] = '上传文件失败';
  return;
}
//4.保存
$avatar = substr($target, 2);
//连接数据库
$conn = mysqli_connect('127.0.0.1','root','123','demo');
if (!$conn) {
  exit('<h1>数据库连接失败</h1>');
}
//增加
$query = mysqli_query($conn,"insert into users values(null,'{$avatar}','{$name}',$gender,'$birthday');");
if (!$query) {
  exit('<h1>查询数据失败</h1>');
}
$rows = mysqli_affected_rows($conn);
if ($rows !== 1) {
   exit('<h1>增加失败</h1>');
}
//5.响应
header('Location:index.php');
}


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  add();
}

 ?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>XXX管理系统</title>
  <link rel="stylesheet" href="assets/css/bootstrap.css">
  <link rel="stylesheet" href="assets/css/style.css">
</head>
<body>
  <nav class="navbar navbar-expand navbar-dark bg-dark fixed-top">
    <a class="navbar-brand" href="#">XXX管理系统</a>
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="index.html">用户管理</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">商品管理</a>
      </li>
    </ul>
  </nav>
  <main class="container">
    <h1 class="heading">添加用户</h1>
   <?php if (isset($error_message)): ?>
      <div class="alert alert-warning">
      <?php echo $error_message ?>
    </div>
   <?php endif ?>
    <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method = 'post' enctype = 'multipart/form-data' autocomplete='Off'>
      <div class="form-group">
        <label for="avatar">头像</label>
        <input type="file" class="form-control" id="avatar" name="avatar">
      </div>
      <div class="form-group">
        <label for="name">姓名</label>
        <input type="text" class="form-control" id="name" name="name">
      </div>
      <div class="form-group">
        <label for="gender">性别</label>
        <select class="form-control" id="gender" name="gender">
          <option value="-1">请选择性别</option>
          <option value="1">男</option>
          <option value="0">女</option>
        </select>
      </div>
      <div class="form-group">
        <label for="birthday">生日</label>
        <input type="date" class="form-control" id="birthday" name="birthday">
      </div>
      <button class="btn btn-primary">保存</button>
    </form>
  </main>
</body>
</html>

 

3、删除页面

通过执行PHP代码把数据库中想要删除的那一条删掉

<?php
//获取到要删除的数据
if (empty($_GET['id'])) {
	exit('<h1>请正确删除</h1>');
}
$id = $_GET['id'];
//连接数据库
$conn = mysqli_connect('127.0.0.1','root','123','demo');
if (!$conn) {
  exit('<h1>数据库连接失败</h1>');
}
//删除
$query = mysqli_query($conn,'delete from users where id = ' . $id . ';');
if (!$query) {
  exit('<h1>查询数据失败</h1>');
}
$rows = mysqli_affected_rows($conn);
if ($rows <=0) {
	 exit('<h1>删除失败</h1>');
}
header('Location:index.php');

 

 

 

4、编辑页面

通过PHP代码修改数据库中想要修改的那一条数据

<?php
//获取到要编辑的数据
if (empty($_GET['id'])) {
	exit('<h1>请正确选择</h1>');
}
$id = $_GET['id'];
//连接数据库
$conn = mysqli_connect('127.0.0.1','root','123','demo');
if (!$conn) {
  exit('<h1>数据库连接失败</h1>');
}
//查询
$query = mysqli_query($conn,"select * from users where id = {$id} limit 1;");
if (!$query) {
  exit('<h1>查询数据失败</h1>');
}
$users = mysqli_fetch_assoc($query);
if (!$users) {
	exit('<h1>找不到你要编辑的数据</h1>');
}


function edit(){
	global $users;
 //1.验证非空 
if (empty($_POST['name'])) {
  $GLOBALS['error_message'] = '请输入姓名';
  return;
}
if (!(isset($_POST['gender']) && $_POST['gender'] !== '-1')) {
  $GLOBALS['error_message'] = '请选择性别';
  return;
}
if (empty($_POST['birthday'])) {
  $GLOBALS['error_message'] = '请输入生日';
  return;
}

//2.取值
$users['name'] = $_POST['name'];
$users['gender'] = $_POST['gender'];
$users['birthday'] = $_POST['birthday'];
//var_dump($users);
//检验是否提交了新头像
if (isset($_FILES['avatar']) && $_FILES['avatar']['error'] == UPLOAD_ERR_OK) {
	$ect = pathinfo($_FILES['avatar']['name'],PATHINFO_EXTENSION);
    $target = '../upload/'. uniqid() . '.' . $ect;
if (!move_uploaded_file($_FILES['avatar']['tmp_name'], $target)) {
   $GLOBALS['error_message'] = '上传文件失败';
  return;
}
//4.保存
$users['avatar'] = substr($target, 2);
}
$conn = mysqli_connect('127.0.0.1','root','123','demo');
if (!$conn) {
  exit('<h1>数据库连接失败</h1>');
}
//查询
$query = mysqli_query($conn,"update users set name = '{$users['name']}',avatar='{$users['avatar']}',gender = {$users['gender']},birthday = '{$users['birthday']}' where id = {$users['id']};");
if (!$query) {
  exit('<h1>查询数据失败</h1>');
}
$user = mysqli_affected_rows($conn);
if ($user < 0) {
	exit('<h1>更新失败</h1>');
}
header('Location:index.php');
}


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	edit();
}




?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>XXX管理系统</title>
  <link rel="stylesheet" href="assets/css/bootstrap.css">
  <link rel="stylesheet" href="assets/css/style.css">
</head>
<body>
  <nav class="navbar navbar-expand navbar-dark bg-dark fixed-top">
    <a class="navbar-brand" href="#">XXX管理系统</a>
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="index.html">用户管理</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">商品管理</a>
      </li>
    </ul>
  </nav>
  <main class="container">
    <h1 class="heading">编辑"<?php echo $users['name'] ?>"</h1>
   <?php if (isset($error_message)): ?>
      <div class="alert alert-warning">
      <?php echo $error_message ?>
    </div>
   <?php endif ?>
    <form action="<?php echo $_SERVER['PHP_SELF'] ?>?id=<?php echo $users['id'] ?>" method = 'post' enctype = 'multipart/form-data' autocomplete='Off'>
    	<img src="<?php echo $users['avatar'] ?>"" alt="">
      <div class="form-group">
        <label for="avatar">头像</label>
        <input type="file" class="form-control" id="avatar" name="avatar">
      </div>
      <div class="form-group">
        <label for="name">姓名</label>
        <input type="text" class="form-control" id="name" name="name" value="<?php echo $users['name'] ?>">
      </div>
      <div class="form-group">
        <label for="gender">性别</label>
        <select class="form-control" id="gender" name="gender">
          <option value="-1">请选择性别</option>
          <option value="1"<?php echo $users['gender'] === '1' ? ' selected':''; ?>>男</option>
          <option value="0"<?php echo $users['gender'] === '0' ? ' selected':''; ?>>女</option>
        </select>
      </div>
      <div class="form-group">
        <label for="birthday">生日</label>
        <input type="date" class="form-control" id="birthday" name="birthday" value="<?php echo $users['birthday'] ?>">
      </div>
      <button class="btn btn-primary">保存</button>
    </form>
  </main>
</body>
</html>

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3876057/blog/1829134

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值