while loop in matlab password GUI
13 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
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!