Julia 2 Posted May 3, 2012 Report Share Posted May 3, 2012 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 Quote Link to post Share on other sites
Antonio Conte 426 Posted May 3, 2012 Report Share Posted May 3, 2012 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) Quote Link to post Share on other sites
Julia 2 Posted May 3, 2012 Author Report Share Posted May 3, 2012 $.post initiates a POST request to the server... Quote Link to post Share on other sites
Antonio Conte 426 Posted May 3, 2012 Report Share Posted May 3, 2012 Ah, sorry then. I'm no expert when it comes to jQuery. As I've never seen that before, I just thought you'd misunderstood something. Sorry. Quote Link to post Share on other sites
Julia 2 Posted May 3, 2012 Author Report Share Posted May 3, 2012 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 Quote Link to post Share on other sites
Edward 108 Posted May 4, 2012 Report Share Posted May 4, 2012 If you have not done so already, it may worth posting here http://www.yiiframework.com/forum/. There are occasion bugs in frameworks, so it would be worth asking about this on the yii forum also to see if anyone can help you. Quote Link to post Share on other sites
Edward 108 Posted May 4, 2012 Report Share Posted May 4, 2012 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. Quote Link to post Share on other sites
Julia 2 Posted May 4, 2012 Author Report Share Posted May 4, 2012 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!! 2 Quote Link to post Share on other sites
Edward 108 Posted May 5, 2012 Report Share Posted May 5, 2012 Glad to hear you found the solution, and thanks for posting it up here for us. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.