PHP基础语法之动态表单内容


Deprecated: Function create_function() is deprecated in /home/www/webroot/loveyu.org/wp-content/plugins/codecolorer/lib/geshi.php on line 4698

表单混合PHP代码

通过不同的方式生成不一样的表单内容,达到其内容的多样化。

<?php
/* 表单混合PHP代码 */
include("form/register_include.php"); //使用include语句包含指定的文件,使用文件包含
?>
<html>
<head>
    <title>表单混合PHP代码</title>
    <meta http-equiv="Content-Type" content="text/html" charset="utf-8"/>
</head>
<body>
<p>用户注册表单</p>

<form action="" method="post">
    <p><label>用户名:<input name="username" type="text" value=""/></label></p>

    <p><label>密码:<input name="pwd" type="password" value=""/></label></p>

    <p><label>确认密码:<input name="confirm" type="password" value=""/></label></p>

    <p>性别:
        <label><input type="radio" name="sex" value="男"/></label>
        <label><input type="radio" name="sex" value="女"/></label>
    </p>

    <p>生日:
        <select name="year">
            <!--使用一个循环进行输出-->
            <?php for ($i = @date("Y"); $i > 1978; $i--): ?>
            <option><?=$i?></option>
            <?php endfor;?>
        </select>
        <select name="month">
            <?php for ($i = 1; $i <= 12; $i++) { ?>
            <option><?=$i?></option>
            <?php }?>
        </select>
        <select name="day">
            <?php for ($i = 1; $i <= 31; $i++) { ?>
            <option><?=$i?></option>
            <?php }?>
        </select>
    </p>
    <p>
        <button type="submit">注册</button>
    </p>
</form>
<hr/>
<form action="" method="post">
    <p>用户注册表单,动态修改版,将上一个表单复制过来进行相应的修改,可以看到,当上一个进行提交之后,下一个表单会变化</p>

    <p><label>用户名:<input name="username" type="text" value="<?php echo post_value("username");?>"/></label></p><!--这里使用一个PHP标签来获取,是否提交过该值,如果有输出出来-->
    <p><label>密码:<input name="pwd" type="password" value=""/></label><strong>
        <?php
        if (post_value("pwd") == post_value("confirm")) {
//      首先判断密码是否相等,相等后判断是否为空
            if (post_value("pwd") !== "") {
                echo "两次密码输入一致";
            } else {
                echo "当前密码为空,或者未设置";
            }
        } else {
            echo "两次密码输入不一致,请重新输入";
        }
        ?></strong></p><!--无论何种情况密码默认为空-->
    <p><label>确认密码:<input name="confirm" type="password" value=""/></label></p>

    <p>性别:
        <!--判断输入的性别是男是女进行死否选中操作-->
        <label><input type="radio" name="sex" value="男"<?php if (post_value("sex") == "男") echo ' checked="true"';?> />男</label>
        <label><input type="radio" name="sex" value="女"<?php if (post_value("sex") == "女") echo ' checked="true"';?> />女</label>
    </p>

    <p>生日:
        <!--在循环中判断当前值是否相等,相等就输出一个选中操作-->
        <select name="year">
            <?php for ($i = @date("Y"); $i > 1978; $i--): ?>
            <option<?php if (post_value("year") == $i) echo ' selected="true"'?>><?=$i?></option>
            <?php endfor;?>
        </select>
        <select name="month">
            <?php for ($i = 1; $i <= 12; $i++) { ?>
            <option<?php if (post_value("month") == $i) echo ' selected="true"'?>><?=$i?></option>
            <?php }?>
        </select>
        <select name="day">
            <?php for ($i = 1; $i <= 31; $i++) { ?>
            <option<?php if (post_value("day") == $i) echo ' selected="true"'?>><?=$i?></option>
            <?php }?>
        </select>
    </p>
    <p>
        <button type="submit">注册</button>
    </p>
</form>
</body>
</html>

混合表单包含文件 file:form/register_include.php

某种情形下,使用一长串的表达式来判断一个变量值是很不靠谱的,有些折中的办法可以考虑,这就是封装函数。

<?php
/* 混合表单包含文件 */
function post_value($name){
    //定义一个函数,使用function开头即可,之后是函数名,括号中是参数名
    //函数功能,判断是否存在POST表单的相应值,有就返回,没有就返回空
    if(isset($_POST[$name]))//判断是否有定义$_POST[$name]
        return $_POST[$name];
    return "";
}
?>

创建表单的数组内容 file:form/array_form.php

