SpeedPHP 学习教程第四篇——实战留言本之增加和规则验证(原创连载五)

本篇教程是SpeedPHP 学习教程第四篇——实战留言本之增删改,也是正式进行 speedphp的学习教程

有些图不方便贴,大家可以看下去安徽php社区:http://bbs.hfphp.org看下,

希望大家认真学习,多去动脑筋,当然也要动手啦~,学习编程的唯一诀窍就是多动手和多动脑,这样才能快速的学习。

添加留言:
添加留言当然有一个表单了,当我们打开留言页面的时候,我们就让在首页显示留言页面,
这段代放在controller/main.php,这个是系统默认的控制器文件,默认的动作是main里面的index,所以,我 们我添加留言表单就放在这里面(代码在后期会提供给大家),代码如下:
代码
$posturl = spUrl('main','write');     //本篇第一个知识点,spUrl,URL模式的构建函数
//下面是表单就不说了,大家都知道的啦

echo "<p align=center><h2>sp留言板</h2></p>";
echo "<p>请写下你的留言</p><form action={$posturl} method=POST>";
echo "<P>您的名字:<input type=text name=name></P>";
echo "<p>留言标题:<input type=text name=title></p>";
echo "<p>留言内容:<textarea name=contents></textarea></p>";
echo "<p><input type=submit value=提交></p></form>";

spUrl,URL模式的构建函数,他也是speedphp比较重要的一个函数之一,这里大家可能感触不是很深,也不是很容易理解,什么是URL构建函 数,那么我们看看代码第四行

在form表单的action使用了前面定义的$posturl,那么我们可以看看,在html页面他被解析成什么了,

 这里有图,直接贴图不方便的,

详见:安徽php社区  http://bbs.hfphp.org/thread-40-1-1.html  吧。

 通过截图,我们看到这火狐的firebug里面,spUrl('main','write');已经变成了:/spphp /index.php?c=main&a=write,大家可以比对一下。

spUrl是一个比较智能的函数,他会自动拼接成你所想要的,第一个是入口控制器名称(比如:main),第二个参数是动作名称(比如:write),他 还有第三个参数array args 传递的参数,数组形式
当然还有第四个,和第五个参数,但不是特别重要,有兴趣,大家可以自己深入的学习。 原创:安徽php社区:http://bbs.hfphp.org
总之,大家知道他是用来拼接Url就可以了,以后我们还会继续讲到。

上面的添加(write)动作,我们需要插入数据库

