大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
自己刚也用了这种方法,希望对大家有所帮助,一起共同学习哈哈哈哈。有什么疑问下面提出来。
成都地区优秀IDC服务器托管提供商(创新互联建站).为客户提供专业的四川联通机房服务器托管,四川各地服务器托管,四川联通机房服务器托管、多线服务器托管.托管咨询专线:13518219792
刚才自己一种方法是:在模型里面设置自动填充
这个是公用model,定义自动填充的函数如下:
class CommonModel extends Model {
function getDate{
return ('Y-m-d');
}}
在该model中
class testModel extends CommonModel{
// 自动填充设置
protected $_auto = array(
array('update_date','getDate',1,'callback'),
);
}
数据库中对应字段:update_date
傻鸟啊,最后登录时间和最后登录ip需要手动写方法更新的呀,验证登陆成功的时候调用下你写的更新方法。
Model设置的填充是操作数据的时候自动填充啊。
你把概念搞错啦。
自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析。
create()
ThinkPHP 自动验证与自动填充是在创建数据对象 create() 时实现的,因此自动验证与自动填充无效很大程度上与 create() 有关。
create 方法语法如下:
create(mixed data, string type)
data 表示接受的数据,type 表示本次的具体操作(写入还是更新数据)。两个参数都可省略,data 参数省略的情况下默认为接受 $_POST 数据,而 type 默认情况下由系统自动识别。
但系统自动识别 type 是有缺陷的,当传入的字段有主键字段时,系统就识别为更新操作,否则就是写入操作。所以当主键字段非自动增长而是需要 SQL 写入时,那么自动验证和自动填充都可能无效。
例如添加数据记录时,如果表单中有主键字段或者系统中产生了主键字段(如录入设备编号),那么 ThinkPHP 就认为本次操作为更新操作,对于例如下面设定的自动验证和填充都会略过:
protected $_validate = array(
// 新增时验证标题唯一
array('title','','标题已经存在!',0,'unique',1),
};
// 自动填充
protected $_auto = array(
// 新增时填充时间戳
array('pubtime','time',1,'function'),
);
尽管在操作中,执行了 add() 操作将数据写入了数据表,但这时会发现自动验证与自动填充无效。
出现这种情况时,只需将操作类型显式的传入 create() 方法即可,即 create($_POST,1),告诉系统本次操作为写入数据。另外如果传入的数据不是 $_POST ,也要将数据当作参数传入,如 create($_GET)。
字段未对应
由于粗心,未对应好表单字段与数据表字段。
数据表字段做了更改
在开发过程中,更改了表字段名称,而缓存未及时更新,导致系统判断为无效字段而被 unset 掉。所以在更改了表字段名称之后,及时将 Runtime/Data 下的数据表缓存清除。
Model 命名错误
Model 命名错误,未严格按照规范命名,如头字母未大写或粗心导致字母顺序不对,多或少字母等。这等错误往往会直接导致模型失效。
M 方法中使用自动验证与自动完成
一般情况下,使用 M 方法实例化模型时,是无法实例化自定义模型类的,也就无法使用自动验证与自动完成功能,因此建议使用 D 方法来实例化模型类。如果必须要在 M 方法中实现自动验证或自动完成,参看《ThinkPHP 使用M方法(不创建模型类)时实现自动验证与自动填充》。
php写不了这样的程序,可以直接用网页自动填表提交监控工具(PageSubmit)这类软件
create() 方法将自动收集提交的表单数据并创建数据对象而无需人工干预,这在表单数据字段非常多的情况下更具优势。 将前文写入表单数据的例子用 create() 来实现: public function insert2(){ header("Content-Type:text/html; charset=utf-8"); $Dao = M("User"); if($Dao-create()){ $Dao-password = md5($_POST["password"]); $Dao-regdate = time(); if($lastInsId = $Dao-add()){ echo "插入数据 id 为:$lastInsId"; } else { echo "数据写入错误!"; } }else{ exit($Dao-getError().' [ 返回 ]'); } } create() 创建数据对象后,将自动收集提交过来的表单数据。而表单数据可能需要经过一定加工(例如将密码加密)才能写入数据表,所以可以对数据对象的成员属性值根据进行修改或添加去除等。 提示:create() 创建的数据对象存放于内存,在执行入库动作(add() 或 save())之前,都可以进行修改。 在上面的例子里,create()方法 的行为和 date()方法 是一致。但 date() 方法只是简单的创建数据对象,但 create() 方法还具备:令牌验证数据自动验证 字段映射支持 字段类型检查 数据自动完成 等各种高级的数据功能,要完成这些高级数据模型功能,需要使用 D方法 实例化数据模型。ThinkPHP 提供了各种验证与填充规则供调用,具体可参见《ThinkPHP 自动验证》与《ThinkPHP 自动填充》。 自动验证与自动填充 在将表单写入数据表之前,常常会有一些对数据的检测(提交的用户名是否符合要求)与处理(如例子中的密码加密以及取得当前时间戳)。create() 方法就支持数据的自动验证与自动完成。 在LibModel 目录下创建 UserModel.class.php 文件(User 为创建的模型对象,也对应 前缀_user 表),加入自动验证和自动填充规则: class UserModel extends Model{ // 自动验证设置 protected $_validate = array( array('username','require','用户名必须填写!',1), array('email','email','邮箱格式错误!',2), array('username','','用户名已经存在!',0,'unique',1), ); //自动填充设置 protected $_auto = array( array('regdate','time',self::MODEL_INSERT,'function'), array('password','md5',self::MODEL_INSERT,'function'), ); } 将insert2 操作更改为: public function insert2(){ header("Content-Type:text/html; charset=utf-8"); $Dao = D("User"); if($Dao-create()){ if($lastInsId = $Dao-add()){ echo "插入数据 id 为:$lastInsId"; } else { echo "数据写入错误!"; } }else{ exit($Dao-getError().' [ 返回 ]'); } } 如果提交的数据不符合验证要求(如用户名存在),则 create() 创建数据对象失败(返回 FALSE ),$Dao-getError() 会打印出自动验证设置规则里面设置的提示信息:用户名已经存在! 如果验证规则通过后,系统会进行自动填充设置,将表单密码进行 MD5 加密以及取得当前的时间戳填充入 create() 的数据对象。 所以D方法 配合 create() 是非常智能而强大的,恰当运用可以达到事半功倍快速开发的目的。 提示D 方法配合 create() 由于其功能强大,也就损失了一定的效率,在业务逻辑不复杂的情况下推荐 M方法+data() 模式
纯手敲
html :
编号:input type='text' name='number' id='number'
对应的信息:input type='text' name='info' id='info'
javascript(因为用到了ajax,所以前提要引入jquery):
//监控编号的keyup事件,当按键弹起时触发
$('#number').keyup(function(){
var number = $('#number').val();
$.ajax({
type: "POST",
url: "get_info.php",
data: "number = "+number,
success: function(data){
$('#info').val(data);
}
});
})
PHP:
$number = trim($_POST['number']);
//这里是数据库的select查询代码,这里简写一下
select * from xxx WHERE number = "{$number}";
//查询出来的记过自己处理一下
$info = '这是查询结果';
echo $info;