PHP函数从表单返回

时间:2014-04-02 00:22:54

标签: javascript php jquery joomla

我正在使用Joomla网站。从该网站,我可以获得当前用户ID。用户将是团队经理或管理员(或页面将退出)。如果当前用户是团队经理,该功能将返回他们的团队编号。这部分没有问题。

但是,如果用户是管理员,我希望有一个选择列表,以便管理员可以选择要处理的任何团队。一旦选择(从下拉列表中进行),该函数应返回该团队编号。

我创建了一个简短的样本:

test1.php

<?php
include("test2.php");
$var = GetValue();
echo $var;
?>

test2.php

<?php
function GetValue() {
    // Lookup to get user
    if($usertype = "user") {
        // some php code here gets the proper team number
        return $team_num;
    } else {
        ?>
        <select name="potential_user" id="potential_user">
            <option value="0">Select User</option>
            <option value="1">user1</option>
            <option value="2">user2</option>
            <option value="3">user3</option>
        </select>
        <?php
        // Once a user is selected above, I need it to be the return value for the function

    }
}

我理解javascript是用户端而php是服务器端,但必须有一种方法可以通过jQuery,AJAX或其他类似的东西实现这一点。我无法正确理解它。

我也尝试过test2.php:

<script>
    function verify() {
        var teamNum = document.getElementById('team_num').value;
        if(teamNum.length>0) {
            document.test.submit();
        } else {
            alert("You must select a team to continue");
        }
    }
</script>
<?php
function GetTeamNum() {

    if(!isset($_POST['TeamSelect']) ) { $stage=0; }
    if(isset($_POST['TeamSelect'])) { $stage=1; }

    switch ($stage) {
        case 0:
            if(file_exists("GetUser.php")) {
                include("GetUser.php");
            } else {
                exit("Cannot continue.  Unable to get current user.  File missing.");
            }
            $currentUser = getJoomUser();
            if(!$currentUser['username']) { exit("You must be logged in to use this page."); }

            if(!file_exists("OpenDB.php")) { exit("Cannot continue. Unable to connect to league database. Missing file"); }
            include("OpenDB.php");
            $strSQL = "SELECT * FROM chasiv_cbbfl.tbl_defaults;";
            $result = mysql_query($strSQL);
            if(!$result) { exit("Cannot continue.  Unable to connect to get default settings."); }
            $rows = mysql_num_rows($result);
            switch ($rows) {
                case 0:
                    exit("Unable to find default settings.");
                    break;
                case 1: 
                    $data = mysql_fetch_assoc($result);
                    $admin = $data["admin"];
                    break;
                default:
                    exit("Unable to get default settings.  Found multiple results!");
                    break;
            }

            if(!file_exists("OpenDB.php")) { exit("Cannot continue. Unable to connect to league database. Missing file"); }
            include("OpenDB.php");
            if($currentUser['username'] != $admin) {
                // Not the Admin, so check for current user in League Database
                $strSQL = "SELECT * FROM chasiv_cbbfl.tbl_manager_history WHERE jo31_user = " . $currentUser['id'] . " AND dtm_fired IS NULL";
                $result = mysql_query($strSQL);
                if(!$result) { exit("Unable to execute SQL statement (39)."); }
                $rows = mysql_num_rows($result);
                switch ($rows) {
                    case 0:
                        exit("Unable to find current team for your username.");
                        break;
                    case 1: 
                        $data = mysql_fetch_assoc($result);
                        $teamNum = $data["team_num"];
                        return $teamNum;
                        break;
                    default:
                        exit("Unable to find current team for your username.  Found multiple results!");
                        break;
                }
            } else {
                // Administrator is logged in, so get the team he/she wishes to work on
                $strSQL = "SELECT * FROM chasiv_cbbfl.tbl_team_names
                    WHERE dtm_end IS NULL 
                    ORDER BY team_name;";
                $result = mysql_query($strSQL);
                if(!$result) { exit("Unable to execute SQL statement (60)."); }
                $rows = mysql_num_rows($result);
                If ($rows == 0) { exit("No appropriate team names exist.  Page aborted !!"); }
                ?>
                <form name="test" id="test" action="GetTeamNum.php" method="POST">
                <input type="hidden" id="team_num" name="team_num" />
                <SELECT Name='TeamSelect' onchange="document.getElementById('team_num').value=(this.value)">
                <OPTION SELECTED VALUE=''>Pick One</OPTION>
                <?php
                while($data = mysql_fetch_array($result)) {
                   unset($sel);
                   ?>
                   <OPTION VALUE="<?php echo $data['team_num']; ?>"><?php echo $data['team_name']; ?></OPTION>
                   <?php
               }
               ?>
               </SELECT>
               <button type="button" id="Submit" name="Submit" onclick="verify();" />   
               </form>
               <?php
            }

            break;
        case 1:
            return $_POST['team_num'];
            break;
    }
}
?>

我的思考过程是需要发布表单以获取PHP的值。当表单提交时,它将转到案例1,然后具有正确的$ _POST变量并且可以将其传回。但是,在完成时,test1.php没有将值反映到屏幕上。

希望这有助于获得所需的答案。我知道我可以在test1.php中检查admin,但我有大约20个需要此测试的表单,所以我试图将代码保存在一个地方作为函数。

2 个答案:

答案 0 :(得分:1)

除了chitowns回答是正确的(显然来自一个很酷的城市),还有Joomla的具体细节,这将是他们的障碍。

1)加载jQuery库:Joomla提供了一个很好的加载库的方法。使用jQuery代码包含在任何视图php文件的顶部。

JHtml::_('jquery.framework');

2)Mootools和jQuery不能很好地融合在一起:虽然从它转移过来,Joomla仍然大量使用Mootools,所以一定要将所有jQuery代码包装在IIFE中:

(function ($) {

     // place jQuery code here

})(jQuery);

3)通过Joomla的MVC运行服务器端PHP代码?虽然最初只是在外部进行处理要简单得多,但您将失去对内核中内置的大量安全性和实用程序功能的访问权限。表单字段被清理,易于形式的令牌和访问核心数据对象,以轻松提取用户信息和利用内置ACL。如果你愿意,我可以解释这个问题,我可以从你正在处理的扩展和意图中提供更多代码。

答案 1 :(得分:0)

这是一个简单的示例,它采用jQuery和AJAX中<select>更改的值

 $("#potential_user").change(function(){
            $.ajax({
        url: "test1.php",
        data: {value: $(potential_user).val()},
        type: "post",
        success: function(msg){
        alert(msg);
        }
    });
  });

在您的PHP文件test1.php中,变量将以$_POST['value']的形式提供,并且您在test1中回显的任何内容都将收到成功提示