在CakePHP中更新没有表单数据的数据库
对你们中的一些人来说,这可能是一个不需要动脑筋的问题,但我对这一点真的很挠头。我开始使用CakePHP,并迷上了它,但它不同于普通的PHP(他们使用一些速记来编写很多代码)。无论如何,当按下按钮时,我试图更新我的数据库,而不让用户在表单中输入新数据。目前我正在使用AJAX和一个调用JavaScript函数的按钮标记。这就好像您正在注册一个稍后将添加到“我的课程”中的课程(由数据库中的注册[sic]表填充)。这是AJAX代码:在CakePHP中更新没有表单数据的数据库,php,mysql,ajax,cakephp,Php,Mysql,Ajax,Cakephp,对你们中的一些人来说,这可能是一个不需要动脑筋的问题,但我对这一点真的很挠头。我开始使用CakePHP,并迷上了它,但它不同于普通的PHP(他们使用一些速记来编写很多代码)。无论如何,当按下按钮时,我试图更新我的数据库,而不让用户在表单中输入新数据。目前我正在使用AJAX和一个调用JavaScript函数的按钮标记。这就好像您正在注册一个稍后将添加到“我的课程”中的课程(由数据库中的注册[sic]表填充)。这是AJAX代码: <script> function loadXMLDoc(
<script>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("alert").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","/Enrolments/register.php",true);
xmlhttp.send();
}
</script>
函数loadXMLDoc()
{
var-xmlhttp;
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById(“警报”).innerHTML=xmlhttp.responseText;
}
}
open(“POST”,“/Enrolments/register.php”,true);
xmlhttp.send();
}
事后看来,需要检查IE6及以下版本的if语句似乎很愚蠢,但这只是W3的建议。以下是按钮的内容:
<button onclick="loadXMLDoc()">Register</button>
寄存器
当然,页面上还有一些内容(预览课程的视频)。这是register.php的外观:
<?php
$user = $this->Session->read('Auth.User');
$id = $user['user_id'];
$this->Status->read(null, $id);
$this->Status->set('course_id', 1);
$this->Status->save();
echo "You are now registered for this course";
?>
我没有添加要添加的正确课程id的查找。我只是想通过为该字段传递一个“1”(目前注册[sic]表只有两列-user_id和course_id)来测试它,看看它是否真的会更新数据库。目前,情况并非如此。任何建议都很好
编辑:为了清楚起见,我试图在单击“注册”时使用以下信息更新注册表:用户id=当前用户id,课程id=1。来自@Guillermo这似乎不是cakephp的方法,但是在使用post时:
xmlhttp.open("POST","/Enrolments/register.php",true);
您需要:
但是,如果你可以接受一个简单的get
的字符限制,就使用它:
xmlhttp.open("GET","/Enrolments/register.php",true);
这很奇怪,你说你使用CakePHP,但你还说你向“/Enrolments/register.php”发出请求,这是错误的。在CakePHP(以及所有的MVC框架)中,您可以调用控制器/操作Hey Guillemo,如下所述,我已经尝试调用控制器/操作。我把它改为“register.php”,因为我想我可能错过了CakePHP的一些东西(我还是很新的)代码>?你能从
EnrolmentsController::register()
中访问$this->request->data
吗?在CakePHP中,你不能像那样调用php文件,你应该调用一个控制器/action。我试过使用register.ctp(也在enrolments controller中定义)和“GET”,但它仍然不起作用。当然,它也不起作用!无法请求视图,视图由控制器渲染。看一看不,我不是说函数中的代码是“register.ctp”。它只是说“register”,这是在EnrolmentsController中定义的。然而,有一种观点与之相关。我实际上花了大量的时间阅读这本书,尽管我非常感谢你发布一个有用的信息来源!
xmlhttp.open("GET","/Enrolments/register.php",true);