Ошибка получения параметров $ _POST - PullRequest
0 голосов
/ 16 июля 2011

Я застрял с этим.Оказывается, я использую диалог JUI для пользователя, чтобы ввести требуемый пароль.Это код представления, которое вызывается диалоговым окном JUI:

<div class="passwordRequestDialog">
<?php 
$form=$this->beginWidget('CActiveForm', array(
                                'id'=>'requestpassword-form',
                                'enableAjaxValidation'=>false,
                                'clientOptions'=>array('validateOnSubmit'=>false),
                                'htmlOptions'=>array('enctype'=>'multipart/form-data'),
                        )); 
?>

<div class="row">   
    <?php echo CHtml::activeHiddenField($model,'idLiga_hidden',array('value'=>$model->id)); ?>
    <?php echo CHtml::label("Ingrese la contrasenia de la liga $model->id?",false, array('style'=>'{font-weight:bold;font-size:12px;}')); ?>
    <?php echo CHtml::activePasswordField($model,'password',array('value'=>'')); ?>
</div>

<div class="row buttons">
    <?php echo CHtml::submitButton("Guardar"); ?>
</div> 

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

Однако, когда я нажимаю кнопку отправки, я могу видеть с помощью firebug параметры записи:

thisLigasDeAmigos% 5BidLiga_hidden% 5D = 2 & LigasDeAmigos% 5Bpassword% 5D = typedInPassword

В отчаянии я пытался получить параметр post разными способами:

$password = $_POST['this']['password'];
$password = $_POST['this']['LigasDeAmigos']['password'];
$password = $_POST['this']['LigasDeAmigos[password]'];

Ни один из них не работает... первый возвращает всегда одно и то же значение: "L".Я предполагаю, что он получает первую букву из целого параметра "this".Второй выдает ошибку и третий тоже.Любая помощь приветствуется!

Редактировать в соответствии с предложением @Jon print_r ($ _ REQUEST) output

Array
(
    [idLiga] => 2
    [this] => LigasDeAmigos%5BidLiga_hidden%5D=2&LigasDeAmigos%5Bpassword%5D=pass
)

Есть идеи?

Ответы [ 2 ]

1 голос
/ 16 июля 2011

Я бы привязал его к модели .

Используя ваши поля в вашем представлении, например, ваша модель будет выглядеть так:

class TestForm extends CFormModel
{

    public $id;
    public $password;
    public $idLiga_hidden;

    public function rules ()
    {
        return array (
            array ('password', 'required'),
            array ('id, idLiga_hidden', 'verify'),
        );
    }

    public function verify ($attribute, $params)
    {
        //$this->addError('idLiga_hidden','Incorrect dumaflache');
    }

}

Обратите внимание, что вам нужно определить некоторые «правила» для назначения атрибутов для работы. Затем вы можете ссылаться на модель в вашем контроллере:

public function actionTest ()
{
    if (isset ($_POST['TestForm']))
    {
        $model = new TestForm();
        $model->attributes = $_POST['TestForm'];
        echo $model->password;
    }
    else
    {
        $model = new TestForm();
        $this->render ('test', array ('model' => $model));
    }
}
1 голос
/ 16 июля 2011

Ну, я не знаю, почему параметры так поступают (еще не сделали этот конкретный сценарий), поэтому я не могу предложить решение, которое поражает суть проблемы (если предположить, что проблема).

Однако вы можете самостоятельно проанализировать параметры следующим образом:

// Normally this would be $form = $_POST['this'], but for the example...
$form = 'LigasDeAmigos%5BidLiga_hidden%5D=2&LigasDeAmigos%5Bpassword%5D=pass';

parse_str($form, $vars);
print_r($vars);

// You can now access the variables as in:
$id = $vars['idLiga_hidden'];
$password = $vars['pass'];

См. Это в действии .

...