2010-06-24 2 views
0

Je travaille sur un site codeigniter, le client a demandé que les colonnes de prix dans un datatable sont cachés à vue sauf si un utilisateur entre un mot de passe correct (qu'ils donneront aux clients par téléphone).Codeigniter - Comment révéler des informations après est entré le mot de passe par ajax

La manière évidente est de faire le login de l'utilisateur qui révèle alors une nouvelle table/page avec les prix inclus.

Est-ce que je peux réaliser ceci par l'intermédiaire d'AJAX?, Une boîte de dialogue apparaît, l'utilisateur entre un mot de passe, une demande est envoyée et une nouvelle table charge avec des prix inclus?

Je suis une recrue totale à Codeigniter, mais j'apprends tous les jours, s'il vous plaît quelqu'un pourrait me diriger dans la bonne direction?

Merci Dan

Répondre

2

effectivement ce n'est pas vraiment un problème d'allumeur de code, plus javascript. ajoutez une fonction de contrôleur dans ci que vous appelez via ajax (un framework javascript comme jquery est fortement recommandé). Pour simplifier, vous pouvez ajouter le mot de passe à la demande. la fonction du contrôleur vérifie le mot de passe et si elle est correcte, elle fait l'écho du prix.

le code javascript pourrait ressembler à quelque chose comme ça:

$.ajax({ 
type: "POST", 
url: 'controller/function', 
data: {'password': $('#password').attr(value)}, 
success: function(data){ 
    $('#price').html(data); 
}, 
}); 
1

Vous pouvez y parvenir via ajax: il travaillerait quelque chose comme ceci:

1.) L'utilisateur saisit le mot de passe dans la boîte et clique sur le bouton

2.) Cliquez sur l'événement bouton déclenche ce qui suit:

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'); 
0

Cette question a vraiment très peu à faire avec un langage ou un cadre spécifique, mais plus une question de comment aborder au mieux un problème. Le problème dans ce cas est d'afficher une colonne uniquement si un mot de passe est entré correctement. Donc, vous devez d'abord avoir un moyen de permettre à l'utilisateur du site Web d'entrer le mot de passe. Comment cela est fait est encore une fois pas pertinent, il pourrait s'agir d'un formulaire sur la page, ou il pourrait s'agir d'une page distincte.

Une fois le mot de passe soumis et jugé correct, une session devra être créée pour l'utilisateur. Cette session est essentiellement ce qui indiquera à la page si elle doit ou non afficher la colonne. Vous ne voudrez probablement pas vous fier uniquement à une méthode ajax comme si l'utilisateur avait JavaScript désactivé, alors ils ne pourraient jamais voir la colonne, mais seulement utiliser JavaScript pour améliorer la convivialité du site.

0

Ajax signifie que votre contrôleur de connexion retournera machine quelque chose lisible (JSON/XML) plutôt que html.

Votre contrôleur a vraiment besoin de définir une variable de session.

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'); 
    } 
} 

En supposant que vous utilisez jquery pour le javascript l'appel ajax pourrait en tirer quelque chose comme ceci:

$('#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>'); 
      } 

     } 
    }); 

} 

maintenant lors de l'affichage de la vérification des données si le « nom d'utilisateur » a été mis à la session.N'oubliez pas non plus de créer une méthode de déconnexion qui détruit la session. Vous pouvez renvoyer les données de la table sous la forme d'un extrait html et l'insérer directement dans la boucle DOM ou json/xml. Le formulaire de connexion peut être affiché n'importe où sur la page et il y a beaucoup de bibliothèques pour jquery, dojo, prototype, etc. qui fourniront une boîte de dialogue.

Questions connexes