Проверьте, пуста ли переменная username, и если да, то не переходите к page2.php

#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 без имени. ).