用ThinkPHP做的实验,无法往数据表里插入记录。

php中文网
发布: 2016-06-23 14:02:14
原创
1150人浏览过

就是无法插入记录,但是查询,更新,删除都正常。

模版:

<html><head><title></title><meta charset="UTF-8">  <link rel="shorcut icon" href="favicon.ico" type="image/x-icon"></head><body><h1>日程表</h1><a href="__URL__/add/">添加新日程</a><table border="1" id="list"><tr> <td>ID</td> <td>日期</td> <td>时间</td> <td>具体事项</td> <td>是否完成</td> <td>操作</td></tr><volist name='list' id='vo'><tr> <td>{$vo.id}</td> <td>{$vo.year}-{$vo.month}-{$vo.day}</td> <td>{$vo.hour}:{$vo.minute}</td> <td>{$vo.description}</td> <td> <if condition="$vo.status eq Y">已完成 <else />未完成 </if> </td> <td> <if condition="$vo.status neq Y"> <a href="__URL__/update/id/{$vo.id}">标记为完成</a> </if> <a href="__URL__/del/id/{$vo.id}">删除</a> </td> </tr> </volist> </table> </body></html>
登录后复制


插入用的表单:
<html><head><title></title><meta charset="UTF-8"><link rel="shortcut icon" href="favicon.ico" type="image/x-icon"></head><body><h1>添加新日程</h1><form method="post" action="__URL__/insert">日期:<input type="text" name="year" size="4" />年<input type="text" name="month" size="2" />月<input type="text" name="day" size="2" />日<br/>时间:<input type="text" name="hour" size="2" />时<input type="text" name="minute" size="2" />分<br/>描述:<input type="text" name="description" /><br/><input type="hidden" name="status" value="N" /><br /><input type="submit" value="Submit" /></form></body></html>
登录后复制


控制器:
<?phpclass IndexAction extends Action{	public function index()	{		$Calendar=new Model('Calendar');		$list=$Calendar->select();		$this->assign('list',$list);		$this->display();	}		public function add()	{		$this->display();	}		public function insert()	{		$Calendar=new Model('Calendar');		$Calendar->Create();		$result=$Calendar->add();		$this->redirect('index');	}		public function update()	{		if(isset($_GET['id']))		{			$id=$_GET['id'];			$Calendar=new Model('Calendar');			$Calendar->query("update calendar set status='Y' where id=$id");			$this->redirect('index');		}	}		public function del()	{		if(isset($_GET['id']))		{			$id=$_GET['id'];			$Calendar=new Model('Calendar');			$Calendar->query("delete from calendar where id=$id");			$this->redirect('index');		}	}}?>
登录后复制


希望各位能帮忙解决下,谢谢。

阿里云-虚拟数字人
阿里云-虚拟数字人

阿里云-虚拟数字人是什么? ...

阿里云-虚拟数字人 2
查看详情 阿里云-虚拟数字人

回复讨论(解决方案)

$Calendar->Create();
判断下这句执行结果是否成功,不成功 echo $this->getErrors()看看是什么原因。

$Calendar->Create();
判断下这句执行结果是否成功,不成功 echo $this->getErrors()看看是什么原因。
还真是这句话有错误,不过请问echo $this->getErrors()这句话加在哪里?我小白。。。系统并没有报错。

$result=$Calendar->add();
print_r($Calendar);
exit();
如果SQL有错误,应该是会打印出来的

