dscpg80066 2014-12-03 15:24
浏览 40
已采纳

yii从$ _GET加载数据库中的数据

I have a controller that has a display data from a database depending on the ?id=, it works correctly. However, if you do not give any value id gets error

error 400 Your request is invalid.

My code:

    public function actionIndex($id)
        {
            // renders the view file 'protected/views/site/index.php'
            // using the default layout 'protected/views/layouts/main.php'

           $this->pageTitle = 'Page';

                $criteria = new CDbCriteria(
                    array(
                        'condition' => 'name = :Name',
                        'params' => array(':Name' => $id),
//if $id is not defined then error

                    )
                );
            }
            $ModelPages = Pages::model()->findAll($criteria);
            $this->render('index',
                    array(
                        'Model' => $ModelPages,
                    )
                );
        }

I tried this out in such a way, but it did not help.

public function actionIndex($id)
    {
        // renders the view file 'protected/views/site/index.php'
        // using the default layout 'protected/views/layouts/main.php'

       $this->pageTitle = 'Page';

       if(empty($id)){
           $criteria = new CDbCriteria(
               array(
                   'condition' => 'name = :Name',
                   'params' => array(':Name' => 'index'),
               )
           );
       }
        else {

            $criteria = new CDbCriteria(
                array(
                    'condition' => 'name = :Name',
                    'params' => array(':Name' => $id),
                )
            );


        }
        $ModelPages = Pages::model()->findAll($criteria);
        $this->render('index',
                array(
                    'Model' => $ModelPages,
                )
            );

    }

Is my solution is correct (safe) when it comes to displaying the content according to the site?

  • 写回答

2条回答 默认 最新

  • dry69034 2014-12-03 15:39
    关注

    You solution is correct but better use getQuery() method for fetching GET parameters and handle the error if no pages found:

    public function actionIndex($id='index') //Notice the default parameter value
    {
       $id = Yii::app()->request->getQuery('id', 'index') //if id GET parameter does not exist $id will be 'index'
       $criteria = new CDbCriteria(
            array(
                'condition' => 'name = :Name',
                'params' => array(':Name' => $id),
            )
       );
       $ModelPages = Pages::model()->findAll($criteria);
    
       if (empty($ModelPages)) {
           throw new CHttpExeption(404,'page not found');
       }
    
       $this->render('index',
            array(
                'Model' => $ModelPages,
            )
       );
    }
    

    Also if your action can not receive id parameter you should set default value for it (actionIndex($id='index'))

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真