PHP - $ .POST两个文件两次

时间:2011-11-23 01:29:03

标签: php jquery syntax-error

缩短目标:通过$ .POST将变量传递给PHP文件(get.php),将get.php传递给$ .POST,将变量再次传递给db.php。

我的问题

我正在尝试在PHP代码中遵循模型 - 视图 - 控制器设计模式。

我将有三页:

  1. index.php - GUI(基本上是HTML和DIV标签)
  2. get.php - 通过AJAX + POST向index.php中的div提供代码的隐藏php
  3. db.php - 数据库连接部分
  4. explanation image http://oi44.tinypic.com/339sz6f.jpg 基本上,我希望通过两个POST请求

    收到回复

    到目前为止,我将index.php POSTING到get.php并请求某些数据,这些数据通过AJAX和jQuery更新并通过动画更新。

    以下是代码段:

    function get(div,id,opt_username) { 
    $.post('get.php', { request: id },
    function(response) {
        // In this order, first fadeout div
        $(div).fadeOut(600, function() {
    
            // If we pass a username as optional parameter...
            if (opt_username) { 
                //Prepend username onto response
                response = "     Welcome " + username + response;   
            }
    
            // Then get the response back HIDDEN
            $(div).html(response).hide(function() {
                    // Once completed, parse with XFBML so everything renders
                    FB.XFBML.parse(document.getElementById(div));
                    // Only after everything's parsed do we fade back in
                    $(div).fadeIn(1100, function() {}); 
    
            });
        });
    });
    };  
    

    现在我可以对get.php执行POST请求,但如果我尝试在get.php中执行相同的操作以发布到db.php(以执行数据库操作),这似乎不起作用。

    我的目标

    index.php - > 请求数据 - > get.php - > 请求数据库连接 - > db.php - > 返回数据 - > get.php - > 返回数据 - > index.php

    这将允许我用另一个切换数据库层。例如,我目前正在使用RDBMS,但我希望将来切换到XML / RDFXML,这意味着我所要做的就是将db.php转换为另一个,所有内容仍然有效,并保持与MVC。

    我的问题

    1. 首先,我是否可以实际对页面进行POST以进行另一次 POST,如果是,为什么我会收到以下错误?
    2. 我是否正确使用模型视图控制器方法
    3. 进一步说明

      以下是get.php(第二页)中的代码片段,它会抛出错误:

      $.post('db.php', { test: 2 },
          function(response) {} );
      

      抛出错误:

      Parse error: syntax error, unexpected '.', expecting T_VARIABLE or '$' 
      

      结论

      我根本无法将index.php发布到get.php,然后发布到db.php。

2 个答案:

答案 0 :(得分:2)

做两个post吗?

我不知道你的文件是什么样的,但是现在我猜它们都是常规的php文件,当你需要实现该页面的功能时,你正在复制每个页面,所以我的回答将是尝试适应,但正如我所说,我不知道你的文件实际上是什么样的,所以这可能不适合你的工作方式。

那就是说,根据我认为的方式,你正在使用你的文件,这就是我的建议。

为什么不将$ _POST数组传递给类中的方法,而不是尝试在页面之间发布两个帖子?

例如(伪代码):

您的index.php(通过AJAX发布到get.php):

<form action="/uses/ajax/to/post/to/get.php" method="post" name="data_form" id="data_form">
    <input type="text" name="data" id="data" />
    <input type="text" name="more_data" id="more_data" />
    <input type="submit" value="Post this data" />
</form>

<script>
    // Your ajax post code here
</script>

你的get.php:

<?php
$post_data = isset($_POST) ? $_POST : die('No post data was sent');

include($_SERVER['DOCUMENT_ROOT'] . '/Model_Object.php');

$Model_Object = new Model_Object();

// This would echo your response for the ajax
echo $Model_Object->create_something($post_data);

然后你可以创建一个Model类(它包含在你的get.php中)而不是只有db.php:

<强> Model_Object.php:

<?php
class Model_Object {
    public function create_something($post_data) {
        $data = isset($post_data['data']) ? $post_data['data'] : '';
        $more_data = isset($post_data['more_data']) ? $post_data['more_data'] : '';

        // MySQL query here
        $success = true;

        if($success) {
            return 'Completed';
        }

        return 'Failed';
    }

    public function create_something_else($post_data) {
        return 'This can do a different MySQL query';
    }
}

这不是最好的方法,但鉴于您对自己的代码的解释以及我认为您的代码正在运行的方式,这可能是您的解决方案。

至于以正确的方式进行MVC方法,我不知道这是否是最好的方式,但是,当我从头开始编写MVC应用程序时,我设置了一个.htaccess文件来路由所有请求到根index.php,它将从URI决定要创建哪个Controller对象以及该Controller中要执行的方法。

该方法可能包含一些代码来显示视图,或者创建一个Model对象来与数据库进行交互。

如果要创建Model,那么它会将任何相关信息传回Controller,而Controller会从那里完成所需的操作。

例如,如果我转到/my_controller/my_action,则index.php文件将创建My_Controller对象(如果存在),如果存在,则尝试在该对象中执行名为{{1}的方法}。

我希望这对你有所帮助,如果我误解了,我很抱歉。

答案 1 :(得分:1)

实现模型 - 视图 - 控制器并不意味着您必须创建HTTP请求以在这些层之间进行通信。只需使用includerequire包含该文件即可。通过使用不同的文件已经存在分离。