PHP-$。通过两个文件发布两次

PHP-$。通过两个文件发布两次,php,jquery,syntax-error,Php,Jquery,Syntax Error,缩短目标:通过$.POST将变量传递到PHP文件(get.PHP),并将get.PHP传递到$.POST,再次将变量传递到db.PHP 我的问题 我试图在PHP代码中遵循模型-视图-控制器设计模式 我有三页: index.php-GUI(基本上是HTML和DIV标记) get.php-隐藏的php,通过AJAX+POST-to-divs在index.php中提供代码 db.php-数据库连接部分 基本上,我希望通过两个POST请求接收响应 到目前为止,我已经将index.php发布到get.p

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

我的问题

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

我有三页:

  • index.php-GUI(基本上是HTML和DIV标记)
  • get.php-隐藏的php,通过AJAX+POST-to-divs在index.php中提供代码
  • db.php-数据库连接部分
  • 基本上,我希望通过两个POST请求接收响应

    到目前为止,我已经将index.php发布到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进行POST(执行数据库操作),这似乎不起作用

    我的目标

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

    这将允许我用另一个数据库层切换数据库层。例如,我目前正在使用RDBMS,但我希望在将来切换到XML/RDFXML,这意味着我所要做的就是将db.php切换到另一个数据库,一切都将继续工作,与MVC保持一致

    我的问题

  • 首先也是最重要的一点,我真的可以在一个页面上发表一篇文章,以发表另一篇文章吗?如果是,为什么我会在下面出现错误
  • 我是否以正确的方式处理模型视图控制器
  • 进一步解释

    下面是get.php(第二页)中的一个代码片段,它抛出了一个错误:

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

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

    我就是不能让index.php发布到get.php,反过来又发布到db.php。

    你需要做两次
    发布吗

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

    也就是说,基于我认为您使用文件的方式,这是我的建议

    与其尝试在页面之间创建两个POST,为什么不将$\u POST数组传递给类中的一个方法呢

    例如(在伪代码中):

    Your 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>
    
    <?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);
    
    <?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';
        }
    }
    
    
    //这里是您的ajax post代码
    
    你的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>
    
    <?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);
    
    <?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';
        }
    }
    

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

    我感谢您花了这么长的时间和精力发布这篇文章,谢谢。然而,我真正想要的是能够发布到一个页面,发布到另一个页面,返回到一开始。使用类与我所追求的不同,但我会将你的答案标记为有用的答案。你可以将你的答案作为实际答案发布并接受。如果我使用数据库连接为我的db.php添加了一个include,那么我前面的UI将显示我调用以获取数据库信息的函数和代码,不是吗?因此,将UI放在前面,在另一个PHP中使用逻辑,在最终的PHP中使用db连接是很好的,因为在原始index.PHP中有一些这样的代码意味着每个人都可以很容易地看到调用的函数和方法?@Jimbo:“显示”函数是什么意思?web客户端永远看不到这些函数。程序员可以通过您包含它的事实看到它们。但这就是为什么人们使用面向对象编程,现在却弄乱了全局范围。好吧,如果我包括db.php,并且在这个php中有连接到db的代码,那么有人可以直接访问db.php并查看我的源代码(db位置、用户名、发送的内容等)。如果我是通过邮寄的方式做事,那么一切都是隐藏的。。对吧?:)忘了补充:如果我按照你的方式来做,那么当我将数据库“层”技术从RDBMS改为XML/RDFXML时,我将不得不打开我的index.php并处理所有的事情,就像我在它自己的DB.php中一样,然后我可以切换到DB.php,而不必触摸我的视图(index.php)或逻辑(get.php)。不,对不起。PHP文件由服务器处理,因为它们包含一组PHP指令。除非您的服务器配置严重错误,否则不会以纯文本形式发送到客户端。BTW:永远不要考虑一个文件是无法访问的事实,它是不知道的用户。我想我会回来,一年后,解释说,你绝对正确的这个简单的答案-现在了解MVC好多了。请投票删除我的答案,这完全是胡说八道。真不敢相信我建议卷发。谢谢