PHP/HTML:输入后保存表单数据

Posted

技术标签:

【中文标题】PHP/HTML:输入后保存表单数据【英文标题】:PHP/HTML: saving form data once entered 【发布时间】:2020-03-12 22:22:05 【问题描述】:

我有一个带有基本 htmlphp 网页,其中包括表单,用户可以在其中输入一些数据。表单可以由用户直接填写,也可以通过GET 方法自动填写,由从原始PHP 网页调用的操作之一返回。

问题是,在表单被自动填充后,如果在网页上调用任何其他操作(外部 php 页面;这些操作实际上都不会导致离开网页),表单数据将被删除,用户只剩下空白字段。

我希望保存表单中的数据,并在输入后始终显示。在变量通过GET 方法到达后,我尝试使用$_SESSION 来保存值数组,但它对我不起作用:

<?php if (isset($_GET['decrypted'])) : ?>

<?php session_start(); 
$_SESSION['saved'] = array();

// Add items based on item ID
$_SESSION['saved'][$decrypt_data] = array('s_id' => $_GET['s_id'], 'u_id' => $_GET['u_id'], 'l_id' => $_GET['l_id'], 'cu_id' => $_GET['cu_id']);

?>

...

    <form action="./encrypt.php">
    <p>2) Select options:</p>
    <input type="radio" name="mode" value="one">one<br>
    <input type="radio" name="mode" value="two">two<br>
    <p></p>
    s ID: <br><input type="text" name="s_id" value="<?php echo $_SESSION['saved'][decrypt_data]['s_id'] ?>"><br> 
    u ID: <br><input type="text" name="u_id" value="<?php echo $_SESSION['saved'][decrypt_data]['u_id'] ?>"><br> 
    l ID: <br><input type="text" name="l_id" value="<?php echo $_SESSION['saved'][decrypt_data]['l_id'] ?>"><br>
    cu ID: <br><input type="text" name="cu_id" value="<?php echo $_SESSION['saved'][decrypt_data]['cu_id'] ?>"><br>
    <p></p>
    <input type="submit" value="Do it!">
    </form>

完整代码:

<html lang="en">
<head>
<Title>WEBPAGE</Title>
</head>
<body>
    <h1>DECRYPT</h1>

    <form action="webpage.php" method="post" enctype="multipart/form-data">
    <p>
    <label for="my_upload">1) Select a file to upload:</label>
    <input id="my_upload" name="my_upload" type="file">
    </p>
    <input type="submit" value="Upload">
    </form>

    <?php if (isset($_GET['uploaded'])) : ?>
    <span style="background-color:#29a329"> <font color="white">File successfully uploaded!</font></span>
    <?php endif; ?>

    <form action="./decrypt.php">
    <p>2) Select decrypt mode:</p>
    <input type="radio" name="mode" value="one">one<br>
    <input type="radio" name="mode" value="two">two<br> 
    <p></p>
    <input type="submit" value="Decrypt">
    </form>

    <?php if (isset($_GET['decrypted'])) : ?>

    <?php session_start(); 
    $_SESSION['saved'] = array();

    // Add items based on item ID
    $_SESSION['saved'][$decrypt_data] = array('s_id' => $_GET['s_id'], 'u_id' => $_GET['u_id'], 'l_id' => $_GET['l_id'], 'cu_id' => $_GET['cu_id']);

    ?>

    <span style="background-color:#29a329"> <font color="white">File successfully decrypted!</font></span>
    <p></p>
    <form method="get" action="/decrypted_downloaded/<?php echo $_GET['final_name'] ?>">
        <button type="submit">Download decrypted file</button>
    </form>


    <?php endif; ?>

    <hr>

    <h1>ENCRYPT normal file</h1>

    <form action="webpage.php" method="post" enctype="multipart/form-data">
    <p>
    <label for="my_upload2">1) Select a file to upload:</label>
    <input id="my_upload2" name="my_upload2" type="file">
    </p>
    <input type="submit" value="Upload">
    </form>

    <?php if (isset($_GET['uploaded_bin'])) : ?>
    <span style="background-color:#29a329"> <font color="white">File successfully uploaded!</font></span>
    <?php endif; ?>

    <form action="./encrypt.php">
    <p>2) Select encrypt options:</p>
    <input type="radio" name="mode" value="one">one<br>
    <input type="radio" name="mode" value="two">two<br>
    <p></p>
    s ID: <br><input type="text" name="s_id" value="<?php echo $_SESSION['saved'][decrypt_data]['s_id'] ?>"><br> 
    u ID: <br><input type="text" name="u_id" value="<?php echo $_SESSION['saved'][decrypt_data]['u_id'] ?>"><br> 
    l ID: <br><input type="text" name="l_id" value="<?php echo $_SESSION['saved'][decrypt_data]['l_id'] ?>"><br>
    cu ID: <br><input type="text" name="cu_id" value="<?php echo $_SESSION['saved'][decrypt_data]['cu_id'] ?>"><br>
    <p></p>
    <input type="submit" value="Encrypt">
    </form>

    <?php if (isset($_GET['encrypted'])) : ?>

    <span style="background-color:#29a329"> <font color="white">File successfully encrypted!</font></span>
    <p></p>
    <form method="get" action="/encrypted_downloaded/<?php echo $_GET['final_name_webpage'] ?>">
        <button type="submit">Download encrypted file</button>
    </form>


    <?php endif; ?>


