#php #html
#php #HTML
Вопрос:
Я создаю веб-сайт для живого чата под названием meekochat. Пользователь вводит свое имя в page1.php и затем отправляется в page2.php чтобы начать общаться с другими людьми. Я хочу сделать так, чтобы, если переменная username пуста, пользователь не попадал в page2.php .
<!DOCTYPE html>
<?php
session_start();
?>
<html lang="en-US">
<head>
<title>meekochat</title>
<link rel="icon" href="icon.png">
<link rel="stylesheet" type="text/css" href="style.css">
<?php
?>
</head>
<body id="body">
<form action="page2.php" method="post">
<input type="username" id="username" name="username" placeholder="Username">
<input type="submit" id="submit" name="submit" value="Submit">
</form>
</body>
</html>
Это мой код для page2.php
<!DOCTYPE html>
<?php
session_start();
?>
<html lang="en-US">
<head>
<title>meekochat</title>
<link rel="icon" href="icon.png">
<link rel="stylesheet" type="text/css" href="style.css">
<?php
if(isset($_POST["submit"])) {
$_SESSION["username"] = $_POST["username"];
}
?>
</head>
<body id="body">
Your username is <?php echo $_SESSION["username"]; ?>
</body>
</html>
Комментарии:
1. Одним из нескольких решений является проверка значений с помощью Javascript перед отправкой вашего запроса.
2. Как я могу это сделать?
3. И в чем ваш фактический вопрос ? (Просто сказать нам, что вы хотите, не является правильным вопросом.) Кроме того, решите, хотите ли вы, чтобы пользователь не мог отправить эту форму в первую очередь, если он не заполнил поле, или вы хотите проверить это на принимающей стороне, а затем перенаправить обратно на первую страницу — это тоже две совершенно разные вещи.
4. проверьте как на стороне клиента, так и на стороне сервера. Даже в этом случае есть способы обойти это, но выполнение всех возможных действий с обеих сторон сильно снижает шансы
5. Почему бы не создать другой php-файл для проверки имени? итак, действие формы в page1.php переходит к auth.php , который затем решает, существует ли имя или нет, а затем перенаправляет на соответствующую страницу.
Ответ №1:
я бы посоветовал сохранить «auth» в page1.php . Я добавил некоторую проверку и обязательный атрибут для ввода имени пользователя.
<!DOCTYPE html>
<?php
session_start();
if(isset($_POST["submit"]) amp;amp; isset($_POST["username"]) amp;amp; $_POST["username"] != '') {
$_SESSION["username"] = $_POST["username"];
header('location: page2.php');
}
?>
<html lang="en-US">
<head>
<title>meekochat</title>
<link rel="icon" href="icon.png">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body id="body">
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="username" id="username" name="username" placeholder="Username" required>
<input type="submit" id="submit" name="submit" value="Submit">
</form>
</body>
</html>
и в page2.php вам просто нужно проверить, есть ли у пользователя имя пользователя
<!DOCTYPE html>
<?php
session_start();
if (!isset($_SESSION['username']) || $_SESSION['username'] == '')
header('location: page1.php')
?>
<html lang="en-US">
<head>
<title>meekochat</title>
<link rel="icon" href="icon.png">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body id="body">
Your username is <?php echo $_SESSION["username"]; ?>
</body>
</html>
Ответ №2:
Вы можете перенаправить либо на PHP, либо на Javascript.
PHP
Если вам нужен PHP-способ, вы можете установить заголовок.
header('Location: www.example.com');
Предупреждение: вы можете использовать header только в том случае, если вы не отправляли клиенту никакой другой информации.
Помните, что header() должен вызываться перед отправкой любого фактического вывода, будь то с помощью обычных HTML-тегов, пустых строк в файле или из PHP. Очень распространенной ошибкой является чтение кода с включенными или требующими функциями или другой функцией доступа к файлам, в котором есть пробелы или пустые строки, выводимые перед вызовом header(). Та же проблема существует при использовании одного файла PHP / HTML.
Javascript
Вы можете перенаправить браузер, используя следующее:
window.location = "www.example.com";
Это можно сделать в любое время.
Источники: PHP-Заголовок JS-Window-Location
Комментарии:
1. Я бы не рекомендовал w3schools — в последнее время MDN — гораздо лучший ресурс, полный плохой практики 🙂
Ответ №3:
на page2.php вы должны проверить, пусто ли имя пользователя тоже, и если это так, вам следует перенаправить на страницу 1 с тегом header("Location")
или echo <script>
с window.location="your url"
<?php
session_start();
if(isset($_POST["submit"])amp;amp;!empty($_POST["username"])) {
$_SESSION["username"] = $_POST["username"];
}
else
{
header("Location:". "http://yourwebsite.domain/page1.php" );
}
?>
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>meekochat</title>
<link rel="icon" href="icon.png">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body id="body">
Your username is <?php echo $_SESSION["username"]; ?>
</body>
</html>
Ответ №4:
Один из способов сделать это без Javascript — создать другой php-файл для проверки:
//verify.php
<?php
if(isset($_POST["username"])){
include("somepath/file2.php");
}
else{
include("somepath/file1.php")
}
?>
Или более простым способом, просто добавьте обязательный атрибут в HTML
<input type="username" id="username" name="username" placeholder="Username" required>
Комментарии:
1. Спасибо. У меня есть требуемый атрибут, но я также собираюсь использовать verify.php потому что кто-то может нажать пробел один раз и пройти мимо этого. (поскольку один пробел означает, что поле ввода технически не пустое, пользователь может перейти к page2.php без имени. ).