尽管我已尽最大努力遵循有关标准CRUD更新程序的CI 3.1.0文档,但我无法使用输入编辑表单的信息更新目标数据库元素。目前,这是确定我的更新流程的代码(完整地);
编辑表格(edit.php - 查看文件)
<div id="container">
<h1>Edit Post: <?php echo $post[0]['title']; ?></h1>
<?php if($msg = $this->session->flashdata("message")): ?>
<p class="success">
<?php echo $msg; ?>
</p>
<?php endif; ?>
<form action="<?php echo base_url('submit/update'); ?>" method="POST">
<p>
<label for="title">Title edit:</label>
<input type="text" name="post[title]" id="title" value="<?php echo $post[0]['title'];?>"/>
</p>
<p>
<label for="article_text">Content edit:</label>
<textarea name="post[article]" id="article" rows="5" cols="40"><?php echo $post[0]['article_text']; ?></textarea>
</p>
<p>
<label for="category">Category edit:</label>
<SELECT name="post[category]" id="category" value="<?php echo $post[0]['category'];?>">
<OPTION>CODING</OPTION>
<OPTION>DOWNLOADS</OPTION>
<OPTION>HUMOR</OPTION>
<OPTION>IMAGES</OPTION>
<OPTION>INFO</OPTION>
<OPTION>MMO</OPTION>
<OPTION>MULTIMEDIA</OPTION>
<OPTION>RANDOM</OPTION>
<OPTION>REVIEWS</OPTION>
<OPTION>TUTORIALS</OPTION>
</SELECT>
</p>
<p>
<input type="hidden" name="post[article_id]" id="article_id" value="<?php echo $post[0]['article_id'];?>" />
<input class="btn btn-info btn-block" type="submit" value="Edit article" name="submit">
</p>
</form>
</div>
如果有人想知道为什么我不只是将$article_id
追加到form action
,
这是因为,由于某种原因,它会使我要更新的元素无效。我在提交控制器$this->output->enable_profiler(TRUE);
中打包parent::__construct();
,以确保将正确的数据提取到编辑页面,定位正确的$article_id
进行编辑。这是任何尝试更新之前的表格;
function update()
{
$this->load->model('article_model');
$article_id = $this->input->post('article_id')
$this->Article->updateData($article_id);
}
文章模型更新功能
//UPDATE DATA FROM TINYMCE INTO DB TABLE
function updateData($article_id)
{
$title = $this->input->post('title');
$article = $this->input->post('article_text');
$category = $this->input->post('category');
$data = array(
'title'=> $title,
'article_text'=>$article,
'category'=>$category
);
$this->db->set('date', 'NOW()', FALSE);
$this->db->where('article_id', $this->input->post('article_id'));
$this->db->update('articles', $data);
redirect('submit/manage', 'refresh');
exit;
}
我以前曾尝试使用$this->db->replace
,但这会导致将NULL
插入到这些目标元素的数据库中。我已经尝试了所有我可以通过CI 3文档和SO回答库存启用。我的WAMP解决方案错误日志和CI应用程序日志都没有给我任何骨头。关于这个问题的想法很新......
更新1
感谢评论中提到的@DFriend,我能够收到一条错误消息,告诉我更新过程需要set
方法。当我在这里寻找@ SO时,我看到了另一种符号;
$this->db->set('title', $title);
$this->db->set('article_text', $article);
$this->db->set('category', $category);
$this->db->where('article_id', $article_id);
$this->db->update('articles');
但是,唉,没有快乐,因为我得到了与上次编码尝试相同的结果,在那里我被回避到CRUD文章列表中,看不到变化。要成为一个漫长的夜晚......
DAYBREAK
有时整晚都在圈子里闲逛(不是......),通过迷宫般的记录,真的试图找出其变幻莫测的东西。我带走的少数掘金之一是$this->output->enable_profiler(TRUE);
。直觉上,我在redirect()
函数的末尾删除了updateData()
调用,并且看到了......
因此确认是 postdata,但某些内容只导致这些目标元素的NULL
条目。这比以前更好的情况。如果Profiler也可以为我找到NULL
采购(大声笑!),那将是很好的,但是再次,那是我的工作......
答案 0 :(得分:1)
在黑暗中完全射门,因为所有其他基地似乎都被覆盖了。
建议修订
//UPDATE DATA FROM TINYMCE INTO DB TABLE
function updateData($article_id)
{
$title = $this->input->post('title');
$article = $this->input->post('article_text');
$category = $this->input->post('category');
$data = array(
'title'=> $title,
'article_text'=>$article,
'category'=>$category,
'date'=> date("Y-m-d H:i:s") //same data as NOW() only via PHP
);
//Here's the shot in the dark - set() is somehow screwing things up
//$this->db->set('date', 'NOW()', FALSE);
$this->db->where('article_id', $article_id); //you passed $article_id into the function so use it
$this->db->update('articles', $data);
redirect('submit/manage', 'refresh');
//redirect ends with a call to exit so the next line would never execute anyway
//exit;
}
答案 1 :(得分:0)
HAAAAAAAAAAAAAAAAAAAAAAAA .... Nailed it!
有些东西让我感到震惊,比较了submit
和edit
页面的提交表单。由于我一直在为自己的用法定制教程,我忽略了更改表单元素以反映db列居民;
name="post[title]" != name="title"
name="post[article]" != name="article_text"
name="post[category]" != name="category"
只有这三个元素填充了我,并阻止表单中的postdata插入数据库。现在,我的世界里充满了欢乐......这是之前的初始文章管理员;
现在,在应用我的代码编辑后......
@DFriend,我会对你的答案进行评价,因为我认为它对我来说非常有帮助(以及那些发人深省的评论)对我来说将会对其他人有用。这个答案将来会被搜索出来。对于那些可能正在努力解决这个问题的人来说,这是我最后的概述;编辑表格(edit.php - 查看文件)
<div id="container">
<h1>Edit Post: <?php echo $post[0]['title']; ?></h1>
<?php if($msg = $this->session->flashdata("message")): ?>
<p class="success">
<?php echo $msg; ?>
</p>
<?php endif; ?>
<form action="<?php echo base_url('submit/update'); ?>" method="POST">
<p>
<label for="title">Title edit:</label>
<input type="text" name="title" id="title" value="<?php echo $post[0]['title'];?>"/>
</p>
<p>
<label for="article_text">Content edit:</label>
<textarea name="article_text" id="article_text" rows="5" cols="40"><?php echo $post[0]['article_text']; ?></textarea>
</p>
<p>
<label for="category">Category edit:</label>
<SELECT name="category" id="category" value="<?php echo $post[0]['category'];?>">
<OPTION>CODING</OPTION>
<OPTION>DOWNLOADS</OPTION>
<OPTION>HUMOR</OPTION>
<OPTION>IMAGES</OPTION>
<OPTION>INFO</OPTION>
<OPTION>MMO</OPTION>
<OPTION>MULTIMEDIA</OPTION>
<OPTION>RANDOM</OPTION>
<OPTION>REVIEWS</OPTION>
<OPTION>TUTORIALS</OPTION>
</SELECT>
</p>
<p>
<input type="hidden" name="article_id" id="article_id" value="<?php echo $post[0]['article_id'];?>" />
<input class="btn btn-info btn-block" type="submit" value="Edit article" name="submit">
</p>
</form>
</div>
提交控制器更新功能(submit.php)
function update()
{
$this->load->model('article_model');
$article_id = $this->input->post('article_id');
$this->Article->updateData($article_id);
}
文章模型更新功能
function updateData($article_id)
{
$title = $this->input->post('title');
$article = $this->input->post('article_text');
$category = $this->input->post('category');
$data = array(
'title'=> $title,
'article_text'=>$article,
'category'=>$category,
'date'=> date('Y-m-d H:i:s')
);
$this->db->set('title', $title);
$this->db->set('article_text', $article);
$this->db->set('category', $category);
$this->db->where('article_id', $article_id);
$this->db->update('articles', $data);
redirect('submit/manage', 'refresh');
exit;
}
钉在这里的兴奋已经消除了对睡眠的需求(哈哈!)。让我们看看桑德曼在我脑后的桌子上抓住我的距离。 @DFriend,再次感谢您的眼睛和那些灵巧的评论。没有你的帮助就无法到达这里......
捆绑松散的结尾......
同样为了这篇文章的任何绊脚石的利益:必须克隆文章模型edit
函数,以便我可以将其指向delete.php
页面(本身是{{1}的克隆使用submit.php
form action
base_url('submit/trash')
毫不费力地为我取出垃圾,重定向到文章管理器减去已删除的文章....最后一点(给我一个功能性应用程序,给我引导);
删除表格(delete.php - 查看页面)
<div id="container">
<h1>Delete Post: <?php echo $post[0]['title']; ?></h1>
<form action="<?php echo base_url('submit/trash'); ?>" method="POST">
<p>
<label for="title">Title</label>
<input size="25" type="text" name="title" id="title" value="<?php echo $post[0]['title'];?>" readonly />
</p>
<p>
<label for="article_text">Content</label>
<textarea readonly name="article_text" id="article_text" rows="12" cols="120"><?php echo $post[0]['article_text']; ?></textarea>
</p>
<p>
<label for="category">Category</label>
<SELECT disabled name="category" id="category" value="">
<OPTION><?php echo $post[0]['category'];?></OPTION>
</SELECT>
</p>
<p>
<input type="hidden" name="article_id" id="article_id" value="<?php echo $post[0]['article_id'];?>" />
<input class="btn btn-info btn-block" type="submit" value="Delete article" name="submit">
</p>
</form>
</div>
提交控制器删除功能(submit.php)
function delete() //so we can show delete.php view page
{
$this->load->model('article_model');
$article_id = $this->uri->segment(3);
$post = $this->Article->getArticle($article_id);
if(!$post)
{
redirect('submit/manage', 'refresh');
exit;
}
$data['post'] = $post;
$this->load->view('delete',$data);
}
删除表单&#34;操作&#34;功能强>
function trash()
{
$this->load->model('article_model');
$article_id = $this->input->post('article_id');
$this->Article->deleteData($article_id);
}
文章模型删除功能
function deleteData($article_id)
{
$this->db->where('article_id', $article_id);
$this->db->delete('articles');
redirect('submit/manage', 'refresh');
exit;
}
我真的希望这篇文章可以帮助将来的某个人。它肯定对我有帮助(哈哈!)......