【问题标题】:Updating database without form data in CakePHP在 CakePHP 中更新没有表单数据的数据库
【发布时间】: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-&gt;request-&gt;data 吗?

标签: php mysql ajax cakephp


【解决方案1】:

来自@Guillermo comment 这似乎不是 cakephp 的做法,但是在使用 post 时:

xmlhttp.open("POST","/Enrolments/register.php",true);

你需要at least set this header also:

http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

但是,如果您可以忍受简单 get 的字符限制,请使用它:

xmlhttp.open("GET","/Enrolments/register.php",true);

【讨论】:

  • 在 CakePHP 中你不会像那样调用 php 文件,你应该调用控制器/动作
  • 我尝试过使用 register.ctp(也在注册控制器中定义)以及“GET”,但它仍然不起作用。
  • 当然不行!您不能请求视图,视图由控制器呈现。看看at the book
  • 嗯,不,我不是说它在函数中被编码为“register.ctp”。它只是说在 EnrolmentsController 中定义的“注册”。然而,有一个与之相关的视图。
  • 我实际上花了很多时间阅读这本书,但我非常感谢您发布有用的资源!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多