2012-05-28 3 views
0

То, что я пытаюсь сделать здесь, - это вставить в таблицу некоторые значения, передав их из AjaxSubmitButton и вызывая контроллер/действие.ajaxSubmitButton: INSERT issue

Вот действие контроллера первого

public function actionAddit() 
{ 
     $connection = yii::app()->db; 
     $transaction=$connection->beginTransaction(); 
     try 
     {  
     $connection = yii::app()->db; 
     $sql1 = "INSERT INTO apTracker (id, title,createdDate,owner) VALUES(:id, :title,:createdDate,:owner)"; 


      $command=$connection->createCommand($sql1); 

      $command->bindValue(":id", $_POST['id']); 
      $command->bindValue(":title", $_POST['title']); 
      $command->bindValue(":createdDate", new CDbExpression('NOW()')); 
      $command->bindValue(":owner", $_POST['o']); 

       $command->execute(); 
       $transaction->commit(); 
     }  
     catch(Exception $e) 
     { 
      $transaction->rollBack(); 
      $this->refresh; 
     } 

И вот Ajaxbutton в файле вида:

<?php echo CHtml::ajaxSubmitButton('Yes!',   
     array('/entry/addit'), 
     array(
       'type'=>'POST', 
       'data' => array('id' => '1','title' => 'Untitled','o'=>'6'), 
       'success' => 'js:function(){window.location="site/message"}', 
     ));?> 

Ну, я не знаю, что именно это, но он не работает. Однако, если я удаляю команду bindvalue и hardcode некоторые значения в самом sql-запросе, он работает. Итак, я предполагаю, что проблема может заключаться в передаче значений из части AjaxSubmit в контроллер. Я делаю что-то неправильно здесь, но не могу точно понять, что. Любая помощь ребята?

EDIT: Хорошо, Извините за изменение путаницы, вопрос вернется к его первоначальной форме.

Я уже опробовал решение eggyal, однако, я все еще не могу заставить его работать.

+0

Есть ошибки на сайте? Как вы визуализируете представление? Просто попробовал на месте, отлично работает. –

+0

Вид отображается как модальная форма (Bootstrap CSS). AjaxButton находится в этой модальной форме. Это может быть проблемой? – redGREENblue

+0

Зависит от того, как вы его визуализируете. Для этого нужен jquery, поэтому, если вы передаете его с помощью функции rednerPartial, возможно, это проблема. –

ответ

1
  1. можно передать строку литерала 'NOW()' в качестве параметра :createdDate, которое не является действительным. Просто используйте NOW() в SQL вместо:

    $sql1 = ' 
        INSERT INTO apTracker (id, title, createdDate, owner) VALUES 
        (:id, :title, NOW(), :owner) 
    '; 
    
    $command = $connection->createCommand($sql1); 
    
    $command->bindValue(':id', $_POST['id']); 
    $command->bindValue(':title', $_POST['title']); 
    $command->bindValue(':owner', $_POST['o']); 
    
    $command->execute(); 
    
  2. Второй ($url) аргумент CHtml::ajaxSubmitButton должен быть строкой, а не массив:

    <?php 
        echo CHtml::ajaxSubmitButton(
        'Yes!',   
        '/entry/addit', 
        array(
         'type' => 'POST', 
         'data' => array('id' => '1', 'title' => 'Untitled', 'o'=>'6'), 
         'success' => 'js:function(){window.location="site/message"}', 
        ) 
    ); 
    ?> 
    
  3. Вы напрасно переназначение $connection в вашей try блок.

+0

Хороший улов. Исправили их обоих, но все равно не повезло. Это все равно не сработает. Я редактирую оригинальный вопрос, чтобы отразить эти изменения. – redGREENblue

+0

@redGREENblue: Нехорошо делать такие изменения в вопросе. Вы можете отредактировать его и добавить - под своим оригинальным вопросом - то, что вы изменили и как оно (не все еще) работает. –

+0

@redGREENblue: Также см. Мою (добавленную) точку # 2 - комментарий ypercube, вероятно, применим ко мне так же! – eggyal