Динамически внедрить PHP, поскольку действие формы перенаправляет на страницу 404

0

Так что я делаю динамическое создание формы и входных элементов в документе с 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>&lrm;</title>
    <meta charset="UTF-8">
  </head>
  <body>
    <script type="text/javascript" src="js/index.js"></script>
  </body>
</html>

Каталог структурирован так...

public_html >
    trading-toolbox > 
        css > index.css
        js  > index.js
        php > connect.php
        index.php

Почему он перенаправляется на страницу 404? Что я здесь делаю неправильно? Является ли атрибут действия формы обработанным как строка, поскольку он динамически задан с помощью JS?

Теги:

2 ответа

1

Вам нужно указать свой.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>
  • 0
    очень интересно!! Я попробую этот томо. когда у меня будет больше времени по сравнению с встроенным JS, это больше похоже на то, на что я надеялся
  • 0
    не будет никаких проблем со следующим фрагментом кода, <script type="text/javascript" src="js/index.PHP"></script> ??? и что именно является целью создания $_SESSION["formFile"] , почему бы просто не использовать $_SERVER["PHP_SELF"] вместо переназначения его другой переменной?
Показать ещё 2 комментария
1

Проблема заключается в вашем файле index.js. Обратите внимание на то, что файл заканчивается? .js является javascript файлом и будет обрабатываться вашим сервером как статический файл, только обслуживающий содержимое и не обрабатывая файл. Самое простое решение - переименовать его в index.php а затем включить его как обычно:

<script type="text/javascript" src="js/index.php"></script>
  • 0
    хм ... это впрыскивается в файл PHP (index.php), правда?
  • 0
    я имею в виду, что если хуже становится хуже, я мог бы просто сделать это, включить <script type="text/javascript">...the contents of index.js...</script> в index.php
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню