Nom d'utilisateur vérification si il existe déjà dans la base de données à l'aide de PHP, CodeIgniter, JQuery, AJAX

Je suis en train de vérifier le nom d'utilisateur de la validité d'abord avant que l'utilisateur appuie sur le bouton "soumettre" à l'aide de Codeigniter. Le statut du nom d'utilisateur s'il est pris ou pas va apparaître à côté d'elle.

Voici le JS dans la vue:

<script type="text/javascript" src="../assets/js/jquery.min.js"></script>
<script type="text/javascript"><!--
 $(document).ready(function() {
    $("#username").blur(function() {
        //remove all the class add the messagebox classes and start fading
        $("#msgbox").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow");
        //check the username exists or not from ajax


        $.post("addpatient/check_user_availability",{ username:$(this).val() } ,function(data) {
            if(data=='no') {
                $("#msgbox").fadeTo(200,0.1,function() {  //start fading the messagebox

                    //add message and change the class of the box and start fading
                    $(this).html('This User name Already exists').addClass('messageboxerror').fadeTo(900,1);
                });

            }
            else {
                $("#msgbox").fadeTo(200,0.1,function() {  //start fading the messagebox

                    //add message and change the class of the box and start fading
                    $(this).html('Username available to register').addClass('messageboxok').fadeTo(900,1);    
                });
            }
        });

    });

});  
</script>


Voici une partie du formulaire en html:

<form method="post" action="addpatient/insert" name="register">
        <table id='addpatient'>
            <tr>    
                <td width=100> Username:
                <td width=150>  <input type='text' id='username' name='username' value="<?php if(isset($_POST['username'])) echo $_POST['username']; ?>" placeholder="5-15 char" pattern=".{5,15}" required>
                <td> <span id="msgbox" style="display:none"></span>
                <td><div id="msgbox"></div>
            </tr>...


Ici, c'est le contrôleur:

function check_user_availability()
    {
        $username = $this->input->post('username');

        // Developed by Roshan Bhattarai 
        // Visit http://roshanbh.com.np for this script and more.
        // This notice MUST stay intact for legal use


        //this varible contains the array of existing users
        $existing_users=$this->user->get_all_usernames();
        //value got from the get metho
        $user_name= $username;

        //checking weather user exists or not in $existing_users array
        if (in_array($user_name, $existing_users))
        {
            //user name is not availble
            echo "no";
        } 
        else
        {
            //user name is available
            echo "yes";
        }
    }


Et c'est une fonction dans le modèle:

function get_all_usernames() {
    $this->db->select('username');
    $this->db->from('users');
    $query = $this->db->get();
    return $query->result();
 }

Cependant, quand je le lance, , il dit toujours que le nom d'utilisateur est disponible à vous inscrire même si le nom d'utilisateur a déjà été prises.

Un autre problème est que il ne vérifie pas si le nom d'utilisateur de la validité en tant que l'utilisateur saisit son nom d'utilisateur souhaité en "temps réel". Ce que je veux dire c'est, l'utilisateur doit cliquer sur la prochaine textfields d'abord avant de le code vérifie la validité.

Merci de m'aider à résoudre ces problèmes. Merci!!!!

  • êtes-vous sûr que $query->result() est un tableau et non pas un objet? Peut-être vous devriez être de retour un result_array(): ellislab.com/codeigniter/user-guide/database/results.html
  • Merci pour cette! J'ai donc essayé $query->result_array() mais elle dit encore le nom d'utilisateur est valide tout le temps. J'ai essayé de brancher un échantillon de valeurs de la matrice $existing_users=array('john','jack','carol'); et quand j'ai tapé dans la zone de texte, il est dit encore ces noms d'utilisateur sont valides.
  • si vous console.log(data) dans votre réussite vous le devrait chaîne littérale? Vous êtes la seule vérification pour le " non " donc, si quelque chose d'autre est retourné, il va dire qu'il est disponible. Y compris tous les espaces blancs ou d'autres choses qui peuvent être transmis en tant que le script s'exécute
  • Suivant Nil'z's réponse, la console affiche un yes.