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>