Я делаю форму, и я хочу, чтобы форма могла быть отправлена, когда флажок установлен или отмечен. Я не получаю никаких других ошибок, когда я вхожу в систему без проверки поля, кроме этого.
Примечание. Неопределенный индекс: stayLoggedIn в /home/sites/2a/d/dbcf5d6440/public_html/MySQL/Challenges/Secretdiary.php в строке 91
Вот мой код!
<?php session_start(); $error=""; if (array_key_exists("logout", $_GET)) { unset($_SESSION); setcookie("id", "", time() - 60*60); $_COOKIE["id"] = ""; } else if(array_key_exists("id", $_SESSION) OR array_key_exists("id", $_COOKIE)) { header("Location: loggedinpage.php"); } if(array_key_exists("submit", $_POST)) { $link = mysqli_connect("XXX", "XXX", "XXX", "XXX"); if (mysqli_connect_error()) { die("Database Connection Error"); } if(!$_POST['email']) { $error.= "An Email Address is required<br>"; } if(!$_POST['password']) { $error.= "A Password is required<br>"; } if($error != "") { $error = "<p>There were error(s) in your form</p>".$error; } else { if($_POST['signUp'] == '1' ) { $query = "SELECT id FROM `users` WHERE email = '".mysqli_real_escape_string($link, $_POST['email'])."' LIMIT 1"; $result = mysqli_query($link, $query); if (mysqli_num_rows($result) > 0) { $error = "That email address is taken."; } else { $query = "INSERT INTO `users` (`email`, `password`) VALUES('".mysqli_real_escape_string($link, $_POST['email'])."', '".mysqli_real_escape_string($link, $_POST['password'])."')"; if (!mysqli_query($link, $query)) { $error="<p>Could not sign you up, please try again</p>"; } else { $query = "UPDATE `users` SET password = '".md5(md5(mysqli_insert_id($link)).$_POST['password']). "' WHERE id = ".mysqli_insert_id($link)." LIMIT 1"; mysqli_query($link, $query); $_SESSION['id'] = mysqli_insert_id($link); if ($_POST['stayLoggedIn'] == '1') { setcookie("id", mysqli_insert_id($link), time() + 60*60*24*365); } } header("Location: loggedinpage.php"); } } else { $query = "SELECT * FROM `users` WHERE email = '".mysqli_real_escape_string($link, $_POST['email'])."'"; $result = mysqli_query($link, $query); $row = mysqli_fetch_array($result); if (array_key_exists("id", $row)) { $hashedPassword = md5(md5($row['id']).$_POST['password']); if ($hashedPassword == $row['password']) { $_SESSION['id'] = $row['id']; if ($_POST['stayLoggedIn'] == '1') { setcookie("id", $row ($link), time() + 60*60*24*365); } } } } } } ?> <div id="error"><?php echo $error; ?></div> <form method="post"> <input type="email" name="email" placeholder="Your Email Eg. JoBloggs@me.co.uk"> <input type="password" name="password" placeholder="Password"> <input type="checkbox" name="stayLoggedIn" value=1> <input type="hidden" name="signUp" value="1"> <input type="submit" name="submit" value="Sign Up!"> </form> <form method="post"> <input type="email" name="email" placeholder="Your Email Eg. JoBloggs@me.co.uk"> <input type="password" name="password" placeholder="Password"> <input type="checkbox" name="stayLoggedIn" value=1> <input type="hidden" name="signUp" value="0"> <input type="submit" name="submit" value="Log In!"> </form>
Флажки отправляют только значение WHEN CHECKED. Поэтому вам нужно сделать isset($_POST['stayLoggedIn'])
чтобы узнать, было ли выбрано значение, иначе этот индекс не будет существовать в значении POST PHP.
Флажки отображаются только как параметры, когда они checkecd. Поэтому вам необходимо использовать isset()
чтобы проверить, установлен ли флажок, а не проверить значение. Так что измените
if ($_POST['stayLoggedIn'] == '1')
в
if (isset($_POST['stayLoggedIn'])
Если флажок не выбран, значение флажка не отправляется. Вы можете проверить, существует stayLoggedIn
индекс stayLoggedIn
или нет функцией isset
:
if (isset($_POST['stayLoggedIn']) && $_POST['stayLoggedIn'] == '1') {