关于spModel中create的使用

#1 snllll

create
在数据表中新增一行数据
int create(array row)
参数:
  • array row 数组形式,数组的键是数据表中的字段名,键对应的值是需要新增的数据。

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

----------------
那么我现在用
 
     if($userObj->create($rows)>0)
     {
      $this->jump(spUrl('admin','adminlist'));
     }
     else{
      $this->error('未知错误!注册不成功',spUrl("admin","adminlist"));
     }

我数据库中新增的管理员id是2,但是 为什么不能正确判断?还提示错误呢

2010-04-21 21:52:11

#2 snllll

还有 ,关于{pwinput id="thepass"}>的使用,使用这个之后如何进行输入判断呢?
如果我什么都不填写也就是空白提交的时候,系统就会提示:
INSERT INTO admin (uname,upass) VALUES ('demo,'0')
执行错误: Duplicate entry '0' for key 1

如果我使用
 var $verifier = array( // 验证登录信息,由于密码是加密的输入框生成的,所以不需要进行“格式验证”
  "rules" => array( // 规则
   'uname' => array(  // 这里是对uname的验证规则
    'notnull' => TRUE, // uname不能为空
    'minlength' => 3,  // uname长度不能小于3
    'maxlength' => 12,  // uname长度不能大于12
    //'haveuse'=>FALSE,
   ),
   'upass'=>array(
    //'notnull' => TRUE, // uname不能为空
    //'minlength' => 6,  // uname长度不能小于3
   ),
  ),
  "messages" => array( // 提示信息
   'uname' => array(
    'notnull' => "用户名不能为空",
    'minlength' => "用户名不能少于3个字符",
    'maxlength' => "用户名不能大于20个字符",
    //'haveuse'=>"用户名已经被使用了",
   ),
   'upass'=>array(
    //'notnull' =>  "密码不能为空",
    //'minlength' => "密码不能少于6个字符",
   ),
  )
);

我无论如何都会提示错误!甚至是密码不能为空!我只好给注释掉了关于密码部分的验证规则。

2010-04-21 21:55:28

#3 snllll

关于验证类和分页类的使用,的确要比codeiginter繁琐很多倍!

2010-04-21 21:56:21

#4 snllll

第二个问题,我提交的正常的密码也会被解析成-1 。

我在保存前用了$upass = spClass("spAcl")->pwvalue(); 的

2010-04-21 21:57:58

#5 snllll

关于这个错误:
INSERT INTO admin (uname,upass) VALUES ('demo,'0')

执行错误: Duplicate entry '0' for key 1
原来是这样的,我竟然把主键的自动增长给忘记打钩了!记得这里一定要给主键留下自动增长属性。
那么请问jake,是否GUID的主键就没法使用了?

2010-04-21 22:04:17

#6 snllll

如果我把pass的内容改成,这个时候我就可以验证了,但是这个时候我如何获取它的MD5值呢?
直接使用:$upass = md5($this->spArgs("pass")); 即可!

2010-04-21 22:15:38

#7 snllll

{:2_25:}


哈哈,这个帖子简直成了我的现场直播了,如果sp要做一个 WIKI类知识库的话,我觉得我还是可以分享很多的。
这些问题很多跟我一样的小菜鸟也会遇到的 。

2010-04-21 22:17:05

#8 jake

1. create的问题,在无自增量的表中,主键id应该自行加上,因为mysql在没有自增量也没有insert id值的时候,无法执行。
“Duplicate entry '0' for key 1”的错误提示,是因为数据表中插入了重复的主键,主键是唯一的,不能重复,所以mysql也会提示错误。这里的原因,我猜想应该是你表中原本有数据,后面再设置了自增量,自增量一般是从1开始,所以值为1的主键重复了。解决方法是将表的自增量起点设置成当前原记录id最大加一的值。

2. 验证类和分页类很简单,实际开发中,是非常容易使用的。但是如果仅是“研究”,那么建议从本身spLinker和spPager的代码来透彻地研究。

3. 加密密码输入框仅是扩展类功能,并非speedphp内置的功能。这个功能只作为一种特殊的尝试。
这是模仿discuz论坛加密登录机制的一个尝试,但是要说明的是,目前加密登录也仅作为discuz可选的设置,默认设置是普通登录框,另外除了discuz外,也没其他哪个系统有使用到这种输入框,所以加密密码输入框可以尝试使用,但是这里我不作为推荐使用的功能。

如果要使用,最好先能弄清楚其中的运行机制,以及为什么代码样这样写,这样写的影响是什么。

2010-04-21 22:36:03

#9 snllll

conditions中如何使用sql的in语法?
比如原来sql是 select * from table where id in($id)现在用字符串写就是:
$conditions="id  in($id)" ,
用数组形式能表示吗?
如何批量操作呢!?

2010-04-21 22:46:51

#10 jake

conditions中如何使用sql的in语法?
比如原来sql是 select * from table where id in($id)现在用字符串写就 ...
snllll 发表于 2010-4-21 22:46
如果你的“$id”,是一个值,或者是多个用逗号分割的字符串,那么$conditions = "id in($id)"是对的。$conditions的数组形式只能封装 and 的条件(但是in的形式,数组的键值会重名,所以只能用字符串的方式)。
PS:本贴将转移到 问答板块,谢谢。

2010-04-21 22:49:06

#11 snllll

回复 10 jake


    {:2_35:}   好的,下次一定注意发到合适的版面,我老是搞错~囧

2010-04-21 23:12:13