Exemple de code d'implémentation de l'interface PHP et de l'interaction avec les données frontales

不言
Libérer: 2023-03-24 21:10:02
original
2768 Les gens l'ont consulté

Cet article présente principalement l'exemple de code pour l'interface php et l'interaction des données frontales. Il utilise principalement php+bootstrap-table+js, qui a une certaine valeur de référence. Ceux qui sont intéressés peuvent en apprendre davantage

Récemment, en essayant d'interagir avec les données front-end et back-end, j'ai également sauté dans de nombreux pièges, j'ai utilisé php+bootstrap-table+js et j'ai enregistré quelques gains ici pour une requête facile.

Ce petit projet ne comporte que 3 fichiers, à savoir :


1.crud.html

2.data.php
3.crud.sql

Implémentation de l'interaction avec les données 1 : Requête

1.Création de table de base de données mysql

2.Interface de requête php
3.Affichage des données frontales
.

Création d'une table de base de données mysql

  • Nom de la base de données : crud

  • Nom de la première table : t_users

  • Clé primaire : user_id, arrangement d'incrémentation automatique

php :

<?php
  //测试php是否可以拿到数据库中的数据
  /*echo "44444";*/
  
  //做个路由 action为url中的参数
  $action = $_GET[&#39;action&#39;];

  switch($action) {
    case &#39;init_data_list&#39;:
      init_data_list();
      break;
    case &#39;add_row&#39;:
      add_row();
      break;
    case &#39;del_row&#39;:
      del_row();
      break;
    case &#39;edit_row&#39;:
      edit_row();
      break;
  }
  
  //查询方法
  function init_data_list(){
    //测试 运行crud.html时是否可以获取到 下面这个字符串
    /*echo "46545465465456465";*/
    
    //查询表
    $sql = "SELECT * FROM `t_users`";
    $query = query_sql($sql);
    while($row = $query->fetch_assoc()){
      $data[] = $row;
    }
    
    $json = json_encode(array(
      "resultCode"=>200,
      "message"=>"查询成功!",
      "data"=>$data
    ),JSON_UNESCAPED_UNICODE);
    
    //转换成字符串JSON
    echo($json);
  }
  
  
  /**查询服务器中的数据
   * 1、连接数据库,参数分别为 服务器地址 / 用户名 / 密码 / 数据库名称
   * 2、返回一个包含参数列表的数组
   * 3、遍历$sqls这个数组,并把返回的值赋值给 $s
   * 4、执行一条mysql的查询语句
   * 5、关闭数据库
   * 6、返回执行后的数据
   */
  function query_sql(){
    $mysqli = new mysqli("127.0.0.1", "root", "root", "crud");
    $sqls = func_get_args();
    foreach($sqls as $s){
      $query = $mysqli->query($s);
    }
    $mysqli->close();
    return $query;
  }
?>
Copier après la connexion

Implémentation front-end :

<!DOCTYPE html>
<html>

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-table/1.11.1/bootstrap-table.min.css" rel="external nofollow" >
    <!-- jQuery -->
    <script type="text/javascript" src="http://code.changer.hk/jquery/1.11.2/jquery.min.js"></script>
    <script type="text/javascript" src="http://code.changer.hk/jquery/plugins/jquery.cookie.js"></script>
    <!-- bootstrap-table -->
    <link rel="stylesheet" href="http://code.changer.hk/bootstrap-table/1.6.0/bootstrap-table.min.css" rel="external nofollow" >
    <script type="text/javascript" src="http://code.changer.hk/bootstrap-table/1.6.0/bootstrap-table.min.js"></script>
    <style type="text/css">
      #table {
        padding: 0;
      }
      
      #table>tbody>tr {
        cursor: pointer;
      }
      
      #table>tbody>tr>td.bs-checkbox {
        vertical-align: middle;
      }
    </style>
    <title>增删改查</title>
  </head>

  <body style="padding: 50px;">
    <p class="toolbar1" style="margin-bottom: -43px;">
      <button id="remove" class="btn btn-danger" disabled>删除</button>
      <button class="btn btn-primary" id="btn">新建</button>
    </p>
    <p id="table"></p>

    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    <!-- Latest compiled and minified JavaScript -->
    <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-table/1.11.1/bootstrap-table.min.js"></script>
    <!-- Latest compiled and minified Locales -->
    <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-table/1.11.1/locale/bootstrap-table-zh-CN.min.js"></script>
    <script type="text/javascript">
      var $table = $(&#39;#table&#39;),
        $remove = $(&#39;#remove&#39;);

      $(function() {
        searchData();
      });

      function prepareDisplayData(data) {
        return {
          total: data.data.length,
          fixedScroll: false,
          rows: data.data
        };
      }

      function searchData() {
        var search_url = "./php/data.php";

        //url 中问号后面的参数 action,这个对象就是查询的参数
        var dataParam = {
          action: "init_data_list"
        };

        $.ajax({
          type: "get",
          url: search_url,
          data: dataParam,
          dataType: &#39;json&#39;,
          contentType: &#39;application/json; charset=utf-8&#39;,
          success: function(data) {
            //测试是否可以拿到php中的数据
            console.log(data);
            //遍历这个数组
            if(data.resultCode == 200) {
              var itemArr = data.data;
              for(var i = 0; i < itemArr.length; i++) {
                var item = itemArr[i];
                console.log(item);
              }
            }

            //bootstrap-table 组织数据
            var displayData = prepareDisplayData(data);
            if(displayData.total > 0) {
              $(&#39;#table&#39;).bootstrapTable(&#39;load&#39;, displayData);
            } else {
              console.log("last page or empty.");
            }
          },
          error: function(data) {
            alert(&#39;服务器出错&#39;);
          },
        });
      }

      $(&#39;#table&#39;).bootstrapTable({
        pagination: true,
        sidePagination: &#39;server&#39;, //设置为服务器端分页
        pageNumber: 1,
        pageSize: 10,
        pageList: [10, 20, 50, 100],
        search: true,
        showColumns: true,
        showRefresh: true,
        columns: [{
          field: &#39;state&#39;,
          checkbox: true,
        }, {
          field: &#39;user_id&#39;,
          title: &#39;用户Id&#39;,
          width: &#39;50&#39;,
          align: &#39;center&#39;,
          valign: &#39;middle&#39;
        }, {
          field: &#39;user_name&#39;,
          title: &#39;用户名称&#39;,
          width: &#39;500&#39;,
          align: &#39;center&#39;,
          valign: &#39;middle&#39;
        }, {
          field: &#39;user_age&#39;,
          title: &#39;用户年龄&#39;,
          width: &#39;500&#39;,
          align: &#39;center&#39;,
          valign: &#39;middle&#39;
        }, {
          field: &#39;user_sex&#39;,
          title: &#39;用户性别&#39;,
          width: &#39;500&#39;,
          align: &#39;center&#39;,
          valign: &#39;middle&#39;
        }, {
          field: &#39;user_add&#39;,
          title: &#39;编辑&#39;,
          formatter: forwardFormatter,
          width: &#39;500&#39;,
          align: &#39;center&#39;,
          valign: &#39;middle&#39;
        }]
      }).on(&#39;page-change.bs.table&#39;, function(e, page, size) {
        fillData();
      }).on(&#39;check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table&#39;, function() {
        var tes = !$table.bootstrapTable(&#39;getSelections&#39;).length
        $remove.prop(&#39;disabled&#39;, !$table.bootstrapTable(&#39;getSelections&#39;).length);
      });

      
      function forwardFormatter(value, row, index) {
        var value = "修改";
        return "<a href=&#39;#/" + row.user_id + "&#39; class=&#39;btn btn-link&#39;>" + value + "</a>";
      }
    </script>
  </body>
</html>
Copier après la connexion

Effet d'implémentation :

Implémentation de l'interaction avec les données 2 : Supprimer

a rencontré de nombreux pièges lors de la suppression. La raison est que je ne suis pas familier avec les instructions SQL et PHP. Cependant, j'ai résumé les points suivants, pour référence :

1.delete Les paramètres renvoyés ne peuvent être obtenus qu'avec $_GET

2.delete Les paramètres renvoyés doivent être placés dans l'URL, pas dans le corps dans le corps Les paramètres sont utilisés ; pour les requêtes ;

3. Vous devez maîtriser les instructions SQL, et si vous faites une erreur, vous en ferez une autre

4. Pour exécuter des instructions SQL dans la base de données pour vérifier si ; les instructions sont exécutées correctement, vous devez utiliser Rest Client pour tester si la requête URL est correcte

php:

<?php
  //测试php是否可以拿到数据库中的数据
  /*echo "44444";*/
  
  //做个路由 action为url中的参数
  $action = $_GET[&#39;action&#39;];

  switch($action) {
    case &#39;init_data_list&#39;:
      init_data_list();
      break;
    case &#39;add_row&#39;:
      add_row();
      break;
    case &#39;del_row&#39;:
      del_row();
      break;
    case &#39;edit_row&#39;:
      edit_row();
      break;
  }

//删除方法
  function del_row(){
    //测试
    /*echo "ok!";*/
    
    //接收传回的参数
    $rowId = $_GET[&#39;rowId&#39;];
    $sql = "delete from t_users where user_id=&#39;$rowId&#39;";
    
    if(query_sql($sql)){
      echo "ok!";
    }else{
      echo "删除失败!";
    }
  }
?>
Copier après la connexion

Front ; -fin d'implémentation Partie JS :

var $table = $(&#39;#table&#39;),
  $remove = $(&#39;#remove&#39;);

  $(function() {
    delData();
  });

function delData() {
        $remove.on(&#39;click&#39;, function() {
          if(confirm("是否继续删除")) {
            var rows = $.map($table.bootstrapTable(&#39;getSelections&#39;), function(row) {
              //返回选中的行的索引号
              return row.user_id;
            });
          }
          
          $.map($table.bootstrapTable(&#39;getSelections&#39;),function(row){
            var del_url = "./php/data.php";
            //根据userId删除数据,因为这个id就是 传给服务器的参数
            var rowId = row.user_id;
            
            $.ajax({
              type:"delete",
              url:del_url + "?action=del_row&rowId=" + rowId,
              dataType:"html",
              contentType: &#39;application/json;charset=utf-8&#39;,
              success: function(data) {
                $table.bootstrapTable(&#39;remove&#39;,{
                  field: &#39;user_id&#39;,
                  values: rows
                });
                $remove.prop(&#39;disabled&#39;, true);
              },
              error:function(data){
                alert(&#39;删除失败!&#39;);
              }
            });
          });
        })
      }
Copier après la connexion

Méthode de débogage :

Implémentation de l'interaction de données 3 : Ajouter un nouveau

En termes de méthode d'écriture PHP, je pense qu'il y a un problème avec ma méthode , parce que tous les paramètres, c'est-à-dire toutes les données qui doivent être ajoutées, tout au long de l'interface ? La méthode suivie des paramètres est ajoutée avec succès. La fonction peut être implémentée, mais si les données nouvellement ajoutées sont volumineuses, cette méthode n'est pas réalisable, mais une méthode appropriée n'a pas encore été trouvée. Veuillez me donner quelques conseils.

php :

<?php
  //测试php是否可以拿到数据库中的数据
  /*echo "44444";*/
  
  //做个路由 action为url中的参数
  $action = $_GET[&#39;action&#39;];

  switch($action) {
    case &#39;init_data_list&#39;:
      init_data_list();
      break;
    case &#39;add_row&#39;:
      add_row();
      break;
    case &#39;del_row&#39;:
      del_row();
      break;
    case &#39;edit_row&#39;:
      edit_row();
      break;
  }

//新增方法
  function add_row(){
    /*获取从客户端传过来的数据*/
    $userName = $_GET[&#39;user_name&#39;];
    $userAge = $_GET[&#39;user_age&#39;];
    $userSex = $_GET[&#39;user_sex&#39;];
    //INSERT INTO 表名 (列名1,列名2,...)VALUES (&#39;对应的数据1&#39;,&#39;对应的数据2&#39;,...)
    // VALUES 的值全为字符串,因为表属性设置为字符串
    $sql = "INSERT INTO t_users (user_name,user_age,user_sex) VALUES (&#39;$userName&#39;,&#39;$userAge&#39;,&#39;$userSex&#39;)";
    if(query_sql($sql)){
      echo "ok!";
    }else{
      echo "新增成功!";
    }
  }

  function query_sql(){
    $mysqli = new mysqli("127.0.0.1", "root", "root", "crud");
    $sqls = func_get_args();
    foreach($sqls as $s){
      $query = $mysqli->query($s);
    }
    $mysqli->close();
    return $query;
  }
?>
Copier après la connexion

Partie JS d'implémentation front-end :

html utilise le modal bootstrap comme nouvel ajout La boîte pop-up

<!--新增弹框-->
    <p class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
      <p class="modal-dialog" role="document">
        <p class="modal-content">
          <p class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
            <h4 class="modal-title" id="exampleModalLabel">用户新增</h4>
          </p>
          <p class="modal-body">
            <form id="listForm" method="post">
              <p class="form-group">
                <label for="userName" class="control-label">用户名称</label>
                <input type="text" class="form-control" id="userName">
              </p>
              <p class="form-group">
                <label for="userAge" class="control-label">用户年龄</label>
                <input type="text" class="form-control" id="userAge">
              </p>
              <p class="form-group">
                <label class="control-label" for="user-sex">用户性别</label>
                <p class="">
                  <select id="user-sex" class="form-control" name="user-sex" style="width: 100%" >
                    <option value=&#39;-1&#39;>请选择</option>
                    <option value=&#39;0&#39;>男</option>
                    <option value=&#39;1&#39;>女</option>
                  </select>
                </p>
              </p>
            </form>
          </p>
          <p class="modal-footer">
            <button id="close" type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
            <button id="save" type="button" class="btn btn-primary">保存</button>
          </p>
        </p>
      </p>
    </p>
Copier après la connexion

var $table = $(&#39;#table&#39;),
   $remove = $(&#39;#remove&#39;);

  $(function() {
      searchData();
    delData();
        
    $(&#39;#save&#39;).click(function(){
      addData();
    });
  }); 
function addData(){
        var userName = $(&#39;#userName&#39;).val();
        var userAge = $("#userAge").val();
        var userSex = $(&#39;#user-sex&#39;).val() == &#39;0&#39; ? &#39;男&#39; : &#39;女&#39;;
        
        var addUrl = "./php/data.php?action=add_row&user_name=" + userName + "&user_age=" + userAge + "&user_sex=" + userSex;
        
        $.ajax({
          type:"post",
          url:addUrl,
          dataType:&#39;json&#39;,
          contentType:&#39;application/json;charset=utf-8&#39;,
          success:function(data){
            console.log("success");
          },
          error:function(data){
            console.log("data");
            //添加成功后隐蒧modal框
            setTimeout(function(){
              $(&#39;#exampleModal&#39;).modal(&#39;hide&#39;);
            },500);
              //隐藏modal框后重新加载当前页
            setTimeout(function(){
              searchData();
            },700);
          }
        });
      }
Copier après la connexion

Jusqu'à présent, les problèmes suivants n'ont pas été résolu :


1. Vérification du formulaire


2. Comment php reçoit-il les paramètres après l'ajout de plusieurs données ; Une fois l'ajout réussi, dans la méthode $.ajax, pourquoi d'autres opérations après un ajout réussi devraient-elles être implémentées dans l'objet d'erreur ? Au lieu de le mettre en œuvre avec succès ?


Recommandations associées :


Comment PHP interagit avec les données js


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal