首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CButtonColumn批准按钮执行PHP而不被单击

CButtonColumn批准按钮执行PHP而不被单击
EN

Stack Overflow用户
提问于 2014-06-17 03:10:20
回答 1查看 325关注 0票数 0

我有这样的代码,它可以在Yii CGridView中创建和填充一个表。

我的问题是,即使未单击“批准”按钮,也会为页面的每次刷新调用位于'approve'=>array('options'=>array('onclick'))中的函数。

我通过打印计数器的值来确定错误的发生。在批准时,计数器只应增加1,而不是每次刷新页面。

代码语言:javascript
复制
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'registrants-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,

'columns'=>array(
    'user_id',
    'first_name',
    'middle_name',
    'last_name',
    'gender',
    'shirt_size',
    'receipt_number',
    'category',

    array(
        'class'=>'CButtonColumn',
        'template'=>'{approve}, {update},{delete}',
        'buttons'=>array(

            'approve' => array(
                'label'=>'Approve',
                'options'=>array(
                    'onclick'=> $model->approveRegistrants($model->user_id, $model->category),
                    //ending approve-option array
                    ),
                    //ending approve-button array
                    ),

        //ending buttons array
        )
        //ending table-last-column array
        ),
//ending table-columns array
),

//ending zii.widgets.grid.CGridview     
));

?>

这是我在模型中的作用。

代码语言:javascript
复制
public function approveRegistrants($user_id, $category){

$db = new PDO('mysql:host=localhost; dbname=secret; charset=utf8', 'Andy', '*****');
$getCounter = "SELECT registrants FROM counter order by registrants desc limit 1;";
$bool = false;
$show = '0';


do{
    $result = $db->query($getCounter);
    // $registrants = $db->query($getCounter);
    // $result->setFetchMode(PDO::FETCH_ASSOC);
    // $registrants = '1'; 

foreach ($result as $value){
    $registrants = $value['registrants'];
    echo 'hello'.$registrants.'</br>';
}

    // $registrants = $result['registrants'];
    // print_r($registrants);
    $max_registrants = '3400';
        if($max_registrants > $registrants){

        // pdo that will use $updateCounterByOne
        $updateCounterByOne = "UPDATE counter set registrants = registrants + 1 WHERE registrants = ". $registrants .";";
        $updateCounter = $db->prepare($updateCounterByOne);
        $updateCounter->execute();

        // return affected rows
        $returnAffectedRows = $updateCounter->rowCount();
        $bool = true;
        // break;
        }
        else{
        echo "No more slot Available";
        // break;
        }
}while($returnAffectedRows == '0');


if($bool = true){
    //sql syntax
    $selectApprovedUser = "SELECT user_id FROM registrants WHERE user_id = '". $user_id ."';";

    //pdo that will use $selectApprovedUser
    $updateApprovedUser = "UPDATE registrants set approved = 'YES' where user_id = ". $selectApprovedUser .";";
    $updateApproved = $db->prepare($updateApprovedUser);
    $updateApproved->execute();

    //pdo that will use $insertApprovedUser
    $insertApprovedUser = "INSERT INTO approved_registrants (user_id, category, approved_date) VALUES ('".$user_id."', '".$category."', 'curdate()');";
    $insertApproved = $db->prepare($insertApprovedUser);
    $insertApproved->execute();

    //execute trial
    $selectSomething = "SELECT registrants from counter where tandem = '0'";
    $doSelect = $db->prepare($selectSomething);
    $doSelect->execute();
    $hello = $doSelect->fetchAll();
    echo $hello[0]['registrants'];
}

}

我试图实现的是,当单击“批准”按钮时,它将获得user_id,并执行PDO命令,如update和insert。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-17 03:47:00

如果您看到CButtonColumn,它会声明'options'接受HTML属性的键值对。因此,您不应该像在这里那样放置PHP代码,除非您希望它们立即执行。这是错误的:

代码语言:javascript
复制
'options'=>array(
    'onclick'=> $model->approveRegistrants($model->user_id, $model->category),
),

您需要的是从TbToggleColumn扩展到“批准/不批准”项的YiiBooster列:

代码语言:javascript
复制
array(
    'class' => 'bootstrap.widgets.TbToggleColumn',
    'toggleAction' => 'user/toggleApproved',
    'name' => 'isApproved',
    'header' => 'Approved?'
),

您还需要在控制器中执行相应的操作。不要忘记在控制器过滤器中添加'toggleApproved'。在本例中,我简单地倒置了单个列的值,但您可以使用此操作执行其他操作。

代码语言:javascript
复制
public function actionToggleApproved($id) {
    $model = $this->loadModel($id);

    if(!is_null($model) && $model->hasAttribute('isApproved')) {
        $model->isApproved = $model->isApproved == 0 ? 1 : 0;
        $model->update(); // no validation
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24255152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档