<?php
class DB
{
private $address = 'localhost';
private $username = 'root';
private $password = 'root';
private $db = 'sanbao';
private $table = 'card';
private $con;
public function __construct()
{
$con = mysqli_connect($this->address, $this->username, $this->password, $this->db, '3306');
if (mysqli_connect_errno()) {
die('Could not connect: ' . mysql_error());
} else {
$con->set_charset('utf8');
$this->con = $con;
}
}
public function index()
{
//2 创建sql
$_sql = "show full columns from " . $this->table;
$_result = $this->con->query($_sql);
while ($access = $_result->fetch_assoc()) {
// echo "<pre>";
// dump($access);
$data[] = self::HandleArr($access);
}
$data = array_filter($data);
// return view('index',['data'=>$data]);
return $data;
}
static public function HandleArr($arr)
{
if ($arr['Field'] == 'id')
return [];
$preg = '/^([a-z]+)\((\d+)(,?\d+)?\)/';
preg_match($preg, $arr['Type'], $e);
@$len = ['type' => $e[1], 'leng' => $e[2]];
if ($arr['Key'] == 'PRI') {
$arr['Null'] = 'YES';
}
$must = $arr['Null'] == 'YES' ? 0 : 1;
return ['field' => $arr['Field'], 'leng' => $len, 'must' => $must, 'comment' => $arr['Comment']];
}
public function data()
{
$html = "<?php\nnamespace app\对应的控制器\\validate;\n\nuse think\Validate;\n\nclass 模型 extends Validate\n{\n\tprotected \$rule = [%s];\n\tprotected \$message = [%s];\n\tprotected function float2(\$val,\$msg,\$data){\n\t\tif (preg_match('/^[0-9]+(.[0-9]{1,2})?$/', \$val)) {\n\t\treturn true;\n\t}\n\t\treturn \$msg;\n\t}\t\n}";
$arr = $_POST;
$res = array_map(function ($val) {
return array_filter($val);
}, $arr);
$res = array_filter($res);
$rule = "\n\t\t";
$message = "\n\t\t";
foreach ($res as $key => $value) {
$rule .= "'${key}' => '";
foreach ($value as $k => $v) {
//添加条件理由
if (strpos($k, '_' . md5(1))) {
if (strpos($v, '@@')) {
$valmsg = explode('@@', $v);
$v = $valmsg[0];
$msg = $valmsg[1];
} else {
$msg = $k . '的提示信息';
}
$rule .= str_replace('_' . md5(1), '', $k) . ":${v}|";
$message .= "'${key}." . str_replace('_' . md5(1), '', $k) . "' => '${msg}',\n\t\t";
} elseif (strpos($k, '_' . md5(2))) {
$rule .= str_replace('_' . md5(2), '', $k) . ":${v}|";
} else {
$rule .= "${k}|";
$message .= "'${key}.${k}' => '$v',\n\t\t";
}
}
$rule = trim($rule, '|') . "',\n\t\t";
}
$txt = sprintf($html, $rule, $message);
// print($rule);
// print($message);
if (file_put_contents('cheng.php', $txt, FILE_APPEND)) {
echo 'success';
} else {
echo 'error';
}
die;
}
}
if (isset($_GET['type'])) {
$obj = new DB();
$data = $obj->data();
} else {
$obj = new DB();
$data = $obj->index();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
@charset "UTF-8";
/*css 初始化 */
html,
body,
ul,
li,
ol,
dl,
dd,
dt,
p,
h1,
h2,
h3,
h4,
h5,
h6,
form,
fieldset,
legend,
img {
margin: 0;
padding: 0;
}
fieldset,
img,
input,
button {
border: none;
padding: 0;
margin: 0;
outline-style: none;
}
/*去掉input等聚焦时的蓝色边框*/
ul,
ol {
list-style: none;
}
input {
padding-top: 0;
padding-bottom: 0;
font-family: "SimSun", "宋体";
}
select,
input {
vertical-align: middle;
}
select,
input,
textarea {
font-size: 12px;
margin: 0;
}
textarea {
resize: none;
}
/*防止拖动*/
img {
border: 0;
vertical-align: middle;
}
/* 去掉图片低测默认的3像素空白缝隙,或者用display:block也可以*/
table {
border-collapse: collapse;
}
body {
font: 12px/150% Arial, Verdana, "\5b8b\4f53";
color: #666;
background: #fff
}
.clearfix:before,
.clearfix:after {
/*清楚浮动*/
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom: 1;
/*IE/7/6*/
}
a {
color: #666;
text-decoration: none;
}
a:hover {
color: #C81623;
}
h1,
h2,
h3,
h4,
h5,
h6 {
text-decoration: none;
font-weight: normal;
font-size: 100%;
}
/*设置h标签的大小,设置跟父亲一样大的字体font-size:100%;*/
s,
i,
em {
font-style: normal;
text-decoration: none;
}
.col-red {
color: #C81623 !important;
}
/*公共类*/
.w {
/*版心 提取 */
width: 1210px;
margin: 0 auto;
}
.fl {
float: left
}
.fr {
float: right
}
.al {
text-align: left
}
.ac {
text-align: center
}
.ar {
text-align: right
}
.hide {
display: none
}
.addv {
height: 30px;
border-radius: 15px;
outline: none;
}
.font12 {
font-size: 12px;
}
.font14 {
font-size: 14px;
}
.font16 {
font-size: 16px;
}
body {
background: #D9D7D7FF;
}
div {
margin-top: 10px;
}
.header {
text-align: center;
font-size: 40px;
height: 44px;
width: 80%;
margin: 0 auto;
line-height: 44px;
}
.content {
padding-left: 32%;
width: 80%;
font-size: 20px;
}
#title {
font-size: 25px;
padding-left: 30%;
}
.g {
color: #f40;
}
.c {
color: #4FF458FF;
}
.block {
line-height: 25px;
font-size: 22px;
}
</style>
<script src="https://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js"></script>
</head>
<body>
<form action="?type=1" method="post">
<div class="header">
TP5自动验证
</div>
<?php
foreach ($data as $key => $vo) {
# code...
?>
<div id="title"><?php echo $vo['comment'] ?: $vo['field']; ?></div>
<div class="content" data="<?php echo $vo['field']; ?>">
<span class="c">必选:</span><input type="radio" name="<?php echo $vo['field']; ?>[require]"
<?php if ($vo['must'] == 1) echo 'checked'; ?> value="<?php echo $vo['comment']; ?>不可为空">
<span class="g">可选:</span><input type="radio" name="<?php echo $vo['field']; ?>[require]"
<?php if ($vo['must'] == 0) echo 'checked'; ?> value="">
<select name="" class="addv">
<option value="">请选择</option>
<option value="number">整型</option>
<option value="float2" msg="2">浮点型最多两位小数点</option>
<option value="email">邮箱</option>
<option value="mobile">手机号</option>
<option value="array">数组</option>
<option value="date">日期</option>
<option value="alpha">字母</option>
<option value="phonenumber" msg="2">验证手机号</option>
<option value="alphaNum">字母和数字</option>
<option value="alphaDash">字母和数字_</option>
<option value="chs">汉字</option>
<option value="chsAlpha">汉字和字母</option>
<option value="chsDash">汉字字母数字和下划线_-</option>
<option value="url">URL地址</option>
<option value="dateFormat:y-m-d">dateFormat:y-m-d</option>
<option value="in" msg="1">在指定几个值内</option>
<option value="notIn" msg="1">不在在指定几个值内</option>
<option value="notBetween" msg="1">在某个范围</option>
<option value="length" msg="1">字符长度或指定长度</option>
<option value="max" msg="1">最大长度</option>
<option value="min" msg="1">最小长度</option>
<option value="begin_time" msg="1">证某个字段的值是否在某个日期之前before:2016-10-01</option>
<option value="expire_time" msg="1">expire:2016-2-1,2016-10-01</option>
<option value="allowIp" msg="1">允许allowIp:114.45.4.55</option>
<option value="denyIp" msg="1">禁用denyIp:114.45.4.55</option>
<option value="confirm" msg="1">验证某个字段是否和另外一个字段的值一致</option>
<option value="different" msg="1">验证某个字段是否和另外一个字段的值不一致</option>
<option value="eq" msg="1">等于某值</option>
<option value="egt" msg="1">大于等于某值</option>
<option value="gt" msg="1">大于某值</option>
<option value="elt" msg="1">小于等于某值</option>
<option value="lt" msg="1">小于某值</option>
<option value="regex" msg="1">正则</option>
<option value="ip">IP地址</option>
<option value="activeUrl">域名或IP</option>
</select>
</div>
<?php
}
?>
<input type="submit" value="提交">
</form>
</body>
<script>
$('.addv').change(function () {
var name = $(this).parents('.content').attr('data')
var val = $(this).val();
if (val == '') {
return
}
var text = $(this).find("option:selected").text()
switch ($(this).find("option:selected").attr('msg')) {
case '1':
var html = '<div><input type="text" name="' + name + '[' + val +
'_<?php echo md5(1); ?>]" value="" placeholder="添加所需内容@@错误提示"><span class="del">X</span></div>';
break;
case '2':
var html = '<div><input type="text" name="' + name + '[' + val +
'_<?php echo md5(2); ?>]" value="请填写正确填写' + text + '"><span class="del">X</span></div>';
break;
default:
var html = '<div><input type="text" name="' + name + '[' + val + ']" value="请填写正确填写' + text +
'" placeholder=""><span class="del">X</span></div>'
break;
}
$(this).parents('.content').append(html)
})
$("body").delegate(".del", "click", function () {
$(this).parent().remove()
});
</script>
</html>