<?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 = '47.120.42.125:888';
$serverName = 'db4free.net:3306';
$dbName = 'qixiaorantut';
#$dbUsername = 'root';
$dbUsername = 'qixiaorantut';
#$dbPassword = 'Jwj.258079';
$dbPassword = 'jwj258079';
$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字节，允许字母数字下划线)";
  }
}

?>
<!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>
