我正在使用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个需要此测试的表单,所以我试图将代码保存在一个地方作为函数。
答案 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中回显的任何内容都将收到成功提示