@LibraryMark Look at this.
http://ipxe.org/cmd/login
Also, I have hidden menu turned on, and the iPXE code for the password screen looks like tis:
:menuAccess
login
params
param mac0 ${net0/mac}
param arch ${arch}
param platform ${platform}
param username ${username}
param password ${password}
param menuaccess 1
param debug 1
isset ${net1/mac} && param mac1 ${net1/mac} || goto bootme
isset ${net2/mac} && param mac2 ${net2/mac} || goto bootme
:bootme
chain -ar http://10.2.1.11/fog/service/ipxe/boot.php##params
So if you look at the above, it collects a username and password on the login screen.
Then, it chains to boot.php and passes the parameters. The web server validates the credentials and if they are good, it provides the full menu via the chaining.
On ipxe.org they give a basic example of verifying the parameters using PHP:
http://forum.ipxe.org/showthread.php?tid=5435