代码
        function write(){    //写入动作
            $guestbook = spClass("guestbook");      //初始化数据表对象
            //$a1 = $this->spArgs();   //第二个知识点。spArgs代替$_GET/$_POST的数据获取
            //print_r($_POST);
            //dump($a1);die;     // 调试函数,可以调试看看得到什么东西。
//开始规则验证

            if(false == ($res = $guestbook->spVerifier($this->spArgs()))){     //第三个知识点。$guestbook->spVerifier
                $guestbook->create($this->spArgs());            //第四个知识点create,speedphp自带的插入数据库函数
                echo "留言成功,<a href='index.php'>返回</a></p>";
            }
else{
                
//print_r($res);
                //这里返回是数组,要遍历的

                if(!empty($res['name'])){
                        
foreach($res['name'as $v){
                                
echo $v."<br />";
                        }
                }
elseif(!empty($res['title'])){
                        
foreach($res['title'as $v1){
                                
echo $v1."<br />";
                        }
                }
elseif(!empty($res['contents'])){
                        
foreach($res['contents'as $v2){
                                
echo $v2."<br />";
                        }
       }
else{}
                
    }
}

第二个知识点: spArgs代替$_GET/$_POST的数据获取——获取环境参数


在日常的编程工作中,我们经常会使用到$_POST/$_GET来获取表单提交数据以及URL参数,而sp框架提供了spArgs来简化 了$_POST/$_GET的一些使用过程。
 原创:安徽php社区:http://bbs.hfphp.org
spArgs是controller继承类的一个扩展方法,可以有两个参数,第一个参数是将要获取的参数名称,为空则返回全部参数的数组。第二个参数是默 认值,当需要获取的参数为空时,将返回该默认值。
大家也可以打印出,第二个知识点的$a1,就会发现spArgs有很多的内容,比如大家可以把上面的dump前的去掉,spArgs是获取环境参数,具体 大家可以去侧试看看,有哪些东西。

在上面的添加留言表单中,我们可以看到,

echo "<P>您的名字:<input type=text name=name></P>";
echo
 
"<p>留言标题:<input type=text name=title></p>";
echo 
"<p>留言内容:<textarea 
name=contents></textarea></p>
";


 表单中我们将提交name,title和contents等参数。然后在程序当中:

$name = $this->spArgs("name", "jake"); // 可以获取到表单的name,第二个参数是当name没有值时返回的默认值 
$title = $this->spArgs("title", "这里是默认标题"); // 可以获取到表单的title  


 或者可以用:

...  
if( $name = $this->spArgs("name") ){  
// name被提交  
}else{  
// 没有提交  
 } 
 

同时,如果spArgs没有输入参数,将返回全部的提交参数:

dump($this->spArgs()); // 该语句在开发中常用作调试用

  原创:安徽php社区:http://bbs.hfphp.org

第三个知识点。$guestbook->spVerifier

数据验证类,提供spModel的继承类验证数据格式的匹配性,能够让开发者自定义验证规则以及返回的提示结果。

在日常的开发中,我们经常会遇到针对输入数据的格式验证,比如说检查用户名的长度,电子邮件的格式等等。一般来说我们是使用验证函数库的形式来提高写作数 据验证程序的效率,但是在这里我们介绍sp框架中比验证函数库更为有效和简便的数据验证功能类——spVerifier。

spVerifier是spModel的附属类之一,根据预设的验证规则来对数据进行有效性的验证。按照规则进行数据验证,有利于对验证程序的重用,如对 用户名的验证,基本上在各类型的应用程序中是类似的,所以将一个程序中用户名的验证规则直接复制到另一个程序的用户名验证规则中,那样就可以完成了第二个 程序对用户名的验证了。

spVerifier的验证规则分成两部分,分别是规则与提示信息,本章先介绍验证规则和一些spVerifier类自带的验证方法。

我们还是以用户名和电子邮件的验证作为例子,我们在一个应用程序需要验证用户名和电子邮件,比较一般的情况就是检查用户名不能长于12个字符也不能少于5 个字符,电子邮件首先是要符合电子邮件的格式,同时也不能长于20个字符和少于8个字符。
 原创:安徽php社区:http://bbs.hfphp.org
实例中$res = $guestbook->spVerifier($this->spArgs()))   则会验证所有的传入的值。

     请注意,在spVerifier中针对汉字的长度判断进行了特殊的处理,令到判断最长和最短的字符的时候,英文和汉字是相等长度的。也就是 “Hello”和“我是用户名”的长度都是5。这样的处理避免了许多应用程序中需要向用户解释“一个汉字等于2或者3个英文字符长度”的问题。  


   我们看看,本实例的验证规则: 
代码
    class guestbook extends spModel{
        
public $pk ="id";
        
public $table = "guestbook";
//开始验证
        var $verifier = array(
                        
"rules" => array(      //规则 开始
                                        'name' =>array(        //对名字进行验证    
                                                'notnull' => TRUE,      //不为空
                                                'minlength' =>3,         //长度不能小于3
                                        ),
                                        
'title'=>array(
                                                
'notnull'=>TRUE,
                                        )
,
                                        
'contents'=>array(
                                                
'notnull' =>TRUE,
                                        )
,
                        )
,        
//验证失败时的提示信息
                        "messages" => array(
                                        
'name' =>array(
                                                
'notnull' => "姓名不能为空",
                                                
'minlength' => "姓名不能少于三个字符",
                                        )
,
                                        
'title' =>array(
                                                
'notnull' =>"标题不能为空",
                                        )
, 
                                        
'contents' => array(
                                                
'notnull' =>"内容不能为空",
                                        )
,
                        )
,
        );
        
    }


执行验证的程序:   
  
// 待检验的输入参数,一般来说可以直接使用$this->spArgs()->get();来获取提交的输入数据
$res = $guestbook->spVerifier($this->spArgs()));

iffalse == $userObj->spVerifier($this->spArgs()->get()) ){
 
// 通过验证后执行的...  (比如插入数据库)
to do;  
}
else{  
// 不能通过验证(显示验证不通过提示信息)
 to do
 }  

注意: 如果验证通过,则返回false,否则返回true。
Speedphp不仅内容了很多的规则,而且还支持自定义的规则,这样方便框架具有很大的灵活性。
具体的大家可以看官方的教程,我相信大家有了这个基础后,看应该比较容易的。


第四个知识点create:在数据表中新增一行数据

用法:create($row)
参数:
$row,数组形式,数组的键是数据表中的字段名,键对应的值是需要新增的数据。

实例代码中可以直接 $guestbook->create($this->spArgs());
 原创:安徽php社区:http://bbs.hfphp.org
$this->spArgs()是用来接收所有的传入的参数的。

框架的特点是可以节约时间,提高我们的开发效率,所以他们会比较智能,这些数据,框架会把我们处理好的。

这样大家在这里明白,为什么要把input标签的name设成和数据库的字段名相同了吧,这样可以节 约很多的时间

再例如:

代码
/** 首先是准备新增的数据  
  *  表中的gid因为是自增量,所以没必要去赋值  
  *  replay因为是可为空,并且刚留言也不会有回复,所以也可以不赋值  
  *  数组中的键是字段名称,值是数据  
  
*/ 
$newrow = array// PHP的数组 'name' => 'jake',  
 'contents' => '这是我的第一个留言', 
 
'post_time' => date('Y-m-d H:i:s'),
 
'post_ip' => $_SERVER['REMOTE_ADDRESS'],  
 ); 
 
$gb = spClass('gb'); // 初始化留言本模型类  
 $gb->create($newrow);  // 进行新增操作          

新增成功则返回新增的自增量ID,失败则返回FALSE。

好了,大家有什么问题可以更贴留言~

 原创:安徽php社区:http://bbs.hfphp.org,

转载请写明出处,谢谢

原文地址:https://www.cnblogs.com/jincon/p/1764144.html