Так что я делаю динамическое создание формы и входных элементов в документе с JS следующим образом:
document.ondblclick = function(e) {
if (e.clientX < 50 && e.clientY > window.innerHeight - 50
&& !document.querySelector('form')) {
const b = document.body
const f = document.createElement('form')
const i = document.createElement('input')
b.style.width = '100vw'
b.style.height = '100vh'
b.style.margin = '0'
b.style.display = 'flex'
b.style.justifyContent = 'center'
b.style.alignItems = 'center'
i.setAttribute('type', 'password')
i.setAttribute('name', 'password')
i.setAttribute('id', 'form')
f.setAttribute('method', 'post')
f.setAttribute('action', '<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>')
f.appendChild(i)
b.appendChild(f)
i.focus()
i.onblur = function() {
i.focus()
}
}
}
Однако, как будто браузер игнорирует PHP и вместо того, чтобы возвращаться к текущему файлу, поэтому он перенаправляется на страницу 404.
Ниже приведены HTML, PHP и файловая структура каталога.
<?php
session_start();
if ($_SERVER["REQUEST_METHOD"] === "POST" && !empty($_POST["password"])) {
include "php/connect.php";
$stri = "SELECT password FROM account";
$stat = $conn->prepare($stri);
$stat->execute();
$resu = $stat->fetch(PDO::FETCH_ASSOC);
if (password_verify($_POST["password"], $resu["password"])) {
$_SESSION["session"] = $resu["password"];
$conn = null;
echo 'SUCCESS';
}
$conn = null;
}
?>
<!DOCTYPE html>
<head>
<title>‎</title>
<meta charset="UTF-8">
</head>
<body>
<script type="text/javascript" src="/index.js"></script>
</body>
</html>
Каталог структурирован так...
public_html >
trading-toolbox >
css > index.css
js > index.js
php > connect.php
index.php
Почему он перенаправляется на страницу 404? Что я здесь делаю неправильно? Является ли атрибут действия формы обработанным как строка, поскольку он динамически задан с помощью JS?
Вам нужно указать свой.js файл как.php и отправить заголовки для раскрытия файла как javascript и использовать $ _SESSION для отправки файла действия из индекса в JS
<?php
header('content-type:application/javascript; charset=utf-8');
?>
...
f.setAttribute('action', '<?php echo htmlspecialchars($_SESSION["formFile"]); ?>')
...
Затем в ваш индексный файл добавьте и измените
<?php $_SESSION["formFile"] = $_SERVER["PHP_SELF"]; ?>
<script type="text/javascript" src="js/index.php"></script>
Проблема заключается в вашем файле index.js. Обратите внимание на то, что файл заканчивается? .js
является javascript файлом и будет обрабатываться вашим сервером как статический файл, только обслуживающий содержимое и не обрабатывая файл. Самое простое решение - переименовать его в index.php
а затем включить его как обычно:
<script type="text/javascript" src="js/index.php"></script>
<script type="text/javascript">...the contents of index.js...</script>
в index.php
<script type="text/javascript" src="js/index.PHP"></script>
??? и что именно является целью создания$_SESSION["formFile"]
, почему бы просто не использовать$_SERVER["PHP_SELF"]
вместо переназначения его другой переменной?