php - 需要一些帮助来实现这个功能

标签 php javascript html

我有一个 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 问题:您的示例代码存在许多安全漏洞。让我举例说明一种干净地处理表单的简单方法。下面的代码说明了一种防错的处理方式:

  • 阅读输入
  • 验证
  • 处理错误,提供友好的消息
  • 重新填写表格
  • 等等...

请注意在需要时使用 htmlspecialcharsENT_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/

相关文章:

javascript - jQuery中模拟两个函数同时执行

java - 如何使用 Java 将 text/html 和 text/plain 复制到剪贴板

jquery - 在 asp.net+jquery 中将图像从一个面板拖放到另一个面板

php - 有没有办法通过一个条件获取记录

PHP 更新数据库失败

php - "date(): It is not safe to rely on the system' s 时区设置..."

javascript - 查看 JS 中调用了哪些方法/事件

javascript - jquery 自动 slider 与上一个/下一个

javascript - 在 Angular 中过滤 ng-repeat

php - 在 ffmpeg 安装中无法连接到 GitHub.com 进行克隆