Search code examples
javascriptphphtmlkendo-uikendo-mobile

Kendo UI login functionality


I am currently making a iPhone application using Kendo UI which i am running through phone gap to test on my iPhone.

The design is all mapped out nicely and I am getting to grips with the Kendo framework. I am trying to make some functionality whereby they log into an account.

My external PHP file which runs the query and returns JSON:

<?php

   $arr = array();

//Takes the username and password from the login form and queries the database to find out if they have access to the site.


        //Cleanse inputs
        $username = $_GET['username'];
        $password = md5_base64($_GET['password']);

        $stmt = $memberMysqli->prepare("SELECT id, firstname, dob, sex, recordingWeight, blocked, enabled FROM member WHERE email = ? AND password = ?");
        $stmt->bind_param('ss', $username, $password);
        $stmt->execute();
        $stmt->bind_result($memberid, $firstname, $dob, $sex, $recordingWeight, $blocked, $enabled);
        $stmt->store_result();  

        session_start();

        while ($stmt->fetch())
        {
            $userIsBlocked = $blocked;
            $enabled = $enabled;
        }   

        if(($numRows = $stmt->num_rows) > 0)  //If num rows is  1 the combination exists therefore it is a succesful login
        {   
            if($userIsBlocked)
            {
                $arr['status'] = "error";
                $arr['message'] = "Sorry, your account isnt active. Please contact us to re-activate it.";
            }
            else if(!$enabled)
            {
                $arr['status'] = "error";
                $arr['message'] = "Sorry, your account isn't enabled. Please contact us.";
            }

            else
            {
                    $_SESSION['memberid'] = $memberid;
                    $_SESSION['memberFirstname'] = $firstname;
                    $_SESSION['dob'] = $dob;
                    $_SESSION['sex'] = $sex;
                    $_SESSION['recordingWeight'] = $recordingWeight;

                    $arr['status'] = "success";
                    $arr['message'] = "Logged in";
            }
        }
        else
        {
            $arr['status'] = "error";
            $arr['message'] = "Sorry, Wrong Username/Password Combination";                 
        }
header("Content-type: application/json");   
echo json_encode($arr);
/* close connection */
function md5_base64 ( $data ) 
{ 
    return preg_replace('/=+$/','',base64_encode(md5($data,true))); 
} 


?>

So this returns success, logged in or sorry wrong username/password combination..

Here is my form code:

<form>

            <fieldset>

                <p><label style="color:white;" for="email">E-mail address</label></p>
                <p><input type="email" id="email" value=""></p> 

                <p><label style="color:white; font" for="password">Password</label></p>
                <p><input type="password" id="password" value=""></p> 

                <p><input type="submit" value="Sign In"></p>

            </fieldset>

and the JS:

<script>

        $("form").on("submit", function() {

        var username = document.getElementById('email').value;
        var password = document.getElementById('password').value;

        var dataSource = new kendo.data.DataSource({
          transport: {
            read:  {
             url: 'http://myurl.co.uk/appqueries/login.php?username='+username+'&password='+password,
             dataType: "json" 
          }
          }
        });

        //alert("Your username is "+username+" and your password is: "+password);

        });
    </script>

Can anybody help me getting what the JSON that the PHP file returns and then letting the user into the app if login is successful, or displaying a message if they were not.


Solution

  • I don't think you want a DataSource for this (it could be done, but the DataSource expects an array of objects from the read operation), unless there are additional requirements.

    If this is your HTML:

    <input id='username' type='text' value='user'></input>
    <input id='password' type='text' value='password'></input>
    <button id='loginbutton'>Login</button>
    <div id='loginresult'></div>
    

    Then you can use jQuery (which I assume you're using since it's a requirement for Kendo UI):

    function loginClick() {
        var username = $("#username").val();
        var password = $("#password").val();
        var loginUrl = 'http://myurl.co.uk/appqueries/login.php?username='+username+'&password='+password;
    
        $.ajax({
            url: loginUrl,
            type: 'GET',
            dataType: 'json',
            success: function (data) {
                handleLoginResult(data);
            }
        });
    }
    
    $(document).on("click", "#loginbutton", loginClick);
    
    function handleLoginResult(data) {
        var status = data.status;
        var message = data.message;
    
        if (status === "success") {
            // do whatever needs to be done after successful login
            $("#loginresult").html(message);
        }
    }
    

    See a working example here (there are a few differences because this is using jsfiddle's echo api): http://jsfiddle.net/lhoeppner/9TGJd/

    This works almost the same for Kendo Mobile, except you'd use the mobile button and the data-click binding:

      <a id="loginbutton" data-role="button" data-click="loginClick">Login!</a>