基于PHP的表单提交系统

  1. Web表单生成器
  2. 注意:本表单会真实上传数据库请不要填写真实信息
  3. 【功能分析】
  4. 【功能实现】
  5. PHP组件式生成表格与使用
  6. 前往php组件生成表格
  7. 小知识

Web表单生成器

注意:本表单会真实上传数据库请不要填写真实信息

【功能分析】

Web表单生成器的具体功能需求:

  • 使用多维数组保存表单的相关信息。

  • 支持的表单项包括文本框,文本域,单选按钮,复选框和下拉列表5种。

  • 保存每个表单项的标签,提示文本,属性,选项值,默认值等。

  • 将功能封装成函数,根据传递的参数生成指定的表单。

【功能实现】

<?php
    $serverName = 'db4free.net:3306';
    $dbName = 'qixiaorantut';  
    $dbUsername = 'qixiaorantut';
    $dbPassword = '123456';
    $con=mysqli_connect($serverName,$dbUsername,$dbPassword,$dbName);

    if (isset($_POST)){  
        $name=$_POST['name'];
        $email=$_POST['email'];
        $phone=$_POST['phone'];
        $sex=$_POST['sex'];
        $hobby=$_POST['hobby'];
        $hobbys = join(",",$hobby);
        $home=$_POST['home'];
        $intro=$_POST['intro'];
        $sql="insert into user values(null,'" . $name ."','" . $email ."','" . $phone ."','" . $sex ."','" . $hobbys ."','" . $home ."','" . $intro."');";
        $result = mysqli_query($con,$sql);
        if($result && mysqli_affected_rows($con) > 0){
            echo '添加成功';
            var_dump(mysqli_insert_id($con));
        }else{
            echo '插入失败';
        }
        mysqli_close($con);
    }
    header('Refresh:3;url=http://47.120.42.125/2023/05/08/PHP表单提交系统/');
?>
个人信息
姓名:
邮箱:
手机号码:
性别:
爱好: 游泳 读书 跑步
住址:
自我介绍:

PHP组件式生成表格与使用

<?php
//保存表单元素,多维数组
$elements = [
    [
        'attr' => ['type' => 'text', 'name' => 'user', 'size' => '25'],
        'tag' => 'input',
        'text' => '姓  名:',
     ], 
    [
        'tag' => 'input',
        'text' => '邮  箱:',
        'attr' => ['type' => 'text', 'name' => 'email', 'size' => '25']
    ], [
        'text' => '手机号码:',
        'tag' => 'input',

        'attr' => ['type' => 'text', 'name' => 'tel', 'size' => '25']
    ], [
        'tag' => 'input',
        'text' => '性  别:',
        'attr' => ['type' => 'radio', 'name' => 'gender'],
        'option' => ['m' => '男', 'w' => '女'],
        'default' => 'm'
    ], [
        'tag' => 'input',
        'text' => '爱  好:',
        'attr' => ['type' => 'checkbox', 'name' => 'hobby[]'],
        'option' => ['swimming' => '游泳', 'reading' => '读书', 'running' => '跑步',],
        'default' => ''
    ], [
        'tag' => 'select',
        'text' => '住  址:',
        'attr' => ['name' => 'area'],
        'option' => ['' => '--请选择--', 'BJ' => '北京', 'SH' => '上海', 'SZ' => '深圳',]
    ], [
        'tag' => 'textarea',
        'text' => '自我介绍:',
        'attr' => ['name' => 'declare', 'cols' => '50', 'rows' => '5']
    ], [
        'tag' => 'input',
        'attr' => ['type' => 'submit', 'value' => '提交']
    ]
];
function generate($elements){
    $items='';
    $default=['tag'=>'','text'=>'','attr'=>[],'option'=>[],'default'=>''];
    foreach($elements as $v){
        $v= array_merge($default,$v);
        $v['attr']=generate_attr($v['attr']);
        $generate='generate_' . array_shift($v);
        $items .='<tr>' . call_user_func_array($generate,$v) . '</tr>';
    }
    return "<table>$items</table>";
}
function generate_attr($attr,$items=''){
    foreach($attr as $k =>$v){
        $items.="$k=\"$v\" ";
    }
    return $items;
}
function generate_input($text,$attr,$option,$default){
    if(empty($option)){
        $items = "<input $attr value=\"$default\">";
    }else{
        $items='';
        foreach ($option as $k => $v){
            $checked=in_array($k,(array)$default,true)?'checked':'';
            $items .="<lable><input $checked $attr value=\"$k\">$v</lable>";
        }
    }
    return "<th>$text</th><td>$items</td>";
}
function generate_textarea($text,$attr,$option,$default){
    $textarea="<textarea $attr>$default</textarea>";
    return "<th>$text</th><td>$textarea</td>";
}
function generate_select($text,$attr,$option,$default){
    $items='';
    foreach($option as $k => $v){
        $selected=($default ===$k)?'selected':'';
            $items .="<option $selected value=\"$k\">$v</option>";
    }
    $select="<select $attr>$items</select>";
    return "<th>$text</th><td>$select</td>";
}