这里创建了一个多维数组,含义非常明显,只是这些内容该如何输错,怎样进行提交,试着创建一个复杂的表单。

<?php
/* 创建表单的数组内容 */
$form_array = array(
    //这是一个多维数组表,分别有两个系统选项,每个系统选项中有好几个列表,每一个列表有多个参数,可以看做是网页中的html层层嵌套,我们要利用这个生成一个表单
    '系统选项' => array(
        array(
            'type'=>'text',
            'title'=>'名称',
            'name'=>'nameText',
            'desc'=>'描述',
            'value'=>'应用'
        ),
        array(
            'type'=>'checkbox',
            'title'=>'名称',
            'name'=>'nameCheckbox',
            'desc'=>'描述',
            'value'=>'选中',
            'checked'=>true
        ),
        array(
            'type'=>'select',
            'title'=>'名称',
            'name'=>'nameSelect',
            //'desc'=>'描述', //此处注释仅仅为了测试,可以发现05例子出现一个警告,二06没有
            'list'=>array(
                'one'=>'1',
                'tow'=>'2',
                'three'=>'3'
            )
        )
    ),
    //下面的代码为上一部分复制过来进行简单修改
    '系统选项二' => array(
        array(
            'type'=>'text',
            'title'=>'名称',
            'name'=>'nameText2',
            'desc'=>'描述',
            'value'=>'应用'
        ),
        array(
            'type'=>'checkbox',
            'title'=>'名称',
            'name'=>'nameCheckbox2',
            'desc'=>'描述',
            'value'=>'选中',
            'checked'=>true
        ),
        array(
            'type'=>'select',
            'title'=>'名称',
            'name'=>'nameSelect2',
            'desc'=>'描述',
            'list'=>array(
                'one'=>'1',
                'tow'=>'2',
                'three'=>'3'
            )
        )
    ),
);
if($_SERVER['REQUEST_METHOD'] == "POST"){
    header("Content-Type: text/plain; charset=utf-8");
    echo "输出\$_POST内容列表:\n";
    print_r($_POST);
    die();
}

if($_SERVER['SCRIPT_FILENAME'] == str_replace("\","/",__FILE__)){       //$_SERVER['SCRIPT_FILENAME']判断当前执行的脚本路径,而__FILE__常量指的是被包含文件的路径,判断相等就可以发现是不是直接访问当前文件
    //str_replace("
\","/",....)表示搜索到\进行替换为/,由于此次斜杠为转义符,因此需要再次转义
    header("
Content-Type: text/plain; charset=utf-8");
    echo "
你当前的访问模式为直接访问该被包含文件,此时会打印数组信息。\n";
    echo "
执行路径为:",$_SERVER['SCRIPT_FILENAME'] ,"\n被包含文件路径为:", __FILE__."(在windows下你会发现不同)\n";
    print_r($form_array);
}
?>

表单与数组的结合

在复杂的表单也是由N个基础的语句构成,在大量使用循环的基础上,实现一个多样化的表单是很容易的。

<?php
/* 表单与数组的结合 */
include_once("form/array_form.php");
header("Content-Type: text/html; charset=utf-8");
?>
<html>
<head>
    <title>表单数组结合</title>
</head>
<body>
<h1>更新选项</h1>
<form action="" method="post">
<?php
foreach ($form_array as $option_name => $option_list) {
    echo "<h2>$option_name</h2>\n";
    foreach ($option_list as $option) {
        switch ($option['type']) {
            case "text":
                echo '<p><label>', $option['title'], ':<input type="text" value="', $option['value'], '" name="', $option['name'], '" /><label><span>', $option['desc'], '</span></p>' . "\n";
                break;
            case "checkbox":
                echo '<p><label>', $option['title'], ':<input type="checkbox" value="', $option['value'], '" name="', $option['name'], '" checked="', ($option['checked'] ? "true" : "false"), '" /><label><span>', $option['desc'], '</span></p>' . "\n";
                break;
            case "select":
                echo '<p><label>', $option['title'], ":<select name='", $option['name'], "'>";
                foreach ($option['list'] as $name => $value)
                    echo "<option name='$value'>$name</option>";
                echo "</select><span>", $option['desc'], '</span></p>' . "\n";
                break;
        }
    }
}
?>
    <button type="submit">更新</button>
</form>
</body>
</html>

Deprecated: implode(): Passing glue string after array is deprecated. Swap the parameters in /home/www/webroot/loveyu.org/wp-content/themes/twoheart/inc/functions_call.php on line 367

8条评论在“PHP基础语法之动态表单内容”

写下你最简单的想法