CodeIgniter 3 页面URL存入数据库功能实现求助
解决评论URL无法存入数据库的问题
嘿,看了你的代码,我一眼就找到了问题的核心:前端AJAX请求没有把页面URL传递给后端控制器,所以数据库的url_link字段自然接收不到值。咱们一步步来修复:
步骤1:在视图中传递当前页面URL
首先,在你的评论提交按钮上添加一个存储当前页面URL的属性,用按钮的data属性会更简洁:
修改视图里的提交按钮代码:
<button class="sendmessage sendmessageclick" data-d-id="<?php echo $pages[0]->pageId;?>" data-url="<?php echo current_url();?>"> <!-- 新增这行,用CodeIgniter内置函数获取当前页面URL --> <span class="far fa-paper-plane"> </span> <span class="d-none d-block-sm">Send</span> </button>
这里用了CodeIgniter的current_url()函数,能自动获取当前页面的完整URL,不用手动拼接,非常省心。
步骤2:修改JS的AJAX请求,带上URL参数
接下来调整common.js里的AJAX请求,把页面URL加入到请求数据中:
$('.sendmessageclick').click(function(){ $('#hiddenArea').val(quill.container.firstChild.innerHTML); // 从按钮的data属性里拿到页面URL const pageUrl = $(this).data('url'); $.ajax({ type:'post', async: false, // 新增url_link参数,把页面URL传去后端 data:{ page_id:$(this).attr('data-d-id'), comment:$('.add_comment').val(), url_link: pageUrl }, url: static_url+'/pages/add_comment', success: function(result){ $('.add_comment').val(''); if(result == 'true'){ $('.comment_alert').show(); setTimeout(function() { $('.comment_alert').hide(); location.reload(); }, 3000); }else{ alert('Error'); location.reload(); } console.clear(); } }); });
步骤3:验证数据是否正常传递(可选但推荐)
为了确保后端能正确接收,你可以在控制器里临时加一行打印代码,检查$urllink的值:
public function add_comment(){ if ($this->session->userdata('user_id')){ $comment = $this->security->xss_clean($this->input->post('comment')); $pageid = $this->security->xss_clean($this->input->post('page_id')); $urllink = $this->security->xss_clean($this->input->post('url_link')); // 临时打印,确认URL是否正确传递 var_dump($urllink); die; $data = array( 'user_id' => $_SESSION['user_id'], 'page_id' => $pageid, 'url_link' =>$urllink, 'comment' => $comment, 'created' => date("Y-m-d H:i:s"), 'modified' => date("Y-m-d H:i:s") ); echo $query = $this->page_model->add_comments($data);die; }else{ redirect(); } }
测试提交评论后,如果你能看到当前页面的URL,就说明数据传递正常了,之后把这行打印代码删掉即可。
这样修改后,页面URL就能正常存入数据库,之后你就可以在邮件模板里调用这个字段,给用户发送带评论页面链接的邮件啦!
内容的提问来源于stack exchange,提问作者Pierre
相关产品推荐
相关产品推荐