$result=$Calendar->add();
print_r($Calendar);
exit();
如果SQL有错误,应该是会打印出来的
这是打印结果Model Object ( [_extModel:private] => [db:protected] => DbMysql Object ( [dbType:protected] => MYSQL [autoFree:protected] => [debug] => 1 [pconnect:protected] => [queryStr:protected] => SHOW COLUMNS FROM `calendar` [lastInsID:protected] => [numRows:protected] => 8 [numCols:protected] => 0 [transTimes:protected] => 0 [error:protected] => [linkID:protected] => Array ( [0] => Resource id #13 ) [_linkID:protected] => Resource id #13 [queryID:protected] => Resource id #14 [connected:protected] => 1 [comparison:protected] => Array ( [eq] => = [neq] => != [gt] => > [egt] => >= [lt] =>   NOT LIKE [like] => LIKE ) [selectSql:protected] => SELECT%DISTINCT% %FIELDS% FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%%ORDER%%LIMIT% ) [pk:protected] => id [tablePrefix:protected] => [tableSuffix:protected] => [name:protected] => Calendar [dbName:protected] => [tableName:protected] => [trueTableName:protected] => calendar [error:protected] => ????版?瀵硅薄锛? [fields:protected] => Array ( [0] => id [1] => year [2] => month [3] => day [4] => hour [5] => minute [6] => description [7] => status [_autoinc] => 1 [_pk] => id ) [data:protected] => Array ( ) [options:protected] => Array ( ) [_validate:protected] => Array ( ) [_auto:protected] => Array ( ) [_map:protected] => Array ( ) [autoCheckFields:protected] => 1 )

????版?瀵硅薄锛? 
非法数据对象

????版?瀵硅薄锛? 
非法数据对象
能具体说说吗?应该不是代码问题了,把光盘里文件直接放进去也不行。

如果是这样

//$Calendar->Create();        $result=$Calendar->add();
登录后复制


就可以了,不知道为什么。

如果是这样
PHP code?12//$Calendar->Create();        $result=$Calendar->add();

就可以了,不知道为什么。

说错了 应该是这样

//$Calendar->Create();        $result=$Calendar->add($_POST);
登录后复制

可能是表单令牌的问题
你是怎么从网页上提交表单的?
直接从页面上form submit  还是ajax post?
TP在使用 create的时候,有一个表单令牌验证
如果你的提交数据里面没有包含这个表单令牌,就会出错

可能是表单令牌的问题
你是怎么从网页上提交表单的?
直接从页面上form submit  还是ajax post?
TP在使用 create的时候,有一个表单令牌验证
如果你的提交数据里面没有包含这个表单令牌,就会出错 


说的很正确!!

可能是表单令牌的问题
你是怎么从网页上提交表单的?
直接从页面上form submit  还是ajax post?
TP在使用 create的时候,有一个表单令牌验证
如果你的提交数据里面没有包含这个表单令牌,就会出错

是form submit提交的,请问怎么包含这个表单令牌呢?

'TOKEN_ON'=>true,  // 是否开启令牌验证 默认关闭
'TOKEN_NAME'=>'__hash__',    // 令牌验证的表单隐藏字段名称
'TOKEN_TYPE'=>'md5',  //令牌哈希验证规则 默认为MD5
'TOKEN_RESET'=>true,  //令牌验证出错后是否重置令牌 默认为true

配置中加入令牌验证,那么所有的模板中的表单都会有一个hidden的字段提交到后台进行验证,你用了create创建数据对象,但是没开启TOKEN(默认关闭),那就验证失败,当然插入不进去。

建议安全级别不高的就用$DataObj->data($_POST)->add();

echo $Calendar->getLastSql();试试

能否将你数据库表结构贴出来看看,有可能是数据库的字段类型错了,该插入整形数据的时候插入字符串了。

引用 1 楼 sjh717142 的回复:$Calendar->Create();
判断下这句执行结果是否成功,不成功 echo $this->getErrors()看看是什么原因。
还真是这句话有错误,不过请问echo $this->getErrors()这句话加在哪里?我小白。。。系统并没有报错。

public function insert()    {        $Calendar=new Model('Calendar');        if($Calendar->create()){            $result=$Calendar->add();            $this->redirect('index');        } else {            exit($Calendar->getError());        }    }
登录后复制

还是多看看tp的使用手册,这样就避免像这样的错误。有问题请加qq群:7948162

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号