</body>
</html>
<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') 

  if (is_uploaded_file($_FILES['my_upload']['tmp_name'])) 
   
    //delete folder contents
    $files = glob('./encrypted_uploaded/*'); // get all file names
    foreach($files as $file) // iterate files
        if(is_file($file))
            unlink($file); // delete file
    

    //Validate the file name
    if(empty($_FILES['my_upload']['name']))
    
        echo " File name is empty! ";
        exit;
    

    $upload_file_name = $_FILES['my_upload']['name'];
    //Too long file name?
    if(strlen ($upload_file_name)>150)
    
        echo " too long file name ";
        exit;
    

    //set a limit to the file upload size
    if ($_FILES['my_upload']['size'] > 10000000) 
    
        echo " too big file ";
        exit;        
    

    //Save the file
    $dest=__DIR__.'/encrypted_uploaded/'.$upload_file_name;
    if (move_uploaded_file($_FILES['my_upload']['tmp_name'], $dest)) 
    
        header('Location: webpage.php?uploaded=yes'); 
    
  

  if (is_uploaded_file($_FILES['my_upload2']['tmp_name'])) 
   

    echo " test ";
    //delete folder contents
    $files = glob('./decrypted_uploaded/*'); // get all file names
    foreach($files as $file) // iterate files
        if(is_file($file))
            unlink($file); // delete file
    

    //Validate the file name
    if(empty($_FILES['my_upload2']['name']))
    
        echo " File name is empty! ";
        exit;
    

    $upload_file_name = $_FILES['my_upload2']['name'];
    //Too long file name?
    if(strlen ($upload_file_name)>150)
    
        echo " too long file name ";
        exit;
    

    //set a limit to the file upload size
    if ($_FILES['my_upload2']['size'] > 10000000) 
    
        echo " too big file ";
        exit;        
    

    //Save the file
    $dest=__DIR__.'/decrypted_uploaded/'.$upload_file_name;
    if (move_uploaded_file($_FILES['my_upload2']['tmp_name'], $dest)) 
    
        header('Location: webpage.php?uploaded_bin=yes');
    
  

【问题讨论】:

页面上还有其他表格吗?另外,[decrypt_data] 不会给你一个错误吗? 是的,网页上有4个表单,但这是唯一一个带有文本字段的表单。不,[decrypt_data],不会给我一个错误。 这可能是一个长镜头,但是您是否通过这些其他操作更新其他表单?如果是这样,您将如何更新这些内容? 不,我不会更新其他表格。当我收到某些 GET 响应时,我只会通过 HTML 显示某些消息或按钮。 表单中有这些按钮吗?如何选择要更新的按钮?因为我在表单或表单字段中看不到类或 ID。您是否使用名称或类型属性进行选择?我问这个是因为我认为这是因为您可能忘记正确定位元素... 【参考方案1】:

您将数据保存在 $_SESSION['已保存'][$decrypt_data] 但你读 $_SESSION['已保存'][decrypt_data]['l_id'] 读取数据时将 $ 符号添加到 decrypt_data

【讨论】:

谢谢,这确实有帮助,在收到 GET 参数后现在会显示数据,但是一旦调用另一个操作,数据就会从文本字段中删除...:/ 看起来我在“decrypt_data”中的数据丢失了,也许会话丢失了?我不知道为什么... 好的,你的回答对我的具体问题是正确的,“$”不见了。我在会话方面遇到了进一步的问题,我通过放置 直接在 html 标记之后。谢谢!【参考方案2】:

您必须使用 Html 形式的 Post 方法;并使用 Post 方法获取;

【讨论】:

以上是关于PHP/HTML:输入后保存表单数据的主要内容,如果未能解决你的问题,请参考以下文章

脚本执行后如何保存用户在表单页面输入的数据?

尝试使用注册表单中的 PHP/Html 将数据输入 SQL 表

使用 jquery 和 ajax 自动保存表单字段输入

如何使用复选框在 mySQL 中输入 true (1) 或 false (0) 并显示为在 php / html 表单中选中?

php 表单的输入字段显示数据库用户名和密码

任务成功后清空输入框