我如何告诉process.php保留该值,直到“ name = newurl”值的下一个“ POST”值通过表单传递FORM POST UPDATE IFRAME URL SRC 其他

问题描述

form1.PHP代码可通过管理员POST传递在iframe src表单上提交的网址,以更新iframe.PHP的{​​{1}},但process.PHP不是保留最后的值。当观众再次请求发送页面页面iframe.PHP时(因为他们无法更改所提供的url),则返回认的src而不是管理员最后发布的表单。

我如何告诉process.PHP保留该值,直到POST值的下一个name=newurl通过表单传递为止。

我做了一个表格form1.PHP

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form name="newurl" action="iframe.PHP" method="post">
        <label for="newurl">Type the new Url</label><br>
        <input type="url" id="newurl" name="newurl">
        <button type="submit" name="submit" value="submit">Go!</button><br>
    </form> 
</body>
</html>

通过从$newurl=$_POST['newurl'];获取值来更新iframe的src

然后输入iframe代码iframe.PHP

    <!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="stylesheet" href="styles.css">
    <title>Document</title>
</head>
<body>
    
    <div><p>Click on the blue screen</p></div>
    <div id="content">
        <iframe width="100%" height="100%" frameborder="0" src="<?PHP require_once 'process.PHP' ?>" name="content_frame">
   </div>
</body>
</html>

process.PHP

<?PHP 


if (isset($_POST['submit'])) {
    $newurl=$_POST['newurl'];
    echo $newurl ;
}

?>

解决方法

有两种主流做法。

  1. 将帖子值保存到会话中。
    通知:尝试读取或写入$ _SESSION时必须启动会话,并且无法重复开始,否则会收到警告。
// form1.php
session_start();
$_SESSION["newurl"] = $_POST["newurl"];
// process.php
session_start();
$newurl = $_SESSION["newurl"]
echo $newurl;
  1. 将过帐值保存到数据库。 (跳过示例)

其他

如果iframe包含在form1.php中,则还可以使用AJAX来实现目标,甚至无需将发布值保存到会话或数据库中。

例如:

<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Document</title>
  </head>

  <body>
    <form name="newurl" action="iframe.php" method="post">
      <label for="newurl">Type the new Url</label><br>
      <input type="url" id="newurl" name="newurl">
      <button id="submitButton" type="submit" name="submit" value="submit">Go!</button><br>
    </form>

    <iframe width="100%" height="100%" frameborder="0" src="" name="content_frame"></iframe>

    <script>
      function alterSubmit(event) {
        // prevent default submit 
        event.stopPropagation();
        event.preventDefault();

        let newurl = document.querySelector("#newurl").value;
        let iframe = document.querySelector("iframe");

        let fd = new FormData();
        fd.append("submit","");
        fd.append("newurl",newurl);

        fetch("/path/to/process.php",{
          method: "POST",body: fd
        }).then(
          r => r.text()
        ).then(r => {
          // change iframe src   
          iframe.src = r;
        });
      }

      document.querySelector("#submitButton").onclick = e => {
        alterSubmit(e);
      }
    </script>
  </body>
</html>
// process.php
if (isset($_POST['submit'])) {
    $newurl=$_POST['newurl'];
    echo $newurl ;
}