如何将值从下拉列表中检索到Yii中的Controller?

时间:2014-01-30 07:33:39

标签: php mysql yii

我在表单中有一个div但是我不太确定如何将所选值检索到控制器中:

<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'system-users-form',
'enableAjaxValidation'=>false,
)); ?>

<p class="note">Fields with <span class="required">*</span> are required.</p>

<?php echo $form->errorSummary($model); ?>

<button id="abutton">Already a Supplier</button>
<br>
&nbsp;
&nbsp;

<div class="row" id="toshow" style="display:none" name="suppliers"> 
<?php $supplier = SupplierHead::model()->findAll();
   $list = CHtml::listData($supplier ,'head_id','head_name'); 
   echo $form->DropDownList($model,'party_id', 
   $list, array('prompt'=>'Select Supplier')); 
?> 
</div>



<script>
$(document).ready(function() {
   $("#abutton").click(function(e){
      e.preventDefault();
      $("#toshow").css('display', 'block');
   });
});
</script>

<div class="row">
    <?php echo $form->labelEx($model,'username'); ?>
    <?php echo $form->textField($model,'username',array('size'=>60,'maxlength'=>200)); ?>
    <?php echo $form->error($model,'username'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'password'); ?>
    <?php echo $form->passwordField($model,'password',array('size'=>60,'maxlength'=>255)); ?>
    <?php echo $form->error($model,'password'); ?>
</div>

<div class="row buttons">
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>

<?php $this->endWidget(); ?>

</div><!-- form -->

请注意,此行也属于另一个模型。我如何在另一个控制器中检索它?

控制器代码:

 public function actionCreate()
    {
        $model = new SystemUsers;
        $modelParties = new Parties;
        $modelPersons = new Persons;
        $supplierHead = new SupplierHead;
    //  $modelPR = new PartyRoles;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($invoice);

if (isset($_POST['SystemUsers']))
    {
        $model->attributes = $_POST['SystemUsers'];
        Yii::app()->db->createCommand("insert into parties (party_type_id) values ('1')")->execute();           
        $id = Yii::app()->db->lastInsertId;

        $_POST["SupplierHead"]["party_id"];
        $model->password = md5($model->password);
        $model->party_id = $id;
        $model->status = "Approved";
        $model->date_modified = new CDbExpression('NOW()');
        $email = $model->username;
        if($company != null)
            {

                Yii::app()->db->createCommand("insert into persons (party_id,email,company_name) values ('".$id."','".$email."','".$company."')")->execute();
            }
        Yii::app()->db->createCommand("insert into persons (party_id,email) values ('".$id."','".$email."')")->execute();
        Yii::app()->db->createCommand("insert into party_roles(party_id,role_id) values ('".$id."','2')")->execute();
  /*
        $valid = true; 
        $valid &= $model->validate(); 
        $valid &= $modelParties->validate(); 
              if($valid)
                {   
        $modelParties->save();
        $model->party_id = $modelParties->getPrimaryKey();  */

        if($model->save())
            echo ("<SCRIPT LANGUAGE='JavaScript'>
                    window.alert('User Created')
                    window.location.href='create';  
                </SCRIPT>");

//      }
        else $this->redirect(array('views22','id'=>$model->id));
 }

$this->render('create',array(
  'parties'=>$modelParties,
  'model'=>$model,
));

}

SystemUsers模型:

public function tableName()
{
    return 'system_users';
}

/**
 * @return array validation rules for model attributes.
 */
public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('username, password', 'required'),
        array('isLogin', 'numerical', 'integerOnly'=>true),
        array('date_modified','default',
          'value'=>new CDbExpression('NOW()'),
          ),
        array('date_last_login','default',
          'value'=>new CDbExpression('NOW()'),
          ),
        array('date_created','default',
          'value'=>new CDbExpression('NOW()'),
          ),
        array('status','default','value'=>'Approved'),
        array('user_role','default','value'=>'MEMBER'),
        array('isLogin','default','value'=>'1'),

        array('username', 'length', 'max'=>200),
        array('password', 'length', 'max'=>255),
        // The following rule is used by search().
        // Please remove those attributes that should not be searched.
    );
}

修改

我添加了我的模型和表格的其余部分,以向您展示混乱。下拉列表div是我试图输入到不同模型的值,它不作为system_users的属性存在,因此它不会通过POST。

4 个答案:

答案 0 :(得分:3)

首先确保您的模型的属性具有安全规则。 其次,在控制器中获取转储以查看通过POST请求发送的内容。如下所示:

CVarDumper::dump($_POST,5678,true);
Yii::app()->end();

第三,在你的转储中找到你的下拉元素。 在Yii中,您还可以获得如下的帖子值:

Yii::app()->request->getPost('YOUR DROPDOWN NAME');

<强>更新

正如我先说的那样,你必须确保你的属性是安全的。 在您的模型中添加如下规则:

array('THE NAME OF YOUR DROPDOWN','safe'),

我希望它有所帮助。

答案 1 :(得分:1)

@charlesisjan这也取决于调试。实际上$ _POST是一个包含数组集合的数组,而且这些数组是一组键值对,如

array(
    'key'=>'value'
)

首先,您需要确保是否在表单中提交了party_id。我确信它正在提交。
现在

之后
if (isset($_POST['SystemUsers']))
    {

使用

CVarDumper::Dump($_POST,100,true);
die();

我正在使用虚拟代码。 它会显示$ _POST数组,如

array ( 'User' => array ( 'username' => 'rafasd' 'password' => 'asdfas' 'email' => 'asd@yahoo.com' ) 'yt0' => '' )

在上面的代码中,因为用户本身就是一个数组,所以你可以访问用户名

$_POST['User']['username']

现在尝试找出party_id在$ _POST数组中的位置。当你发现你可以使用上面提到的模式

来访问它的价值时

答案 2 :(得分:0)

你可以得到:

 $id =  $_POST["SystemUsers"]["party_id"]

根据您的代码,下拉名称将设置为“Model_name [Field_name]”。

在您的操作中,您可以看到

$some_variable  = $_POST["SystemUsers"]; // SystemUsers is model name

答案 3 :(得分:0)

请更改您的

 $_POST["SupplierHead"]["party_id"];

用这个

 $_POST["SystemUsers"]["party_id"];

在你的控制器动作创建中,我认为错误就在这里! 此外,如果party_id是您的主键,则不要在下拉列表中使用,在模型中创建新的公共变量,并在下拉列表中使用。