Julia Posted May 3, 2012 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 Link to comment Share on other sites More sharing options...
Antonio Conte Posted May 3, 2012 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) Link to comment Share on other sites More sharing options...
Julia Posted May 3, 2012 Author Share Posted May 3, 2012 $.post initiates a POST request to the server... Link to comment Share on other sites More sharing options...
Antonio Conte Posted May 3, 2012 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. Link to comment Share on other sites More sharing options...
Julia Posted May 3, 2012 Author 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 Link to comment Share on other sites More sharing options...
Edward Posted May 4, 2012 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. Link to comment Share on other sites More sharing options...
Edward Posted May 4, 2012 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. Link to comment Share on other sites More sharing options...
Julia Posted May 4, 2012 Author 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 Link to comment Share on other sites More sharing options...
Edward Posted May 5, 2012 Share Posted May 5, 2012 Glad to hear you found the solution, and thanks for posting it up here for us. Link to comment Share on other sites More sharing options...
Recommended Posts