我正在尝试在用户选择下拉列值时显示数据库中的数据。所有注册会员都有下拉列表。当管理员用户从下拉列表中选择注册的成员名称时,它必须填充该成员的所有详细信息。
我的选择框代码是这样的
if ($_SESSION['admin_privs'] == "yes" || $_SESSION['edit_all_listings'] == "yes") {
$display .= '<tr><td align="right"><strong>' . $lang['listing_editor_listing_agent'] . ':</strong></td>';
$display .= '<td align="left" class="row_main">';
$agent_select = array();
// find the name of the agent listed as ID in $edit_or_owner
$sql = "SELECT userdb_user_first_name, userdb_user_last_name FROM " . $config['table_prefix'] . "userdb WHERE (userdb_id = $_SESSION[userID])";
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$recordSet = $conn->Execute($sql);
if ($recordSet === false) {
$misc->log_error($sql);
}
// strip slashes so input appears correctly
$agent_first_name = $misc->make_db_unsafe($recordSet->fields['userdb_user_first_name']);
$agent_last_name = $misc->make_db_unsafe($recordSet->fields['userdb_user_last_name']);
if ($_SESSION['admin_privs'] != "yes")
{
$agent_select[$_SESSION['userID']] = $agent_last_name.','.$agent_first_name;
}
// fill list with names of all agents
$sql = "SELECT userdb_id, userdb_user_first_name, userdb_user_last_name FROM " . $config['table_prefix'] . "userdb where userdb_is_agent = 'yes' or userdb_is_admin = 'yes' ORDER BY userdb_user_last_name,userdb_user_first_name";
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$recordSet = $conn->Execute($sql);
if ($recordSet === false) {
$misc->log_error($sql);
}
while (!$recordSet->EOF) {
// strip slashes so input appears correctly
$agent_ID = $recordSet->fields['userdb_id'];
$agent_first_name = $misc->make_db_unsafe($recordSet->fields['userdb_user_first_name']);
$agent_last_name = $misc->make_db_unsafe($recordSet->fields['userdb_user_last_name']);
if ($agent_ID == $_SESSION['userID']) {
$agent_select[$agent_ID] = $agent_last_name.','.$agent_first_name;
$selected = $agent_ID;
}else {
$agent_select[$agent_ID] = $agent_last_name.','.$agent_first_name;
}
$recordSet->MoveNext();
}
$display .= $form->selectBox($agent_select, $selected, 'or_owner');
$display .= "</td>";
$display .= '</tr>';
}
我对表单有不同的功能,比如
function selectBox($array, $selected='', $name='', $size=1, $multiple=false, $additional='') {
$res = '';
static $count = 0;
if (is_array($array)) {
if ($name == '') {
$name = 'selectBox' . ++$count;
}
$res .= "<select name=\"$name\" size=\"$size\"" . ($multiple==false ? '' : " multiple=\"multiple\"") . ($additional ? " $additional" : '') . ">\n";
$i = 0;
foreach($array as $key => $value) {
$res .= "<option value=\"$key\"" . ($key == $selected ? " selected=\"selected\"" : '') . ">$value</option>\n";
}
$res .="</select>\n";
}
return $res;
}
function textField($value, $name='', $hidden=false, $size =-1, $length =-1, $additional='') {
$res = '';
static $count = 0;
if ($name == '') {
$name = 'textField' . ++$count;
}
$res .= "<input name=\"$name\" type=\"" . ($hidden ? 'password' : 'text') . "\" value=\"$value\"";
$res .= ($size != -1 ? " size=\"$size\"" : '');
$res .= ($length != -1 ? " maxlength=\"$length\"" : '');
$res .= ($additional ? " $additional" : '') . ">";
return $res;
}
现在我想从数据库中显示所选用户的详细信息,有人可以告诉我如何实现这一点:( 感谢
答案 0 :(得分:0)
我不是来自php但是看了你的代码后看起来像你的会话导致这个问题尝试从会话点调试..
答案 1 :(得分:0)
使用AJAX可以最好地实现这一点。 w3schools.com上有一个教程,解释了ajax的工作原理。您只需修改它们提供的代码即可。
从根本上说,你需要的是:
<SELECT name='name' id='123' onchange='userhint(this.value)'><OPTION value='usercode'...
作为您的选择。关键是将onchange调用放在SELECT中。
你还需要一张表格到这里
JS看起来像:
function userhint(str)
{
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("changingdiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","myphpfile.php?q="+str,true);
xmlhttp.send();
}
这将用myphpfile.php为响应q的get请求而返回的内容替换'changingdiv'的内容。你显然有能力自己写这个文件。
根据您的想法,php可以创建新div的完整HTML或返回一个json字符串,然后您可以使用它来填充原始区域。对于初学者来说,第一个选项绝对是最简单的(并且是上面非常基本的js所期望的)但是json方法将使用相当少的带宽,并且可以更容易地重复使用相同的文件来提供多个页面。