用户登录时不显示表单,但在用户注销时显示

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 时显示“连接”

Laravel 5.2:在用户登录/注销和注册后显示会话闪烁消息

根据状态动态更改登录/注销按钮

Thymeleaf 登录和注销可见性问题