ThinkPHP 数据库的操作 控制器怎么写

怎么修改指定用户的余额

img

img

前端:

<div class="layui-card">
              <div class="layui-card-header">
                  下级用户
                  <!-- <a class="layui-icon" href="/user"><small>更多</small></a> -->
              </div>
              <form class="layui-form" id="user_money">
              <div class="layui-card-body layui-text">
                <table class="layui-table">
                  <thead>
                    <tr>
                      <th>用户id</th>
                      <th>用户名</th>
                      <th>余额</th>
                      <th>注册时间</th>
                      <th>多域名权限</th>
                      <th>操作</th>
                      <!-- <th>操作</th> -->
                  </thead>
                  <tbody>
                    {volist name="userlist" id="v"}
                    <tr>
                      <td>{$v.id}</td>
                      <td>{$v.email}</td>
                      <td>{$v.money}</td>
                      
                      <td>{$v.create_time|date="Y-m-d h:s"}</td>
                      <td class="td-manage">
                          <span href="javascript:;"  title="到期时间:{$v.many_lstime|date="Y-m-d"}">
                          {$v.many==0 ? '未开通':'<span class="x-red">已开通</span>'}
                        </span>                            
                      </td>
                      <td class="td-manage">
                          <input type="text" name="money" lay-verify="required" placeholder="{$v.money}" autocomplete="off" class="layui-input" style="display: inline;width: 20%;">
                            <button class="ml_btn" lay-filter="user_money">修改</button>
                                                        
                          </td>
                    </tr>
                    {/volist}
                  </tbody>
                </table>
                <div class="page">
                    <a href="{:url('daili/index/user_list')}" class="layui-laypage-next" data-page="2">更多»</a>
                </div>
              </div>
              </form>
            </div>


这是自己写的控制器,没效果不知道哪里的问题

//修改会员余额
    public function user_money()
    {
        $uid = Session::get('daili');
        $post = input('post.');
        $user_id = $post['user_id'];
        
        $data = [
            'uid'=>$user_id,
            'money'=>$post['money']
        ];
        $sql = daili::where('id',$uid)->update($data);
        if($sql){
            return json(jsoncode(1,'修改成功'));
        }else{
            return json(jsoncode(-1,'修改失败'));
        }
    }


//监听提交-修改用户余额
        form.on('submit(user_money)', function(data){
          
          //发异步,把数据提交给php
          var form = $("#user_money").serialize();
          $.ajax({
              url:'{:url("daili/index/user_money")}',
              type:'post',
              data:form,
              dataType:'json',
              success:function(data){
                  
                  if(data.code == 1){
                      layer.alert(data.msg, {icon: 6},function () {
                          //刷新当前页面
                        location.reload();
                      });
                      return false;
                  }else{
                      layer.msg(data.msg,{icon:5,time:2000});
                  }
              }
          });
          return false;
        });    
根据你提供的代码,修改指定用户的余额的代码应该如下:

public function user_money()
{
    $post = input('post.');
    $user_id = $post['user_id'];

    $data = [
        'money' => $post['money']
    ];
    $sql = daili::where('id', $user_id)->update($data);
    if($sql){
        return json(jsoncode(1,'修改成功'));
    } else {
        return json(jsoncode(-1,'修改失败'));
    }
}
在前端部分,你需要修改以下内容:

在每个需要修改余额的用户前面添加一个隐藏的 input 元素,用于存储用户的 id 值:
<input type="hidden" name="user_id" value="{$v.id}">
修改表单的 id 值,使其与控制器中的函数名一致:
<form class="layui-form" id="user_money">
这样,在提交表单的时候,会将用户 id 和新余额一起提交到控制器中,从而完成余额的修改。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据前端代码可以看到,需要修改的用户余额信息通过表格显示,并提供了一个修改按钮。点击修改按钮后,会通过AJAX向服务器发送一个POST请求,请求数据会包含要修改的用户ID和余额。因此,我们需要在控制器中处理这个请求。

首先,我们需要在控制器中引入要操作的模型文件daili.php。这里假设我们的模型文件中定义的表名为“user”。

use app\model\daili;

然后,在控制器的user_money()方法中加入如下代码:

//修改会员余额
public function user_money()
{
    $user_id = input('post.user_id'); //获取待修改的用户ID
    $money = input('post.money'); //获取要修改的金额

    $result = daili::where('id', $user_id)->setField('money', $money);
    if ($result !== false) {
        return json(['code' => 1, 'msg' => '修改成功']);
    } else {
        return json(['code' => -1, 'msg' => '修改失败']);
    }
}

这里使用了ThinkPHP自带的数据库操作方法setField()来更新用户余额信息。根据文档说明,setField()方法会将指定字段更新为指定值,并返回受影响的行数。如果更新成功,返回值应该是一个正整数,否则应该是false。

注意,返回JSON数据的格式应该是{'code':1,'msg':'修改成功'},因为前端代码需要根据这个返回值来进行提示。

最后,在前端代码中,给修改按钮添加一个自定义属性data-userid,用于保存待修改的用户ID。修改按钮的HTML代码应该如下所示:

<button class="ml_btn" lay-filter="user_money" data-userid="{$v.id}">修改</button>

然后,在AJAX请求中,获取该属性的值,并将其作为POST请求数据的user_id字段:

var user_id = $(this).data('userid');
$.ajax({
    url: '{:url("daili/index/user_money")}',
    type: 'post',
    data: {user_id: user_id, money: money},
    dataType: 'json',
    success: function(data) {
        //… 省略其他代码 …
    }
});

这样,就完成了修改用户余额的操作。完整的控制器代码如下所示:

<?php
namespace app\controller;

use think\facade\Session;
use app\model\daili;

class Index extends Base
{
    //其他代码省略

    //修改会员余额
    public function user_money()
    {
        $user_id = input('post.user_id'); //获取待修改的用户ID
        $money = input('post.money'); //获取要修改的金额

        $result = daili::where('id', $user_id)->setField('money', $money);
        if ($result !== false) {
            return json(['code' => 1, 'msg' => '修改成功']);
        } else {
            return json(['code' => -1, 'msg' => '修改失败']);
        }
    }
}

如果我的回答解决了您的问题,请采纳!