关于spModel中create的使用
发布于:2022-01-17 09:50:54
#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