我正在努力提高我的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=""" value="">
我已将$ emx定义如下:
<?php
if ($_GET['emx'] != ""){
$emx = $_GET['emx'];}
else {
$emx = "Enter your email address";} ?>
我遇到的问题是该值未设置为$ emx - 无论我是否附加?emx =到URL,值总是“”
更新:php for if($ _Get ['emx'] ...在一个文件(包装器)中,'email'=&gt;数组(...在一个单独的文件中 - 如果这很重要
我是否有错误的数组语法?我以为我只需要输入$ emx来设置值。谢谢你的阅读!
答案 0 :(得分:1)
MDealSubscribeForm
是您用来构建表单的模型(我在回答中将其称为$model
)
if(isset($_GET['emx'])){
$model->email = $_GET['emx'];
} else {
$model->email = "Enter your email address";
}
删除'value' => $emx
,不再需要了。
-
并尝试'onFocus' => 'js:this.value=""'
,我相信这会给出正确的html而不是""
答案 1 :(得分:0)
您应该使用$_GET['MDealSubscribeForm']['email']
(如果是GET)
下次只需要print_r($_GET);
调试表单
答案 2 :(得分: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的代码?您能告诉我们或向我们展示执行此操作的代码吗?
答案 3 :(得分:0)
你得到了很多错误的答案,因为你认为这是一个PHP问题并且标题是你的问题。从您所说的所有内容来看,$emx
看起来设置得恰到好处,麻烦的是您无法以Yii生成的形式显示它。
请注意,CFormInputElement没有“值”属性。要设置该值,您需要在模型中设置它,例如:
$model->email = $emx;
您还可以避免使用else
语句by setting the default
value in your model or the form。