Php 下拉列表未获取的输入值
我反复犯同样的错误。下拉列表数据不是从表单中获取的。我这里有我的密码 这是我的控制器:ProductControllerPhp 下拉列表未获取的输入值,php,html,yii,Php,Html,Yii,我反复犯同样的错误。下拉列表数据不是从表单中获取的。我这里有我的密码 这是我的控制器:ProductController {<?php class ProductController extends Controller { public function actionCreate() { $model=new CreateForm; // collect user input data if(isset($_POST['Creat
{<?php
class ProductController extends Controller
{
public function actionCreate()
{
$model=new CreateForm;
// collect user input data
if(isset($_POST['CreateForm']))
{
$model->attributes=$_POST['CreateForm'];
$model->setAttributes($_POST['CreateForm']);
// validate user input and redirect to the previous page if valid
if($model->validate())
{
$product=new Product;
$product->save();
}
else {
echo "Hi";
}
}
// display the login form
$this->render('create',array('model'=>$model));
}
}
?>}
{}
我的模型:CreateForm
{<?php
class CreateForm extends CFormModel
{
public $product_name;
public $category_name;
public $description;
public function rules()
{
return array(
array('product_name, category_name, description', 'required'),
array('product_name', 'unique', 'className' => 'Product', 'attributeName' => 'product_name', 'message'=>'This product name is already in use'),
);
}
public function attributeLabels()
{
return array(
'product_name'=>'PRODUCT NAME',
'category_name'=>'CATEGORY',
'description'=>'DESCRIPTION'
);
}
}
?>
}
{
}
类别
{
<?php
class Category extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'category';
}
public function attributeLabels()
{
return array(
'category_id'=>'CATEGORY ID',
'category_name'=>'CATEGORY NAME',
);
}
}
?>}
{
}
我的视图:create.php
{<?php
$this->pageTitle=Yii::app()->name . ' - Create';
$this->breadcrumbs=array(
'Create',
);
?>
<h1>CREATE</h1>
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'create-form',
'enableAjaxValidation'=>true,
'enableClientValidation'=>true,
));
?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<div class="row">
<?php echo $form->labelEx($model,'product_name'); ?>
<?php echo $form->textField($model,'product_name'); ?>
<?php echo $form->error($model,'product_name'); ?>
</div>
<div class="row">
<?php
echo $form->labelEx($model,'category_name');
$records = Category::model()->findAll();
$list = CHtml::listData($records, 'category_id', 'category_name');
echo CHtml::DropDownList('category_name', null, $list, array('prompt'=>'select '));
echo $form->error($model,'category_name');
?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'description'); ?></br>
<?php echo $form->textArea($model,'description',array('style' => 'height:100px;width:500px;','maxlength'=>500)); ?>
<?php echo $form->error($model,'description'); ?>
</div>
<div class="row submit">
<?php echo CHtml::submitButton('CREATE'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
}
{
创造
带*的字段是必需的
}
如果我输入所有字段,它会再次给出一个错误,说明“请输入类别”您所做的工作被称为大规模分配
$model->attributes=$_POST['CreateForm'];
这不会分配所有值,而且在处理数据时也不安全
数据只有在模型中处于安全状态时才会保存
您将把发布的数据重新声明为
$model->attributes=$_POST['CreateForm'];
$model->dropdownname=$_POST['CreateForm']['dropdownname'];
希望这对你有帮助
我认为您更改了下拉列表的代码
<?php
echo $form->labelEx($model,'category_name');
$records = Category::model()->findAll();
$list = CHtml::listData($records, 'category_id', 'category_name');
echo CHtml::DropDownList('category_name', null, $list, array('prompt'=>'select '));
echo $form->error($model,'category_name');
?>
希望对你有帮助
谢谢您是否在模型的规则功能中定义了安全属性?添加了。{public function rules(){返回数组(数组('product_name,category_name,description','required'),数组('product_name','unique','className'=>'product','attributeName'=>'product_name','message'=>'此产品名称已在使用'),数组('product_name,category_name,desc','safe'))}DropDownList是否与模型绑定,或者是否发送其参数“bare”?
<?php
echo $form->labelEx($model,'category_name');
$records = Category::model()->findAll();
$result = array();
foreach($records as $p) {
$result[p->category_id] = p->category_name ;
}
echo CHtml::activeDropDownList($model, 'category_name', $result);
echo $form->error($model,'category_name');
?>
public function actionCreate()
{
$model=new CreateForm;
// collect user input data
if(isset($_POST['CreateForm']))
{
$model->attributes=$_POST['CreateForm'];
echo $model->category_id ;
exit ; // Finish program here, and drop down will be printed.
$model->setAttributes($_POST['CreateForm']);
// validate user input and redirect to the previous page if valid
if($model->validate())
{
$product=new Product;
$product->save();
}
else {
echo "Hi";
}
} // display the login form
$this->render('create',array('model'=>$model));
}