我有一个 php 页面,用户可以在其中将数据输入到表单内的字段中。 该表单还有一个图片上传实用程序。 每次上传新图片时都会刷新此页面,因此为了“记住”用户已经填写的值,我有以下代码:
<input type="text" value="<?php echo @$_POST['name'];?>">
这不适用于下拉列表或 radio ...
我有一个来自上一个 Q 的解决方案,但这意味着我将不得不在 PHP 中再次创建所有下拉列表,而它们现在是 HTML,并且下拉列表中有很多选项。
还有其他办法吗?
这是第一个解决方案:
$color = $_POST["colors"];
$colors = array("red","green","blue");
<select name="colors">
<?php foreach ($colors as $option) { ?>
<option<?php print ($option == $color) ? " selected" : ""; ?>>
<?php print $option; ?>
</option>
<?php } ?>
</select>
谢谢
最佳答案
很抱歉,但无论多么痛苦,您都必须输出有效的 HTML。最好的建议是将它包装在辅助函数中并包含它。或者更好的是,找到一个好的表单处理库并使用它。这个问题已经解决了 1000 次。
XSS 问题:您的示例代码存在许多安全漏洞。让我举例说明一种干净地处理表单的简单方法。下面的代码说明了一种防错的处理方式:
- 阅读输入
- 验证
- 处理错误,提供友好的消息
- 重新填写表格
- 等等...
请注意在需要时使用 htmlspecialchars
和 ENT_QUOTES
。另外,cond 的使用? val1 : val2
运算符确保没有遗漏任何 E_STRICT
警告,而不使用 @
(这对性能来说可能很糟糕)。
<?php
$FirstName = trim(isset($_POST['FirstName']) ? $_POST['FirstName'] : '');
$LastName = trim(isset($_POST['LastName']) ? $_POST['LastName'] : '');
$Gender = trim(isset($_POST['Gender']) ? $_POST['Gender'] : '');
$Action = trim(isset($_POST['Action']) ? $_POST['Action'] : '');
$Errors = array();
switch($Action)
{
case 'Process':
// validation code here
if(empty($FirstName))
$Errors[] = 'First Name is required.';
if(empty($LastName))
$Errors[] = 'Last Name is required.';
if($Gender != 'Male' and $Gender != 'Female')
$Errors[] = 'Gender is required.';
if(count($Errors) > 0)
$break;
// save data or whatever here
// Redirect to next page
header('Location: nextpage.php');
exit;
}
?>
<html>
<head>
...
</head>
<body>
<?php if(count($Errors) > 0) { ?>
<div class="error">
<?php foreach($Error as $e) { ?>
<p><?php echo htmlspecialchars($e); ?></p>
<?php } ?>
</div>
<?php } ?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES); ?>">
<p>
First Name:
<input type="text" name="FirstName" value="<?php echo htmlspecialchars($FirstName, ENT_QUOTES); ?>" />
</p>
<p>
Last Name:
<input type="text" name="LastName" value="<?php echo htmlspecialchars($LastName, ENT_QUOTES); ?>" />
</p>
<p>
Gender:
<select name="Gender">
<option value=""></option>
<option value="Male" <?php if($Gender == 'Male') echo 'selected="selected"'; ?>>Male</option>
<option value="Female" <?php if($Gender == 'Female') echo 'selected="selected"'; ?>>Female</option>
</select>
</p>
</form>
</body>
</html>
关于php - 需要一些帮助来实现这个功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1996132/