User login null error - cakephp

I am using cakephp 2.1 and I used login action in UsersController as follows.
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash('Invalid email or password, try again', 'default/flash_error');
}
}
}
And the login.ctp code is as follows.
<?php echo $this->Form->create('User', array('class' => 'form')); ?>
<div class="control-group">
<label class="control-label" for="inputEmail">Email</label>
<div class="controls">
<?php echo $this -> Form -> text('email', array('id' => 'inputEmail', 'placeholder' => 'Email')); ?>
<?php echo $this -> Form -> error('email', null, array('wrap' => 'span', 'class' => 'help-block')); ?>
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Password</label>
<div class="controls">
<?php echo $this -> Form -> password('password', array('id' => 'inputPassword', 'placeholder' => 'Password')); ?>
<?php echo $this -> Form -> error('password', null, array('wrap' => 'span', 'class' => 'help-block')); ?>
</div>
</div>
<div class="control-group">
<div class="controls">
<label class="checkbox">
<input type="checkbox"/>
Remember me </label>
<?php echo $this->Form->button('Sign in', array('type' => 'submit', 'class' => 'btn')); ?>
</div>
</div>
<?php echo $this->Form->end(); ?>
When the form get submitted with email and password, the user is not able to login so its showing an error 'Invalid email or password, try again'. Even I am passing the $this->request->data['User'] into $this->Auth->login() method and debugged $this->Session->read(Auth.User.id). Its giving me null. Please give me a solution for this.

You can try passing $this->request->data into the $this->Auth->login() method. It's not a great way to do it (see this post: CakePHP Auth Component Not logging in when using $this->Auth->login();), but it works for me. Have you debugged $this->Auth->login()?

Related

validating mutiple drop downs list with the same name field in CakePHP 2.x

