Jump to content
Larry Ullman's Book Forums

Instant Validation With Jquery $.Post


Julia
 Share

Recommended Posts

Hi,

 

I am having difficulty to have an instant validation carried out immediately after input of a value in a view file.

 

Here is the code (extract of the view file) that calls for the function (found in the controller file)

 

View file:

 

<?php Yii::app()->getClientScript()->registerScript('checkid2','$("#thisid").change(function()

{

alert("actiondupecheck");

$.post("index.php?r=roomtype/dupecheck", {thisid: $("#thisid").val()}, function(data) {

$("#dupecheck").html(data);

});

}

);');

?>

 

Controller file:

 

public function actionDupecheck()

{

$thisid = trim($_POST['thisid']);

$test =Piece::model()->find("id='$thisid'");

if(!empty($test)) {

echo sprintf("This id <strong>%s</strong>, exists already.", $thisid);

}

}

 

I have tried several ways but am completely stuck with this. I thought there was a problem with the syntax with the URL but after replacing 'dupecheck' with 'admin' in the view file, the admin function was called. What I am trying to do with this code, is to check for a duplicate entry in my table. I have been advised to use model validation rules. I will look into this suggestion but I also want to know that is wrong with my code. Thanks

Link to comment
Share on other sites

jQuery is a JavaScript library that is client side. PHP and the $_POST array are server side. jQuery cannot validate the post array, that you'll have to do with PHP.

 

jQuery can grab IDs, classes and elements from a html page, thought. $(#id), $(.class), $(selector)

Link to comment
Share on other sites

You could be right though because I have been struggling with this code and can't get it to work :( According to my Jquery reference book, $.post is supposed to do that. Waiting for some help from this forum

Link to comment
Share on other sites

Hi,

 

I am having difficulty to have an instant validation carried out immediately after input of a value in a view file.

 

Here is the code (extract of the view file) that calls for the function (found in the controller file)

 

View file:

 

<?php Yii::app()->getClientScript()->registerScript('checkid2','$("#thisid").change(function()

{

alert("actiondupecheck");

$.post("index.php?r=roomtype/dupecheck", {thisid: $("#thisid").val()}, function(data) {

$("#dupecheck").html(data);

});

}

);');

?>

 

Controller file:

 

public function actionDupecheck()

{

$thisid = trim($_POST['thisid']);

$test =Piece::model()->find("id='$thisid'");

if(!empty($test)) {

echo sprintf("This id <strong>%s</strong>, exists already.", $thisid);

}

}

 

I have tried several ways but am completely stuck with this. I thought there was a problem with the syntax with the URL but after replacing 'dupecheck' with 'admin' in the view file, the admin function was called. What I am trying to do with this code, is to check for a duplicate entry in my table. I have been advised to use model validation rules. I will look into this suggestion but I also want to know that is wrong with my code. Thanks

 

Actually i think i know the solution to this problem.

 

Okay you need to access your User Model the ActiveRecord, then just modify the rules, i will show some sample code where i have done this before:

 

public function rules()

{

// NOTE: you should only define rules for those attributes that

// will receive user inputs.

return array(

array('email, username, password', 'required'),

array('email, username, password', 'length', 'max'=>256),

array('email, username', 'unique'),

array('password', 'compare'),

array('password_repeat', 'safe'),

// The following rule is used by search().

// Please remove those attributes that should not be searched.

array('id, email, username, password last_login_time, create_user_id, update_time, update_user_id', 'safe', 'on'=>'search'),

);

}

 

So you see the part in the code array('email, username', 'unique') email and username have been declared as unique therefore only one email and username can occur in the model.

Link to comment
Share on other sites

Thanks Edward for your suggestion. I have learnt something that I did not know even though it is not the solution to the problem. I sought the help of some people expert at PHP who found the solution to the problem. I had to modify the access rules of controller to give access to the required action that was being called in the URL parameter of Jquery $.post:

 

array('allow', // allow authenticated user to perform 'dupecheck' actions

'actions'=>array('dupecheck'),

'users'=> array('authorised username'),

 

 

That was a struggle!!

  • Upvote 2
Link to comment
Share on other sites

 Share

×
×
  • Create New...