$serverName = 'db4free.net:3306';
$dbName = 'qixiaorantut';

$dbUsername = 'qixiaorantut';

$dbPassword = '123456';
$con=mysqli_connect($serverName,$dbUsername,$dbPassword,$dbName);
if (isset($_POST)){  

  $pattern="/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/";

  $name=$_POST['user'];
  $email=$_POST['email'];
  $phone=$_POST['tel'];
  $sex=$_POST['gender'];
  $hobby=$_POST['hobby'];
  if($hobby!=null) $hobbys = join(",",$hobby);
  $home=$_POST['area'];
  $intro=$_POST['declare'];
  if(preg_match($pattern,$name)){
    $sql="insert into user values(null,'" . $name ."','" . $email ."','" . $phone ."','" . $sex ."','" . $hobbys ."','" . $home ."','" . $intro."');";
    echo $sql;
    $result = mysqli_query($con,$sql);
    if($result && mysqli_affected_rows($con) > 0){
        echo '添加成功';
        var_dump(mysqli_insert_id($con));
    }else{
        echo '插入失败';

    }
    mysqli_close($con);
  }else{
    echo "帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)";
  }
}
?>

html部分

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Web表单生成器</title>
    <style>
      body{margin-top:20px;}
      .box{font-family:Tahoma,simsun;font-size:12px;border:1px solid #1678BE;display:table;margin:0 auto;}
      .box-head{padding:5px 20px;background-color:#2487C9;color:#fff;font-size:14px;}
      .box-body{padding:10px 20px;}
      .box-body th{font-weight:normal;vertical-align:top;padding-top:5px;}
      .box-body td{padding-top:2px;padding-bottom:8px;}
      .box-body select{font-family:Tahoma,simsun;font-size:12px;padding:2px 5px;cursor:pointer;}
      .box-body label{margin-right:5px;cursor:pointer;}
      .box-body label input{cursor:pointer;}
      .box-body input{vertical-align:middle;font-family:Tahoma,simsun;font-size:12px;}
      .box-body input[type=text]{padding:2px;}
      .box-body input[type=radio]{margin-top:-1px;}
      .box-body input[type=submit]{padding:4px 15px;cursor:pointer;}
    </style>
  </head>
  <body>
    <!-- 输出定制表单 -->
    <div class="box">
      <div class="box-head">个人信息</div>
      <div class="box-body">
        <form action="form.php" method="post" enctype="multipart/form-data">
          <?=generate($elements)?>
        </form>
      </div>
    </div>
    <link rel="stylesheet" href="buttoncss.css">
    <a href="/2023/05/08/基于PHP的表单提交系统/"><button class="back">回到博客</button></a>
  </body>
</html>

前往php组件生成表格

小知识

延迟跳转(比如登陆成功后会有几秒钟等待时间,然后跳转到了其他页面)

header('Refresh:3;url=main.php');

欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1701220998@qq.com
导航页 GitHub