用户登录时不显示表单,但在用户注销时显示
Posted
技术标签:
【中文标题】用户登录时不显示表单,但在用户注销时显示【英文标题】:form is not displayed when user is logged in but displayed when user logs out 【发布时间】:2018-08-09 03:28:29 【问题描述】:我正在做一个小项目,用户在其中创建帐户,然后他们可以添加项目、编辑项目、查看项目。当用户添加项目时,他/她的 id(在会话中可用)也被添加到项目表中。我想使用动态 codeigniter 表单添加项目。当 create_project_view 被加载并且用户登录时,表单在页面上可见,但是当我在源代码上单击其源代码时,表单不可见,但是如果用户注销表单在屏幕上以及源代码上都是可见的。我不知道为什么表格在源代码中不可见。这可能是我无法添加数据的可能原因,因为页面上没有显示任何表单。这也可能是当我单击提交按钮并登录时,它会将我注销的原因。
我使用的是 php 版本:7.2.1,但后来降级到 PHP 版本:5.6.3 仍然存在这个问题。你能帮我解决这个问题吗?
下面我分享我的代码和用户登录和注销时的屏幕截图screenshot when user is logged in:
1-(查看)Index.php
这是一个将我带到(创建)控制器的按钮代码
<h1>Projects</h1>
<table class="table table-hover">
<thead class="bg-warning">
<a class="btn btn-primary pull-right" href="<?php echo base_url();?>projects/create">Create Project</a><br>
<tr>
<th>Project Name</th>
<th>Project Created</th>
</tr>
</thead>
<tbody>
<?php foreach($projects as $project): ?>
<tr>
<?php echo"<td><a href='".base_url()."projects/display/".$project->id."'>".$project->project_name."</a></td>" ?>
<?php echo"<td>".$project->created_date."</td>" ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
2-(控制器)projects.php: 其中包含“创建”项目功能
class Projects extends CI_Controller
public function create()
$this->form_validation->set_rules('project_name','Project
Name','trim|required');
$this->form_validation->set_rules('project_body','Project
Body','trim|required');
if($this->form_validation->run()==false)
$data['main_view']="projects/create_project_view";
$this->load->view('Layouts/main',$data);
else
$user_data= array(
'user_project_id' =>$this->session->userdata('user_id'),
'project_name' =>$this->input->post('project_name'),
'project_body' =>$this->input->post('project_body'));
if($this->project_model->create_project($user_data))
redirect("projects/index");
?>
3-(模态)porject_model.php
<?php
class project_model extends CI_Model
public function create_project($data)
$insert_query=$this->db->insert('projects', $data);
return $insert_query;
?>
4. (查看): Create_project_view.php: 通过这种形式,我将数据发送到“项目”控制器
<h1>Registration Form</h1>
<?php $attributes=array('Id'=>'reg_form','class'=>'form-vertical');?>
<?php echo form_open('projects/create',$attributes);?>
<div class="form-group">
<?php echo form_label('Project title:'); ?>
<?php $data=array(
'Name'=>'project_name',
'class'=>'form-control',
'placeholder'=>'Enter Your First Name:');?>
<?php echo form_input($data); ?>
</div>
<div class="form-group">
<?php echo form_label('project body:'); ?>
<?php $data=array(
'Name' =>'project_body',
'class' =>'form-control',
'placeholder' =>'Enter Your User Name:');?>
<?php echo form_textarea($data); ?>
</div>
<div class="form-group">
<?php $data=array(
'Name'=>'reg_button',
'class'=>'btn btn-primary',
'value'=>'Register');?>
<?php echo form_submit($data); ?>
</div>
<?php echo form_close(); ?>
【问题讨论】:
print $user_data 并在插入数据前先检查表单值,看看结果,有没有错误 在创建函数中我添加了这段代码来打印值:$data['main_view']="projects/create_project_view"; $this->load->view('Layouts/main',$data); echo $this->session->userdata('user_id'); echo $this->input->post('project_body'); echo $this->input->post('project_name'); 仍然让我退出 这是我最近看到的关于 CI 的第三件奇怪的与会话相关的事情,我自己也遇到过。你的测试设置是什么?本地主机/远程、操作系统、浏览器、CI 版本。您是否在其他设备/浏览器上尝试过代码?问题是否可复制?您是否在此表单中使用 ajax? 我使用的是 CI 3.1.7,服务器是 xammp。对于我只使用 CI 函数的表单。通过其他设置,您的意思是在其他本地服务器上对其进行测试? 【参考方案1】:您可能在同一页面中有两个相互冲突的表单。如果您在表单中有注销功能(这不是必需的,您可以通过向按钮提供 onClick 事件使其成为直接链接),您创建项目的“提交”操作可能会触发该操作,而不是它自己的操作。看来这就是您退出的原因。
否则,我在您的表单中看不到其他问题。随着您开发更多应用程序,您将采用更好的结构,这样您就不会陷入这样的陷阱。
【讨论】:
Jamshid jan,非常感谢您的正确回答。我有两个表格,我打开了一个,但我打开了第二个表格而没有关闭第一个表格。下面我把代码放上来,方便其他人也受益。 然后将其标记为答案 :)【参考方案2】:Jamshid Hashimi 的回答是正确的。我只是在这里分享代码,这样其他人也可能受益,并且不会像我一样陷入类似的陷阱。实际上问题出在另一个名为(login_view)的视图中,我没有发布它。我在一页中有两个表格。我打开了第一页,然后在没有关闭第一个表单的情况下打开了第二个表单。在第 10 行,我评论了我忘记的行。
<!--When user is logged in -->
<?php if($this->session->userdata('loged_in')): ?>
<h2>Logout</h2>
<?php echo"You are loged in as " . $this->session->userdata('user_name');?>
<?php echo form_open('users/logout');?>
<?php $data=array(
'name'=>'lgout',
'class'=>'btn btn-primary',
'value'=>'Log out');?>
<?php echo form_submit($data); ?>
<?php echo form_close(); ?> **<!--I forgot this line -->**
<?php else: ?>
<!--When user is not logged in -->
<h2>login</h2>
<?php $attributes=array('id'=>'regform','class'=>'form-horizontal'); ?>
<?php if($this->session->flashdata('errors')): ?>
<?php echo $this->session->flashdata('errors'); ?>
<?php endif; ?>
<!--form starts here-->
<?php echo form_open('users/login',$attributes); ?>
<div class="form-group">
<?php echo form_label('User Name:');?>
<?php $data=array(
'name'=>'username',
'class'=>'form-control',
'placeholder'=>'Enter Your Name'); ?>
<?php echo form_input($data); ?>
</div>
<div class="form-group">
<?php echo form_label('User Password:');?>
<?php $data=array(
'name'=>'userpass',
'class'=>'form-control',
'placeholder'=>'Enter Your Name'); ?>
<?php echo form_password($data); ?>
</div>
<div class="form-group">
<?php $data=array(
'name'=>'sbmt',
'class'=>'btn btn-primary',
'value'=>'Login'); ?>
<?php echo form_submit($data); ?>
</div>
<?php echo form_close(); ?> <!--form ends here-->
【讨论】:
以上是关于用户登录时不显示表单,但在用户注销时显示的主要内容,如果未能解决你的问题,请参考以下文章
不知何故,某些 css 仅在用户登录时显示 - 而对已注销的用户不显示。 HTML/CSS
当用户登录时显示“注销”按钮,当他不使用 PHP/MySQL 时显示“连接”