【发布时间】:2013-11-29 16:01:27
【问题描述】:
对于你们中的一些人来说,这可能是一件轻而易举的事,但我真的在这个问题上摸不着头脑。我开始使用 CakePHP 并迷上了它,但它与普通的 PHP 不同(他们使用一些速记来进行大量编码)。无论如何,我试图在按下按钮时更新我的数据库,而无需用户在表单中输入新数据。目前我正在使用 AJAX 和一个调用 javacript 函数的按钮标签。就好像您正在注册一个稍后将添加到“我的课程”中的课程(由数据库中的注册 [原文如此] 表填充)。这是 AJAX 代码:
<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>
事后看来,需要检查 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";
?>
我没有为要添加的正确 course_id 添加查找。我只是试图通过为该字段传递一个“1”来测试它(当前注册 [原文如此] 表只有两列 - user_id 和 course_id),以查看它是否会真正更新数据库。目前,它没有。任何建议都会很棒。
编辑:为了清楚起见,我试图在点击“注册”时使用以下信息更新注册表:user_id = 当前 user_id,course_id = 1。
【问题讨论】:
-
这很奇怪,您说您使用的是 CakePHP,但您还说您向“/Enrolments/register.php”发出请求,这是错误的。在 CakePHP(以及所有的 MVC 框架)中,你调用一个控制器/动作
-
嗨 Guillemo,如下所述,我尝试调用控制器/动作。我把它改成了“register.php”,因为我想我可能错过了这个 CakePHP 的东西(我还是很陌生)。
-
那么当你使用
xmlhttp.open("POST","/Enrolments/register",true);时会发生什么?你可以从EnrolmentsController::register()中访问$this->request->data吗?