Php Jquery导致在cake中意外创建数据库行
我在视图中有这个jquery代码,与我的uploads controller相关:Php Jquery导致在cake中意外创建数据库行,php,jquery,mysql,cakephp,Php,Jquery,Mysql,Cakephp,我在视图中有这个jquery代码,与我的uploads controller相关: function screenshot(){ var dataUrl = renderer.domElement.toDataURL("image/png"); $.post("picturepicker", {dataUrl: dataUrl, uploadnumber: 2 } } 它成功地将数据发送到此函数: public function picturepicker(){ ..
function screenshot(){
var dataUrl = renderer.domElement.toDataURL("image/png");
$.post("picturepicker", {dataUrl: dataUrl, uploadnumber: 2
}
}
它成功地将数据发送到此函数:
public function picturepicker(){
...
if($this->request->is('post')){
define('UPLOAD_DIR', WWW_ROOT . 'img/'); // increase validation
$img = $_POST['dataUrl']; // Tried $this->request['dataURL'], retrieved 'dataURL' just fine
$upload = $_POST['uploadnumber']; // tried $this->request['uploadnumber'], did not retrieve 'uploadnumber'
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . $upload . '.png'; // UPLOAD_DIR . uniqid() . '.png';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';
这很好,只是每次运行javascript时,都会创建一个新的数据库行。由于我没有create函数,我认为jquery无意中调用了这个函数:
public function upload(){
if ($this->request->is('post')) {
//var_dump($this->request->data);
$this->Upload->create();
....
但是,我怀疑这一点,因为即使删除了对create函数的所有引用,行仍然会被添加
那么为什么会发生这种情况,我应该如何解决?我怀疑jquery代码不知何故调用了我的所有函数,我需要在获取post数据的任何其他函数周围放置一个if块。有人告诉我,情况不应该如此,也许蛋糕的路线是罪魁祸首。或者,我可能遗漏了cake文档中的某些内容—可能cake是为了为每个post请求创建一个新的DB行而设置的,我需要告诉它不要这样做 您应该注意,
$this->Upload->create()
不会创建DB行,它只是一个准备干净数据以保存到DB的函数。像保存
、设置
、更新
等功能都是为了向数据库中添加行,但是创建
在任何情况下都不会这样做,因此您需要重新检查可能向数据库中插入数据的操作,因为您在此处共享的代码没有任何保存数据的参考。啊,没错。无论如何,我是在删除整个攻击性函数——在本例中是我的全部编辑和上载函数。共享PicturePickEpicker
的所有代码,如果您对routes.php
进行了修改,那么在此处添加它可能也很有用。Cake不会调用所有函数,因此这不是错误。在任何情况下,也不设置新的DB行,除非你专门保存新的数据,所以它不是一个Out-Outlook特性,你不应该把它看作是错误的可能原因。我发现错误:它是一个错误的保存,这是我jQuery调用的两次。很高兴你发现它:)你能回答这个问题并接受它吗?还是完全删除?让别人知道你已经找到了解决办法