PHP/HTML:输入后保存表单数据
Posted
技术标签:
【中文标题】PHP/HTML:输入后保存表单数据【英文标题】:PHP/HTML: saving form data once entered 【发布时间】:2020-03-12 22:22:05 【问题描述】:我有一个带有基本 html 的 php 网页,其中包括表单,用户可以在其中输入一些数据。表单可以由用户直接填写,也可以通过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 表
如何使用复选框在 mySQL 中输入 true (1) 或 false (0) 并显示为在 php / html 表单中选中?