I'm new to cakephp 2x. I have multiple drop down in my form. All the drop downs are using same list data, from one table called -> Students. Now what I want is ,when the user select first student in first drop down ,then that student should be minus from the next four drop down or disabled in next four drop downs.So that the user wouldn't be able to add the same student repeately. Plz Help! Thanks! in advance.
//Here is my controller add file:
public function add(){
if ($this->request->is('post')) {
$this->Group->create()
if ($this->Group->save($this->request->data)) {
$this->Session->setFlash(__('The group has been saved.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The group could not be saved. Please, try again.'));
}
}
$this->loadModel('Student');
$student1s = $this->Student->find('list');
//pr ($student1s);
$this->set(compact('student1s'));
}
// Here is my add.ctp
< div class="Groups form">
<div class="row">
<div class="col-md-12">
<div class="page-header">
<h1><?php echo __('Add Students'); ?></h1>
</div>
</div>
</div>
<div class="row">
<?php echo $this->Form->create('Groups', array('role' => 'form')); ?>
<div class="col-md-5 col-md-offset-3">
<div class="form-group">
<?php echo $this->Form->input('0.name', array('type'=>'select','options'=>$student1s,'empty' => 'Please choose a student','class'=>'form-control'));?>
</div>
<div class="form-group" >
<?php echo $this->Form->input('1.name', array('type'=>'select',"options"=>$student1s,'empty' => 'Please choose a student','class'=>'form-control',));?>
</div>
<div class="form-group">
<?php echo $this->Form->input('2.name', array('type'=>'select',"options"=>$student1s,'empty' => 'Please choose a student','class'=>'form-control'));?>
</div>
<div class="form-group">
<?php echo $this->Form->input('3.name', array('type'=>'select',"options"=>$student1s,'empty' => 'Please choose a student','class'=>'form-control'));?>
</div>
<div class="form-group">
<?php echo $this->Form->input('4.name', array('type'=>'select',"options"=>$student1s,'empty' => 'Please choose a student','class'=>'form-control'));?>
</div>
<div class="form-group">
<?php echo $this->Form->submit(__('Submit'), array('class' => 'btn btn-primary')); ?>
</div>
<?php echo $this->Form->end() ?>
</div><!-- end col md 12 -->
</div><!-- end row -->
</div>
find solution for my problem to avoid duplication of data,This link helps -> Validating multiple fields with the same name. All i have to do is put this code ->array('validate' => 'true')<- in this line
if ($this->Group->save($this->request->data),array('validate' => 'true')) {
and all done no need to disable the selected list value.

Cookie is not working in CakePHP , CookieComponent is not working

This is my AdminsController class where I have included the Cookie Component, and used the cookie creation code given below in #1. #2 is the code I am using in my view.
Whenever I fire the url, it is showing the error: "Helper class CookieHelper could not be found.".
Why is this error is showing, as I have asked to use CookieComponent to set and get the value of the cookie. I have followed instructions and code syntax from the CakePHP docs that they have provided on their website. I'm really having trouble on setting and getting the cookie. I need help on this. The CakePHP version that i'm using is 2.6.
#1 - Controller:
class AdminsController extends AppController {
/**
* This controller does not use a model
*
* #var array
*/
//public $uses = array('Admin');
/**
* Displays a view
*
* #return void
* #throws NotFoundException When the view file could not be found
* or MissingViewException in debug mode.
*/
public $components = array('Cookie');
public function index() {
$this->layout=false;
//echo "=users index====";
//$this->layout = 'adminlayout';
if($this->request->is('post'))
{
$username = $this->request->data['Admin']['username'];
$password = $this->request->data['Admin']['password'];
$remember_me = $this->request->data['Admin']['remember_me'];
$sql = $this->Admin->find('count',array(
'conditions' => array('Admin.username'=>$username,'Admin.password'=>md5($password))
));
//$this->Session->write('is_admin_login','Y');
if($sql>0)
{
$this->Session->write('is_admin_login','Y');
if(!empty($remember_me))
{
//*** set cookie starts
if($this->Cookie->check('username_cookie'))
{
$this->Cookie->delete('username_cookie');
$this->Cookie->write('username_cookie', $username, false, '30 Days');
}
if($this->Cookie->check('password_cookie'))
{
$this->Cookie->delete('password_cookie');
$this->Cookie->write('password_cookie', $password, false, '30 Days');
}
//*** set cookie ends
}
else
{
if($this->Cookie->check('username_cookie'))
{
$this->Cookie->delete('username_cookie');
}
if($this->Cookie->check('password_cookie'))
{
$this->Cookie->delete('password_cookie');
}
}
$this->redirect('/admin/home');
}
else
{
$this->Session->setFlash('Invalid username or password','default',array('class'=>'error_msg'));
}
}
$this->render('admin_login');
}
}
#2 - AdminLogin View
<div class="form-box" id="login-box">
<div class="header">Sign In</div>
<?php echo $this->Form->create(null, array(
'url' => array('controller' => 'Admins', 'action' => 'index')
)); ?>
<div class="body bg-gray">
<div class="row">
<div class="col-md-12 col-lg-12 col-sm-12 col-xs-12">
<?php echo $this->Session->flash(); ?>
</div>
</div>
<div class="form-group">
<?php /*?> <input type="text" name="user_name" id="user_name" class="form-control" placeholder="User ID" value="<?php // echo get_cookie("username_cookie"); ?>"/><?php */?>
<?php
$options=array();
$options['id']='username';
$options['class']='form-control';
$options['placeholder']='User ID';
$options['label']=false;
if($this->Cookie->check('username_cookie'))
{
$options['value']=$this->Cookie->read('username_cookie');
}
echo $this->Form->input('username',$options);
?>
</div>
<div class="form-group">
<?php /*?><input type="password" name="password" id="password" class="form-control" placeholder="Password" value="<?php // echo get_cookie("password_cookie"); ?>"/><?php */?>
<?php
$options=array();
$options['id']='password';
$options['class']='form-control';
$options['placeholder']='Password';
$options['label']=false;
if($this->Cookie->check('password_cookie'))
{
$options['value']=$this->Cookie->read('password_cookie');
}
echo $this->Form->input('password',$options);
?>
</div>
<div class="form-group">
<?php
$options=array();
$options['id']='remember_me';
//$options['class']='form-control';
$options['type']='checkbox';
$options['label']=false;
$options['div']=false;
$checked="";
if($this->Cookie->check('username_cookie') || $this->Cookie->check('password_cookie'))
{
$options['checked']="checked";
}
echo $this->Form->input('remember_me', $options);
?> Remember me
</div>
</div>
<div class="footer">
<button type="submit" class="btn bg-olive btn-block">Sign me in</button>
<p>Forgot my password</p>
</div>
<?php
echo $this->Form->end();
?>
<div class="margin text-center">
<!-- <span>Sign in using social networks</span>-->
<br/>
</div>
You are trying to use a Component in a view, which is why it is telling you there is no helper class called Cookie.
Use the Cookie component in your Controller action to set a variable, and then use the variable in your view:
Remove these lines from your view:
$this->Cookie->check('username_cookie')
$this->Cookie->check('password_cookie')
Use them in your controller action to set view variables ...something similar to:
$this->set('username_cookie', $this->Cookie->read('username_cookie'));
$this->set('password_cookie', $this->Cookie->read('password_cookie'));
Then you will be able to use the set variables in your view:
if(!empty($username_cookie)) {
//do something
}
//or
if(!empty($password_cookie)) {
//do something
}

cannot set id in cakephp postLink

I am unable to set the id of the form or the class of the submit button. I seen examples that follow my code but I am not getting either set.
I am using cakePHP 2.5.
<?php
echo $this->Form->postLink(
'Confirm',
array('controller' => 'assets', 'action' => 'delete'),
array('id' => 'testId', 'class' => 'btn btn-confirm')
);
?>
What I get is
<form action="/assets/ajax_delete/56.json" name="post_53ac1bb05415c464261170" id="post_53ac1bb05415c464261170" style="display:none;" method="post">
<input type="hidden" name="_method" value="POST">
</form>
Confirm
<?php echo $this->Form->postLink('Confirm', array('controller' => 'assets', 'action' => 'delete', $yourId), null, __('Are you sure you want to delete # %s?', $yourId)); ?>

Yii - form with CMultiFileUpload won't submit files

I need some help with a little strange problem.
My problem is that submit button does not submit files to controller when using CMultiFileUpload.
I have this very simple view to upload multiple files:
<?php
$form = $this->beginWidget(
'CActiveForm',
array(
'id' => 'upload-form',
'htmlOptions'=>array('enctype' => 'multipart/form-data'),
));?>
<div class="row">
<?php echo $form->labelEx($model,'sourceCode'); ?>
<?php
$this->widget('CMultiFileUpload', array(
'model'=>$model,
'name' => 'sourceCode',
'attribute'=> 'sourceCode',
'max'=>5,
'accept' =>'zip',
'duplicate' => 'Duplicate file!',
'denied' => 'Invalid file type',));
echo $form->error($model,'sourceCode');?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Submit'); ?>
</div>
<?php $this->endWidget();?>
Here is my model:
class UploadSolutionForm extends CFormModel
{
public $sourceCode;
public function rules()
{
return array(
array('sourceCode', 'file', 'types'=>'zip', 'allowEmpty'=>false, 'wrongType'=>'Only .zip files allowed'),
);
}
public function attributeLabels()
{
return array(
'sourceCode' => 'Uploaded file',
);
}
}
And here is probably the simplest action ever:
public function actionUpload()
{
$model = new UploadSolutionForm();
if(isset($_POST['UploadSolutionForm']))
{
echo 'Got it!';
}
$this->render('solve',array('model'=>$model));
}
But when I click on submit it does not echo anything, but it does with this code (CMultiFileUpload is replaced with fileField):
<?php
$form = $this->beginWidget(
'CActiveForm',
array(
'id' => 'upload-form',
'htmlOptions'=>array('enctype' => 'multipart/form-data'),
));?>
<div class="row">
<?php echo $form->labelEx($model, 'sourceCode');?>
<br><?php echo $form->fileField($model, 'sourceCode');?>
<?php echo $form->error($model, 'sourceCode');?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Submit'); ?>
</div>
<?php
$this->endWidget();?>
Can someone tell me what's wrong?
Thanks in advance...
Try this it works
In your View file specify action attribute in form widget as shown in the below code
<?php
$form = $this->beginWidget(
'CActiveForm',
array(
'id' => 'upload-form',
'action'=>Yii::app()->createAbsoluteUrl('yourcontrollername/actionname'),
'htmlOptions'=>array('enctype' => 'multipart/form-data'),
));?>
<div class="row">
<?php $this->widget('CMultiFileUpload',array(
'name'=>'files',
'accept'=>'jpg|png',
'max'=>3,
'remove'=>Yii::t('ui','Remove'),
//'denied'=>'', message that is displayed when a file type is not allowed
//'duplicate'=>'', message that is displayed when a file appears twice
'htmlOptions'=>array('size'=>25),
)); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Submit'); ?>
</div>
<?php $this->endWidget();?>
In yourController actionUplaod as shown below
public function actionUpload(){
echo "hi";
var_dump($_FILES['files']);
}

cakephp no id passed to Form

I have two forms, one to edit room details and the other to edit Extras. Within the forms I pull in a file upload and pass in the id. For some reason one requires a url and the id does not get passed in. Both have the same code. Can see why they are differnt.
Room form
<div class="boxgrid grid_8">
<?php echo $this->element('attachments',array('control'=>'upgrades','id'=>$this->data['AddOn']['id'],'att'=>$this->data['Attachment'])); ?>
</div>
Room upload
Form->create('Room', array('type' => 'file'));?>
<legend><?php __('Upload Room Images'); ?></legend>
<?php
echo $this->Form->input('id');
?>
<input type="hidden" name="data[Attachment][0][model]" value="Room" id="Attachment0Model" />
<input type="hidden" name="data[Attachment][0][group]" value="attachment" id="Attachment0Group" />
<div class="input file required"><input type="file" name="data[Attachment][0][file]" class="" id="Attachment0File" /></div>
<div class="submit"><button>Upload</button></div>
<div>Upload files</div>
Extras Form
<div class="boxgrid grid_8">
<?php echo $this->element('attachments',array('control'=>'upgrades','id'=>$this->data['AddOn']['id'],'att'=>$this->data['Attachment'])); ?>
</div>
Extras Upload
Form->create('Upgrade', array('type' => 'file','url'=>'/admin/upgrades/addfiles','id'=>'AddOnAdminAddfilesForm'));?>
<legend><?php __('Upload Addon Images'); ?></legend>
<?php
echo $this->Form->input('id');
?>
<input type="hidden" name="data[Attachment][0][model]" value="AddOn" id="Attachment0Model" />
<input type="hidden" name="data[Attachment][0][group]" value="attachment" id="Attachment0Group" />
<div class="input file required"><input type="file" name="data[Attachment][0][file]" class="" id="Attachment0File" /></div>
<div class="submit"><button>Upload</button></div>
<div>Upload files</div>
Javascript on each form:
<script type="text/javascript">
$(document).ready(function() {
$("div#uploader").resloader();
$("div#uploader").load('<?=BASE_URL?>/admin/upgrades/addfiles/<?=$this->data['AddOn']['id']?>',null,function(){}).fadeIn();
Upgrades Contoller
function admin_addfiles($id = null) {
$this->layout = null;
if (!$id && empty($this->data)) {
$this->Session->setFlash(__('Invalid Add On', true));
$this->redirect(array('controller' => 'upgrades', 'action' => 'index'));
}
if (!empty($this->data)) {
$this->layout = null;
//if(empty($this->data['AddOn']['id'])){unset($this->data['AddOn']);}
// restructure data for uploader plugin // NEED TO GET RID OF THIS ? MOVE IT
$tmp_file = $this->data['Attachment'][0]['file'];
$tmp_file['extension'] = array_reverse(explode('.', $tmp_file['name']));
$tmp_file['extension'] = $tmp_file['extension'][0];
$tmp_file['title'] = strtolower(substr($tmp_file['name'],0,(0-strlen('.'.$tmp_file['extension']))));
$this->data['Attachment'][0]['alternative'] = ucwords(str_replace('_',' ', $tmp_file['title']));
if ($this->AddOn->saveAll($this->data, array('validate' => 'first'))) {
$id = $this->AddOn->Attachment->getLastInsertID();
$att = $this->AddOn->Attachment->query("SELECT * from attachments WHERE id = ".$id);
$this->set('attachment',$att[0]['attachments']);
} else {
$tmp_file['name'] = 'INVALID FILE TYPE';
}
//debug($this->data);
$this->set('file', $tmp_file);
$this->RequestHandler->renderAs($this, 'ajax');
$this->render('../elements/ajax');
}
if (empty($this->data)) {
$this->data = $this->AddOn->read(null, $id);
}
}
}
Your problem is with the $this->data. Check how it is filled in your controller.
Both views are NOT the same, the main difference is in the create form.
Form->create('Room', array('type' => 'file'));?>
Form->create('Upgrade', array('type' => 'file','url'=>'/admin/upgrades/addfiles','id'=>'AddOnAdminAddfilesForm'));?>
As you can see, one has the first parameter 'Room' and the other one is 'Upgrade', this IS important since you call the id like this
echo $this->Form->input('id');
Cake expects that for the first case you have something like, $this->data['Room']['id'] and the second one $this->data['Upgrade']['id']
If you pass from the controller your id variable like this
$this->set('id',$id);
then in the view you can do somthing like this
<?php
echo $this->Form->input('id', array('value'=>$id, 'type'=>'hidden'));
?>
Hope this solves your answer, if not, please post the $this->data value of each and the part of the controller where you assign $this->data

Resources