ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP で行った実験では、データ テーブルにレコードを挿入できませんでした。

ThinkPHP で行った実験では、データ テーブルにレコードを挿入できませんでした。

WBOY
WBOYオリジナル
2016-06-23 14:02:14956ブラウズ

レコードを挿入できないだけですが、クエリ、更新、削除はすべて正常です。

テンプレート:

<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');		}	}}?>


解決にご協力いただければ幸いです、ありがとうございます。


ディスカッションに返信 (解決策)

$Calendar->Create();

この文の実行結果が成功したかどうかを判定し、成功しなかった場合は $this->getErrors() を返します。理由が何であるかを確認します。

$Calendar->Create();

この文の実行結果が成功したかどうかを判断し、失敗した場合は $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] => ] => DbMysql オブジェクト ( [dbType:protected] => MYSQL [autoFree:protected] => [debug] => 1 [pconnect:protected] => [queryStr:protected] => SHOW COLUMNS FROM `calendar` [lastInsID:protected] => 8 [numCols:protected] => 0 [error:protected] => ] => 配列 ( [0] => リソース ID #13 ) [_linkID:protected] => リソース ID #14 [connected:protected] => 1 [比較:保護されている ] => 配列 ( [eq] => = [neq] => != [gt] => > > [egt] => > = [lt] => e5fe353352eeb6c9f75bb5360ac29ed6 cac7d8f998c942dc797253d4e63f800a 好き) [selectSql:protected] => %TABLE%%JOIN%%WHERE% %GROUP%% HAVING%%ORDER%%LIMIT% ) [pk:protected] => id [tableSuffix:protected] => [name:protected] =>保護されている] => [テーブル名:保護されている] => カレンダー [エラー:保護されている] => => 年 [2] => 月 [3] => ; 日 [4] => 時間 [5] => 説明 [_autoinc] => id ) => 配列 ( ) [オプション:保護] => 配列 ( ) [_自動:保護] => 配列 ( ) [_map:保護] =>

??? ?バージョン?瀵 Silicon Thin Adze?

違法なデータ オブジェクト
具体的に教えていただけますか?これはコードの問題ではないはずです。ファイルを CD に直接入れても機能しません。

もしそうなら
うわー

それは大丈夫でしょう、理由はわかりません。


この場合、
PHP code?12//$Calendar->Create(); $result=$Calendar->add(); で問題ありませんが、理由はわかりません。

間違っています。こうあるべきです

//$Calendar->Create();        $result=$Calendar->add();


フォーム トークンに問題がある可能性があります
Web ページからフォームをどのように送信しましたか?
フォームはページから直接送信しますか、それとも Ajax ポストから送信しますか?
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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。