更新数据库条目

Posted

技术标签:

【中文标题】更新数据库条目【英文标题】:Update database entries 【发布时间】:2021-08-30 05:44:08 【问题描述】:

我有一个使用 CodeIgniter 3 制作的项目,我在其中创建了 2 个视图页面。在第一页上,用户看到一个包含列(订单号、客户、订单状态、创建日期和 cmets)的表格,但我只显示挂单。在第二页上,我有确切的列,但我只显示已完成的订单。

第一页如下所示:

现在我要做的是在第一页上,当我选中我想要的每一行中的复选框并按下 Change Status 按钮之后更改数据库中的状态。我已经设法通过这样做来传递检查的行的 ID:

function change_status(x)
         var vals = [];
         jQuery('.checkorders:checked').each(function()
                                          
             vals.push(jQuery(this).val());                                      
                                                     );
         $.ajax(
                type: "POST",
            url: '<?php echo base_url();?>change_status.php' ,
            data:'myData':vals,'type':x,
            success: function(response)
            
                 alert('ok');
            
        );
        
        

现在change_status.php中的代码是

<?php
include('application/views/backend/admin/dbc.php');
mysqli_query($conn,"SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
$type=$_POST['type'];
$mydat= $_POST['myData'];
foreach($mydat as $dt)

    $sql0 = "SELECT * FROM orders WHERE id=".$dt." order by id ASC";
        $result0 = $conn->query($sql0);
        if ($result0->num_rows > 0) 
            while($row0 = $result0->fetch_assoc()) 
            $orders_id[]=array("id"=>$row0['id']);
            echo $row0['id']."<br/>";
        
    

if($type==1)
$out = "**";

    foreach($orders_id as $ID)
    
        $out.= $elispisID['id']." - ";
        //$this->db->where('id', $elispisID['id']);
        //$this->db->update('elipsis', array('status' => 0));
    
    echo $out;
    $output1="csv";
    $output2="csv/patoures/";
    $output3=$output2.date("Y")."/";
    $output4=$output3.date("m");
    if (!is_dir($output1)) mkdir($output1,0777);
    if (!is_dir($output2)) mkdir($output2,0777);
    if (!is_dir($output3)) mkdir($output3,0777);
    if (!is_dir($output4)) mkdir($output4,0777);
    $output_forder=$output4."/".date("dHi");
    file_put_contents($output_forder,$out);
    


$conn->close();
 ?>

$out 变量是为了帮助我查看我是否正确传递了 id,因为每次我检查复选框并按下更改状态按钮时,它都会创建一个带有选定 id 的文件。但是,如果我取消注释我尝试更新数据库的 2 行,它不会更新它或打印任何内容

有人知道我做错了什么吗?

【问题讨论】:

奇怪的是你为什么不使用代码点火器数据库函数?实际上,我看到您在注释掉的行中。但页面的其余部分是香草 php/mysql 好的,这里有一些事情需要处理,但是 codeigniter db-&gt; 东西不起作用的原因是因为这需要在控制器或模型中。如果你愿意,我可以向你展示它的外观 如果你使用的是 venila php 那你为什么要使用 codeignitor,它的 MVC 【参考方案1】:

好的,这是您在 codeigniter 中的页面

保持 JS 中的所有内容,但将 url 更改为此

  url: '<?php echo base_url();?>changestatus/change',

然后在您的controllers 文件夹中创建名为Changestatus.php 的文件。我看到您选择并循环通过您的数据库只是为了获取您通过 ajax 发送的 id 列表(我弄错了吗)?您需要做的就是更新您的elipses 表并将status=0 设置为id in (array of ids)

<?php
// controllers/Changestatus.php

class Changestatus extends CI_Controller 
    public function __construct() 
        parent::__construct();
        $this->load->library('db'); // this should already be autoloaded in config/config.php but just in case
    

    function change() 
        $type = $this->input->post('type');
        $mydat = $this->input->post('myData');

        $this->db->set('status', '0');
        $this->db->where_in('id', $mydat);
        $done = $this->db->update('elipsis');  
        if (!$done) 
            die("error: <pre>".print_r($this->db->error(),1)."</pre>");
        

        // I have no idea what all this is....
        $output1 = "csv";
        $output2 = "csv/patoures/";
        $output3 = $output2 . date("Y") . "/";
        $output4 = $output3 . date("m");
        if (!is_dir($output1)) mkdir($output1, 0777);
        if (!is_dir($output2)) mkdir($output2, 0777);
        if (!is_dir($output3)) mkdir($output3, 0777);
        if (!is_dir($output4)) mkdir($output4, 0777);
        $output_forder = $output4 . "/" . date("dHi");
        file_put_contents($output_forder, $out);

    


?>

【讨论】:

发生了一些事情,如果您在 php 中启用 error_reporting,您可能会知道它是什么。它在什么时候失败了?您做了哪些故障排除?

以上是关于更新数据库条目的主要内容,如果未能解决你的问题,请参考以下文章

更新恢复到 Access 数据库中的先前条目

更新数据库条目

如何更新用户表单中的条目?

使用用户定义的函数动态更新临时表和数据库表条目

为啥 SQLiteConnection.Update(client) 不更新表条目?

为啥在尝试更新 MySQL 条目时出现“超过锁定等待超时”错误?