Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

while loop in matlab password GUI

Asked by Pat on 7 May 2013

Hi, i want to create a matlab program that will require the user to enter the username and password before they can gain access to the program. so far i have able to do it if the correct password is enter but i cannot get the program to loop corretly. i want if the user enter the wrong combination of password/username lets say maximum 3 times, the system will terminated. plz help me guys...waste a lot of time on doing this.

username1=*****;
password1=****;
username = upper(get(handles.edit1,'string'));
password = upper(get(handles.edit6,'string'));
if(strcmpi(username,username1))
      if (strcmpi(password,password1))
          disp('successfully log into the system');
     else
         close all
      end
else
       close all
end

0 Comments

Pat

Products

No products are associated with this question.

6 Answers

Answer by David Sanchez on 8 May 2013
Accepted answer

Two things: first, you should create a variable (global) called attempts, this variable is initialize at the beginning, right after the GUI is opened. The rest of the code:

% this goes in your login pushbutton callback function
username = get(handles.usrbox,'string');
password = get(handles.psswrdbox, 'string');
attempts = attempts + 1;
if strcmpi(username, username1)&&strcmpi(password,password1)
   disp('b')
elseif attempts == 3
   disp('a');
end

has to be placed on the callback function. Do you insert a login pushbutton? ( A button that has to be pushed in order to login ) If not, the code should be pasted on the edit box callback function (watch out! I guess you have two edit boxes, one for username and another for password, paste it on the password edit box callback ). I would advice to insert a login pushbutton, but that's up to you.

1 Comment

Pat on 8 May 2013

hi this code works..thank you so much for helping me:-)

David Sanchez
Answer by David Sanchez on 7 May 2013

I hope following code is of help

username1 = 'xxx';
password1 = 'yyy';
attemps = 0;
while attemps < 4
    username = input('intoduce user name: ');
    password = input('intoduce password: ');
    if(strcmpi(username,username1))&&(strcmpi(password,password1))
        disp('successfully log into the system');
        return
    else
        attemps = attemps + 1;
    end
end

1 Comment

Pat on 7 May 2013

thank for your reply, i modified the code a bit to suit my gui. below shown the code that i made but when i try to enter false username and password, the count just go to 3 thus the a value is shown in command window. i just enter the username and password 1 time only. what is wrong with my code

username1= 'xxx';
password1= 'yyy';
attempt= 0;
while attempt < 3
      username = upper(get(handles.edit1,'string'));
      password = upper(get(handles.edit6,'string'));
      if(strcmpi(username,username1))&&(strcmpi(password,password1))
          disp('b');
          return
      else
          attempt = attempt + 1;
      end
  end
disp('a');
David Sanchez
Answer by David Sanchez on 8 May 2013

Hi, since disp('a'); is outside the while loop, it will always be displayed. You can set a condition if to display 'a' only if 3 attempts were made

username1= 'xxx';
password1= 'yyy';
attempt= 0;
while attempt < 3
  username = upper(get(handles.edit1,'string'));
  password = upper(get(handles.edit6,'string'));
  if(strcmpi(username,username1))&&(strcmpi(password,password1))
     disp('b');
     return
  else
     attempt = attempt + 1;
  end
end
if attempt == 3
  disp('a');
end

I hope it helped you, do not forget to vote if so.

1 Comment

Pat on 8 May 2013

sir i have try the code that you suggested but unfortunately the problem still are there as matlab display the character 'a' although i had only test one fail attempt. i think there are problem in the loop itself as it seem does not wait for user to key in second and third fail attempt before exiting the loop.

David Sanchez
Answer by David Sanchez on 8 May 2013

Hi, that's a bit awkward, with the code above, disp('a') only comes to work when attempt equals 3 ( if attempt == 3 ). I tested it myself and 'a' is only displayed after three unsuccessful attempts were made. You can try the following version too: ( adapt it for you GUI later, it is easier to debug code outside the GUI, once it works as you want, insert it in the GUI )

username1= 'xxx';
password1= 'yyy';
attempt= 0;
while attempt < 3
    username = input('intoduce user name: ');
    password = input('intoduce password: ');
  if(strcmpi(username,username1))&&(strcmpi(password,password1))
     disp('b');
     return
  else
     attempt = attempt + 1;
     if attempt == 3
          disp('a');
     end
  end
end

3 Comments

Pat on 8 May 2013

sir when i try to use your code it works as expected but as i use the code to my gui it produce same problem as 'a' is displayed although attemp ~= 3. does this mean i need to adjust a bit on my gui?

Teja Muppirala on 8 May 2013

But first change this:

    username = input('intoduce user name: ');
    password = input('intoduce password: ');

To this:

    username = input('intoduce user name: ','s');
    password = input('intoduce password: ','s');

to indicate the input is a string, otherwise you'll have to put quotes in your input to distinguish it from a variable.

Pat on 8 May 2013

mind to share anything that i need to do to adjust my gui to suit this code. i use two edit box, 1 for username input and the other one for the password input. i use this code for username/password input

    username = upper(get(handles.edit1,'string'));
    password = upper(get(handles.edit6,'string'));
David Sanchez
Answer by Teja Muppirala on 8 May 2013

In your GUI case, the reason it displays 'a' after just one failed attempt is, this loop:

username1= 'xxx';
password1= 'yyy';
attempt= 0;
while attempt < 3
  username = upper(get(handles.edit1,'string'));
  password = upper(get(handles.edit6,'string'));
  if(strcmpi(username,username1))&&(strcmpi(password,password1))
     disp('b');
     return
  else
     attempt = attempt + 1;
  end
end
if attempt == 3
  disp('a');
end

runs 3 times instantly before you can even change the values in the edit boxes. I'm assuming this code is in some callback, like a pushbutton or something. You're going to need to check the password only once every time the user runs this callback function, and keep track of how many times they tried/failed. For example, you might store the variable attempt as 'Userdata' or use SETAPPDATA or something. Then increment it once everytime the user submits the password.

0 Comments

Teja Muppirala
Answer by David Sanchez on 8 May 2013

Teja got it right, I think next code would be helpful ( it needs to be adapted to your GUI )

attempts = 0; % do not initialize this variable in pushbutton callback function
% this goes in your login pushbutton callback function
username = get(handles.usrbox,'string');
password = get(handles.psswrdbox, 'string');
attempts = attempts + 1;
if strcmpi(username, username1)&&strcmpi(password,password1)
   disp('b')
elseif attempts == 3
   disp('a');
end

1 Comment

Pat on 8 May 2013

sir where should i paste this code to? it is in the openingFcn or the edit box callback

David Sanchez

Contact us