while loop in matlab password GUI
    4 views (last 30 days)
  
       Show older comments
    
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
Accepted Answer
  David Sanchez
      
 on 8 May 2013
        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.
More Answers (5)
  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
  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.
  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
  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.
  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
  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
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

