0

PHPのスキルを磨こうとしていますが、配列に関しては途方に暮れています。

ここに契約があります: フォーム要素の値を $emx に設定しようとしています - URL 文字列からパラメーターをキャッチする変数、つまり myform.html?emx=youremail@email.com

これが私が持っている配列で、フォームを構築します(これはPHP Yiiです)

'email' => array('type'=>'text', 'label'=>$this->t('Your email address'), 'value' => $emx, 'onFocus' => 'this.value=""'),

それが生成する HTML:

<input type="text" id="MDealSubscribeForm_email" name="MDealSubscribeForm[email]" onfocus="this.value=&quot;&quot;" value="">

$emx を次のように定義しました。

<?php
    if ($_GET['emx'] != ""){
    $emx = $_GET['emx'];}
    else {
    $emx = "Enter your email address";} ?>

私が抱えている問題は、値が $emx に設定されていないことです - URL に ?emx= を追加するかどうかに関係なく、値は常に "" です

更新: if ($_Get['emx']... の php は 1 つのファイル (ラッパー) にあり、 'email' => array(... は別のファイルにあります。

配列の構文が間違っていますか? 値を設定するには、単に $emx を入力する必要があると思いました。読んでくれてありがとう!

4

4 に答える 4

1

MDealSubscribeForm is the model you are using to build your form (I am calling it as $model in my answer )

if(isset($_GET['emx'])){
    $model->email = $_GET['emx'];
} else {
    $model->email = "Enter your email address";
}

remove 'value' => $emx , this is not needed anymore.

--

and also, try 'onFocus' => 'js:this.value=""' and I believe this will give correct html instead of &quot;&quot;

于 2012-10-10T06:07:31.623 に答える
0

メールが設定されていない場合は、値を明示的に設定するよりも、メール入力フィールドでプレースホルダー属性を使用する方がよい場合があります。私はいつもインライン JavaScript を見るのが嫌いです。

試す:

<?php $emx = (isset($_GET['emx'])) ? $_GET['emx'] : ''; ?>

その後:

'email' => array('type'=>'text', 'label'=>$this->t('Your email address'), 'value' => $emx, 'placeholder' => 'Enter your email address'),

話題に戻りますが、これは標準の Yii フォーム入力ジェネレーター関数用に設計された配列のようには見えません。この配列を入力 HTML に変換するコードに問題があるのではないでしょうか? これを行うコードを教えてください。

于 2012-10-09T22:40:00.350 に答える
0

これは PHP の質問だと思って、そのようにタイトルを付けたため、多くの間違った回答が得られています。あなたが言ったことすべてから、$emx適切に設定されているように見えますが、問題は、Yii が生成したフォームで表示できないことです。

CFormInputElementには「値」プロパティがないことに注意してください。値を設定するには、モデルで設定する必要があります。

$model->email = $emx;

モデルまたはフォームに値を設定するelseことで、ステートメントを回避することもできます。default

于 2012-10-10T17:18:05.400 に答える
0

使用する必要があります$_GET['MDealSubscribeForm']['email'](GETの場合)

次回はprint_r($_GET);フォームをデバッグするだけです

于 2012-10-09T21:00:35.483 に答える