使用 PHP 在 CodeIgniter 中使用用户输入的值更新数据库表

Posted

技术标签:

【中文标题】使用 PHP 在 CodeIgniter 中使用用户输入的值更新数据库表【英文标题】:Update Database tables with values input by user in CodeIgniter using PHP 【发布时间】:2017-02-27 06:50:38 【问题描述】:

我正在尝试使用取自用户的值更新数据库中的一个用户表。但由于某种原因,它没有更新任何内容。

HTML 表单

<form class="form-horizontal" method = "post">
<fieldset>

    <!-- Form Name -->
    <legend>User Details</legend>

    <div>
        <?php echo $this->session->flashdata('msg'); ?>
    </div>

    <!-- Text input-->
    <div class="form-group">
        <label class="col-md-4 control-label" for="name">Full Name</label>
        <div class="col-md-8">
            <input id="name" name="name" type="text" placeholder="something" class="form-control input-md">

        </div>
    </div>

    <!-- Text input-->
    <div class="form-group">
        <label class="col-md-4 control-label" for="dob">Date of Birth</label>
        <div class="col-md-4">
            <input id="dob" name="dob" type="text" placeholder="" class="form-control input-md">

        </div>
    </div>

    <!-- Multiple Radios -->
    <div class="form-group">
        <label class="col-md-4 control-label" for="gender">Gender</label>
        <div class="col-md-2">
            <select id="gender" name="gender" class="form-control">
                <option value="1">Male</option>
                <option value="2">Female</option>
            </select>
        </div>
    </div>

    <!-- Text input-->
    <div class="form-group">
        <label class="col-md-4 control-label" for="degree">Degree</label>
        <div class="col-md-8">
            <input id="degree" name="degree" type="text" placeholder="degree" class="form-control input-md">

        </div>
    </div>

    <!-- Text input-->
    <div class="form-group">
        <label class="col-md-4 control-label" for="specialization">Specialization</label>
        <div class="col-md-8">
            <input id="specialization" name="specialization" type="text" placeholder="specialization" class="form-control input-md">

        </div>
    </div>

    <!-- Select Basic -->
    <div class="form-group">
        <label class="col-md-4 control-label" for="year">Degree Year</label>
        <div class="col-md-2">
            <select id="year" name="year" class="form-control">
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
            </select>
        </div>
    </div>

    <!-- Select Basic -->
    <div class="form-group">
        <label class="col-md-4 control-label" for="semester">Semester</label>
        <div class="col-md-2">
            <select id="semester" name="semester" class="form-control">
                <option value="1">1</option>
                <option value="2">2</option>
            </select>
        </div>
    </div>

    <!-- File Button -->
    <div class="form-group">
        <label class="col-md-4 control-label" for="filebutton">Upload Profile Picture</label>
        <div class="col-md-4">
            <input id="filebutton" name="filebutton" class="input-file" type="file">
        </div>
    </div>

    <!-- Button -->
    <div class="form-group">
        <label class="col-md-4 control-label" for="submit"></label>
        <div class="col-md-4">
            <a href="<?php echo base_url("/index.php/studentDashboardController/saveUserDetails"); ?>" >
                <button id="submit" name="submit" class="btn btn-primary">Save Changes</button>
            </a>
        </div>
    </div>

</fieldset>

studentDashboardController

public function  saveUserDetails()

     $this->load->model('userModel');
     if (isset($this->session->userdata['logged_in']))
     
          $username = ($this->session->userdata['logged_in']['username']);
     
     $user = $this-> userModel-> getUserUid($username); //Gets the uid of the current user
     $this->userModel->saveUserDetails($user);
     $this->session->set_flashdata('msg', '<div class="alert alert-success text-center">Successfully Inserted Data</div>');
     $this->load->view('studentDashboard/common',$data);
     redirect(base_url('index.php/studentDashboard/editProfile',$data1));

用户模型

public function saveUserDetails($uid)

    $data = array(
         'name' => $this->input->post('name')
    );
    $this->db->where("uid",$uid);
    $this->db->update("sysuser",$data);

sysuser 有 uid 和 name 字段。我不确定我在这里做错了什么。在这方面的任何帮助将不胜感激

【问题讨论】:

@questiontable 如果您有任何错误,请发布? 【参考方案1】:

您不会将发布数据发送给控制器。把$this-&gt;userModel-&gt;saveUserDetails($user);改成

 $this->userModel->saveUserDetails($user,$this->input->post('name'));

现在模型应该是这样的

public function saveUserDetails($uid,$name)

    $data = array(
         'name' => $name
    );
    $this->db->where("uid",$uid);
    $this->db->update("sysuser",$data);

并确保您已正确设置表单操作,例如

 <form class="form-horizontal" method="post" action="<?php echo site_url('studentDashboardController/saveUserDetails');?>">

【讨论】:

我想知道,如果我必须将从用户那里收集的多个值插入两个不同的表中,我该怎么做? 无法理解。 在我上面提出的问题中,我只是将name 更新到我拥有的sysuser 数据库表中。现在我需要在更新名称本身时将一些其他详细信息(例如上面表单中请求的详细信息)插入到studentprofile 表中。如何将所有用户输入发送到模型的方法以更新sysuser 表并将其他用户输入插入studentprofile 表? $this-&gt;userModel-&gt;saveUserDetails($user,$this-&gt;input-&gt;post());一样发送数据并像public function saveUserDetails($uid,$post)$name = $post['name'];$another = $post['another']一样抓取

以上是关于使用 PHP 在 CodeIgniter 中使用用户输入的值更新数据库表的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP/CodeIgniter 在 MySQL 中获取最后执行的查询

使用 get_instance() 时自动完成 Codeigniter

PHP 框架哪个更好一点?CodeIgniter 怎么样

PHP 框架哪个更好一点?CodeIgniter 怎么样?

CodeIgniter:是不是可以在不使用 .htaccess 的情况下删除 index.php?

如何在 php 中使用 exec 命令运行 codeigniter 控制器功能