[PHP初级]手把手教你写注册程序 2

输入界面以及取得输入信息请看第一章

信息的验证

这一章说信息的验证。

为什么要验证输入信息?

验证!!!很重要!!!

简单来说:

  • 验证可以过滤不符合规则的信息,减少整形处理,提高效率;
  • 验证可以在一定程度上过滤有害信息,保护服务器和数据库内的信息。

说网站安全什么的,我们能用php做的最最基础的,就是在有用户输入的地方加上适当的验证!
比如说按照下面的实例要求,输入框中即使输入了a or 1=1--这样的mysql注入信息,会在验证的时候就被拦下来,并不会被送往数据库,更不会“不经意的”取出数据库中重要的信息。

验证

上一章
获取到正确的POST值了,我们将根据以下的规则对输入信息进行验证:

项目必须验证内容
用户名YES不超过20字 / 只允许输入半角英文及数字
密码YES8-20字 / 只允许输入半角英文及数字
确认密码YES8-20字 / 只允许输入半角英文及数字 / 与密码一致

这里可以看出,我们需要写以下4个验证方法:

  • 字数上限验证
  • 字数下限验证
  • 只允许输入半角英文及数字的验证
  • 一致与否的验证

process.php

/**
 * 字数上限
 *
 * @param int $max 字数上限
 * @param string $input 输入信息
 * @return string  不符合要求时返回错误信息,符合要求时返回空文字列
 */
public function checkMaxLength($max, $input)
{
    return (mb_strlen($input) > $max) ? '最多只能输入' . $max . '字。' : '';
}

/**
 * 字数下限
 *
 * @param int $min 字数下限
 * @param string $input 输入信息
 * @return string  不符合要求时返回错误信息,符合要求时返回空文字列
 */
public function checkMinLength($min, $input)
{
    return (mb_strlen($input) < $min) ? '至少输入' . $min . '字。' : '';
}

/**
 * 只允许输入半角英文及数字的验证
 *
 * @param string $input 输入信息
 * @return string  不符合要求时返回错误信息,符合要求时返回空文字列
 */
public function checkEnNum($input)
{
    $pattern = '/^[a-zA-Z0-9]+$/';
    return (!preg_match($pattern, $input)) ? '只可以输入英文及数字。' : '';
}

/**
 * 一致与否
 *
 * @param string $source 参照信息
 * @param string $input 输入信息
 * @return string  不符合要求时返回错误信息,符合要求时返回空文字列
 */
public function checkSameValue($source, $input)
{
    return ($input !== $source) ? '输入信息不一致' : '';
}

现在准备一个放置错误信息的数组,并在数组内呼出验证方法:
process.php -> 注册按钮被按下时的if文内

// 放置错误信息的数组
$errMess = [
    'userNm' => [
        'maxLength' => checkMaxLength(20, $userNm),
        'EnNum' => checkEnNum($userNm)
    ],
    'pass' => [
        'minLength' => checkMinLength(8, $pass),
        'maxLength' => checkMaxLength(20, $pass),
        'EnNum' => checkEnNum($pass)
    ],
    'confirmPass' => [
        'minLength' => checkMinLength(8, $confirmPass),
        'maxLength' => checkMaxLength(20, $confirmPass),
        'EnNum' => checkEnNum($confirmPass),
        'SameToPass' => checkSameValue($pass, $confirmPass)
    ]
];

如果什么都不输入直接按注册的话,这个数组会是这样:

<输出信息>
array (size=3)
  'userNm' => 
    array (size=2)
      'maxLength' => string '' (length=0)
      'EnNum' => string '只可以输入英文及数字。' (length=33)
  'pass' => 
    array (size=3)
      'minLength' => string '至少输入8字。' (length=19)
      'maxLength' => string '' (length=0)
      'EnNum' => string '只可以输入英文及数字。' (length=33)
  'confirmPass' => 
    array (size=4)
      'minLength' => string '至少输入8字。' (length=19)
      'maxLength' => string '' (length=0)
      'EnNum' => string '只可以输入英文及数字。' (length=33)
      'SameToPass' => string '' (length=0)

接下来我们要对数组进行判断:

  • 数组中有错误信息的时候在注册界面显示错误信息
  • 数组中没有错误信息的时候将输入信息保存到数据库

为了查看上面这个多元数组中是否有错误信息,我写了下面这个方法:
process.php

/**
 * 是否有错误信息
 *
 * @param array $errMess 错误信息的数组
 * @return bool 无错 - TRUE | 有错 - FALSE
 */
function isErr($errMess)
{
    foreach ($errMess as $val) {
        if (!empty(array_filter($val))) {
            return false;
        }
    }

    return true;
}

有了这个方法以后,我们判定是否有错误可以这样写:
process.php -> 注册按钮被按下时的if文内

    if (!isErr($errMess)) {// isErr的值为false(即有错)的时候
        require_once('index.php');// 显示注册页面
        exit;
    }

    // isErr的值为true(即无错)的时候
    // 将信息保存至数据库

有错误信息的情况下,php什么都不用做,所以我们也什么都不用写。

显示错误信息

关于验证,最后一步就是将错误信息输出到前台,告诉用户“你输错了哪里”。
这一步我们需要写一个可以输出红色字体的方法:

process.php

/**
 * 有错误的话输出红色的错误信息
 *
 * @param array $errMess 各个输入项目的错误信息的数组
 * @return string 红色字体的错误信息的html文
 */
function displayRedErr($errMess)
{
    $start = '<p style="color:red">';
    $end = '</p>';

    return $start . implode('<br />', $errMess) . $end;
}

输出错误信息的方法写好了,这时候我们需要翻出index.php,添加4行php文:
index.php:

<?php require_once('process.php'); ?>
<!DOCTYPE html>
<html>
<head>
<title>注 册</title>
</head>
<body>

<form action="process.php" method="POST">
用户名 : <input name="userNm"><br />
<?= (isset($errMess) && !empty(array_filter($errMess['userNm']))) ? displayRedErr($errMess['userNm']) : null; ?>
密码 : <input name="pass" type="password"><br />
<?= (isset($errMess) && !empty(array_filter($errMess['pass']))) ? displayRedErr($errMess['pass']) : null; ?>
确认密码 : <input name="confirmPass" type="password"><br />
<?= (isset($errMess) && !empty(array_filter($errMess['confirmPass']))) ? displayRedErr($errMess['confirmPass']) : null; ?>

<input type="submit" name="register" value="注册">
</form>

</body>
</html>

<?=<?php echo的缩写,php5.4.0开始官方推荐写法。
需要注意的是,使用php5.4.0之前的版本的朋友不一定能够使用哦(´-ω-`)

到此,验证的写法就结束啦~
下一章是数据的保存٩(ˊᗜˋ*)و

链接

第一章 数据的传输及获取
第二章 输入信息的验证
第三章 数据的保存

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值