2

所以我将制作几个带有多个文本输入框的表单,所以我认为制作一个函数来帮助自动化这将是一个好主意。

下面是我想出的函数:但是,我得到的结果似乎很奇怪,是“回声”和一堆单引号的组合。那里的一切看起来都正确吗?我是 PHP 新手,所以如果我错过了一个明显的错误,我真的很抱歉。

    function makeTextInputField($name)
    {
echo '<label for = "<?php $name ?>"> <?php ucfirst($name) ?> </label><input type = "text" name = "<?php $name?>"></input>';
    }
4

8 回答 8

3

你不应该在 php 中使用更多的标签

function makeTextInputField($name)
        {
    echo '<label for = "'.$name.'">'.ucfirst($name).'</label><input type = "text" name = "'.$name.'" />';
        }
于 2013-05-26T08:17:15.820 回答
1

工作演示

因为您可以在 PHP 中插入换行符strings,所以可以通过在函数中使用变量来使函数更具可读性:

<?php

    function makeTextInputField($name) {
        $text = ucfirst($name);
        echo "
            <label for='{$name}'>{$text}</label>
            <input type='text' name='{$name}' />
        ";
    }

?>

并且无论何时你想使用它:

<h1>Welcome</h1>
<?php makeTextInputField('email'); ?>

输出

<h1>Welcome</h1>
<label for='email'>Email</label>
<input type='text' name='email' />
于 2013-05-26T08:26:47.870 回答
1

您的问题是在 PHP 代码中您正在打开新的 PHP 标记,这实际上不是必需的。试试这个功能,看看它是否适合你:

function makeTextInputField($name)
{
    echo sprintf('<label for="%s">%s</label> <input type="text" name="%s"></input>', $name, ucfirst($name), $name);
}
于 2013-05-26T08:20:39.063 回答
0
function makeTextInputField($name)
{
echo '<label for = "'.$name.'"> '.ucfirst($name).'</label><input type = "text" name = "'.$name.'"></input>';
 }

那应该行得通。

你已经在 php.ini 中了。所以不需要<?php标签。用 . 将字符串连接在一起。

于 2013-05-26T08:19:12.340 回答
0

尝试使用sprintf.

function textInput($name)
{
  $html = '<label for="%1$s">%2$s</label><input type="text" name="%1$s"/>';
  echo sprintf($html, $name, ucfirst($name));
}
于 2013-05-26T08:20:35.587 回答
0
<?php

class DeInput
{
    protected $_format = '<div>
                 <label for="%s">%s</label>
                 <input  class="formfield" type="text"   name="%s"  value="%s">
                 </div>';
        public function render($content,$getFullyQualifiedName,$getValue,$getLabel)
    {

        $name = htmlentities($getFullyQualifiedName);
        $label = htmlentities($getLabel); 
        $value = htmlentities($getValue);
        $markup = sprintf($this->_format, $name, $label,  $name, $value);
        return $markup;
    }


}
于 2013-05-26T08:37:31.390 回答
0

将 PHP 代码放在引号内有点不好,所以我可以使用 (.) 点来组合字符串。

这是我的例子:

function makeTextInputField($name) {
    echo '<label for="'. $name .'">'.ucfirst($name).'</label>';
    echo '<input type="text" name="'.$name .' />';
}
于 2013-05-26T08:38:23.707 回答
0

使用returnintead 代替 echo,结果会更容易操作。您还可以将元素生成拆分为不同的功能以获得更大的灵活性:

function createLabel($for,$labelText){
    return '<label for = "'.$for.'"> '.ucfirst($labelText).'</label>';
}

function createTextInput($name,$value,$id){
    return '<input type = "text" name = "'.$name.'" id="'.$id.'">'.$value.'</input>';
}

function myTextInput($name,$value,$labelText){
    $id = 'my_input_'.$name;
    return createLabel($id,$labelText).createTextInput($name,$value,$id);
}

echo myTextInput('email','','Type you email');
于 2013-05-26T08:39:11.483 回答