我是
PHP新手,在会话方面更像是初学者.我有我的index.PHP页面,这是用户可以注册和登录的地方.表单分别发布到validate.PHP和loginvalidate.PHP页面,用于注册和登录.
1)注意:未定义的索引:已注册
2)注意:未定义的索引:从未使用过
的index.PHP
<?PHP if ($_SESSION['registered'] != NULL){ echo $_SESSION['registered']; } if ($_SESSION['badlogin'] != NULL){ echo $_SESSION['badlogin']; } if ($_SESSION['neverused'] != NULL) { echo $_SESSION['neverused']; } ?>
if (MysqLi_num_rows($result) > 0) { //IF THERE IS A PASSWORD FOR THAT EMAIL IN DATABASE $_SESSION['registered'] = "Email is already registered."; MysqLi_close($db_handle); header('Location: index.PHP'); exit(); }
if ($numrows!=0) //IF THERE IS A PASSWORD FOR THAT EMAIL IN THE DATABASE { if ($row['password'] == $password) { //IF THE PASSWORD MATCHES USER INPUT header('Location: homepage.PHP'); echo "lol"; exit(); } else{ $_SESSION['badlogin'] = "Email/password combination not valid."; MysqLi_close($db_handle); header('Location: index.PHP'); exit(); } } else { //THERE IS NO PASSWORD FOR THAT EMAIL,SO THAT EMAIL IS NOT REGISTERED $_SESSION['neverused'] = "Email is not registered."; MysqLi_close($db_handle); header('Location: index.PHP'); exit(); }
好的,所以我的脚本完成了它的目的.我唯一无法解决的是这些会话错误.你有没有看到滥用会话?当然,我已经在所有.PHP文件中启动了会话.
另请注意,我知道没有黑客的保护.这仅适用于未包含任何重要数据的未来原型.
解决方法
这些错误的原因是您正在尝试读取不存在的数组键.
isset()功能在那里你可以测试这个.对于每个元素,如下所示的东西将起作用;您不需要空检查,因为您从不为元素指定null:
// check that the 'registered' key exists if (isset($_SESSION['registered'])) { // it does; output the message echo $_SESSION['registered']; // remove the key so we don't keep outputting the message unset($_SESSION['registered']); }
你也可以在循环中使用它:
$keys = array('registered','badlogin','neverused'); //iterate over the keys to test foreach($keys as $key) { // test if $key exists in the $_SESSION global array if (isset($_SESSION[$key])) { // it does; output the value echo $_SESSION[$key]; // remove the key so we don't keep outputting the message unset($_SESSION[$key]); } }