Intereting Posts

Неопределенный индекс с сеансами PHP

Я новичок в PHP и еще более новичок, когда речь заходит о сеансах. У меня есть страница index.php, где пользователи могут зарегистрироваться и войти в систему. Формы отправляются на страницы validate.php и loginvalidate.php, соответственно, для регистрации и входа в систему.

У меня эти ошибки на index.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']; } ?> 

Validate.php (после отправки регистрационной формы)

  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(); } 

Loginvalidate.php (после отправки формы входа)

 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-файлах.

Кроме того, обратите внимание, что я знаю, что защита от хакеров отсутствует. Это только для будущего прототипа, который не будет содержать каких-либо важных данных.

Related of "Неопределенный индекс с сеансами 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']); } с // 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]); } } с $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]); } } 

Если вы получаете неопределенные индексные ошибки, вы можете попробовать убедиться, что ваши индексы установлены до того, как вы попытаетесь сравнить значения. См. Документацию для функции isset здесь: http://php.net/manual/en/function.isset.php

 if (isset($_SESSION['registered'])) if ($_SESSION['registered'] != NULL){ echo $_SESSION['registered']; } } if (isset($_SESSION['badlogin'])) if ($_SESSION['badlogin'] != NULL){ echo $_SESSION['badlogin']; } } if (isset($_SESSION['neverused'])) if ($_SESSION['neverused'] != NULL) { echo $_SESSION['neverused']; } }