我正在开发一个codeigniter网站,客户已请求数据表中的价格列隐藏在视图中,除非用户输入正确的密码(他们将通过电话向客户提供)。
显而易见的方法是让用户登录,然后显示包含价格的新表/页面。
我可以通过AJAX以某种方式实现这一点吗?,即出现一个对话框,用户输入密码,发送请求并加载新表加价?
我是Codeigniter的新秀,但我每天都在学习,请有人指出我正确的方向吗?
由于 丹
答案 0 :(得分:2)
实际上它并不是真正的代码点火器问题,更多的是javascript。在ci中添加一个控制器函数,你可以通过ajax调用它(强烈推荐像jquery这样的javascript框架)。
为了简单起见,您可以将密码添加到请求中。控制器功能检查密码,如果正确,它会回复价格。
javascript代码可能看起来像这样:
$.ajax({
type: "POST",
url: 'controller/function',
data: {'password': $('#password').attr(value)},
success: function(data){
$('#price').html(data);
},
});
答案 1 :(得分:1)
你可以通过ajax实现它:它可以像这样工作:
1。)用户在框中输入密码并单击按钮
2。)按钮上的Click事件触发以下内容:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'getPrices.php', true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.readState == 200)
putPricesIntable(xmlhttp.responseXML)
}
}
xmlhttp.send('password=' + 'password');
答案 2 :(得分:0)
这个问题与特定的语言或框架关系不大,更多的是如何最好地解决问题。此情况下的问题是仅在正确输入密码时才显示列。首先,您需要有一种方法允许网站用户输入密码。如何做到这一点再次相当无关,它可能是页面上的一个表单,或者它可能是一个单独的页面。
提交密码并发现密码正确后,需要为用户创建会话。此会话基本上将告诉页面是否显示列。
您可能不希望完全依赖ajax方法,就好像用户禁用了JavaScript,然后他们永远无法看到该列,而只是使用JavaScript来增强网站的可用性。
答案 3 :(得分:0)
Ajax只是意味着您的登录控制器将返回机器可读的内容(json / xml)而不是html。
您的控制器实际上只需要设置会话变量。
class Login extends Controller {
function __construct() {
parent::Controller();
$this->load->model('user_m');
}
function json_login() {
$user = $this->user_m->get_user($_POST['username']);
if($user->password == md5($_POST['password'])) {
$this->session->set_userdata('username',$user->username);
print json_encode($this->user);
}
else {
print json_encode(FALSE);
}
return;
}
function logout() {
$this->session->destroy();
redirect('/theloginpage');
}
}
假设您正在使用jquery for javascript,ajax调用可能会像这样:
$('#login_form').submit(function(event) {
event.preventDefault();
$.ajax({
type:"POST",
data:$(this).serialize(),
dataType:"json",
url:"/login/json_login",
success: function(data) {
if(data['username'] != null) {
$(this).append('<p>You are now logged in</p>');
reload_table_data();
}
else if(data == flase){
$(this).append('<p>Fail whale, wrong username or password</p>');
}
}
});
}
现在,在显示数据时,检查会话中是否设置了“用户名”。另外,不要忘记创建一个破坏会话的注销方法。您可以将表数据作为html片段返回,并将其直接插入到DOM或json / xml循环中。
登录表单可以显示在页面的任何位置,并且有大量用于jquery,dojo,prototype等的库,它们将提供一个对话框。