制作此功能需要一些帮助

时间:2010-01-03 20:12:40

标签: php javascript html

我有一个php页面,用户可以在表单中的字段中输入数据。 该表单还有一个图片上传实用程序。 每次上传新图片时都会刷新此页面,因此要“记住”用户ALREADY填写的值,我有以下代码:

<input type="text" value="<?php echo @$_POST['name'];?>">

这不适用于下拉列表或无线电......

我有一个来自之前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>

由于

4 个答案:

答案 0 :(得分:2)

很抱歉,但无论多大的痛苦,您都必须输出有效的HTML。最好的建议是将它包装在辅助函数中并包含它。或者甚至更好,找一个好的表单处理库并使用它。这个问题已经解决了1000多次。

XSS CONCERN:您的示例代码存在许多安全漏洞。让我举例说明一种干净利落地处理表单的简单方法。以下代码说明了要处理的防错方法:

  • 阅读输入
  • 验证
  • 使用好消息处理错误
  • 重新填充表单
  • 等等...

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

答案 1 :(得分:0)

您可以使用Javascript在运行时选择一个选项,并且可以使用PHP控制Javascript。

像这样:

<?php $color = $_POST["colors"]; ?>
<script language = "JavaScript">
var colorOption = document.getElementById("<?php print($color)?>");
colorOption.selected = true;
</script>

只需让该脚本运行onLoad,并将每个option项的id设置为其值。

答案 2 :(得分:0)

你不必用php完全重做列表 - 只是标记当前选择的位:

<select name="opts">
<option <?php if(@$_POST['opts'] == 'value1') echo 'selected="SELECTED"'; ?>>value1</option>
<option <?php if(@$_POST['opts'] == 'value2') echo 'selected="SELECTED"'; ?>>value2</option>
</select>

答案 3 :(得分:0)

我们有多少个选择框和单选按钮。如果计数小于10你可以使用javascript并轻松实现。否则建议在php中选择框

PHP代码:

<?php

$color = $_POST["colors"];
$colors = array("red","green","blue");

?>
<select name="colors">

<?php 
$varSelected = "";
foreach ($colors as $option) 
{ 

  if($option == $color)
  {
    $varSelected = "selected:selected";
  }
  else
  {
    $varSelected ="";
  }
?>
  <option <?php echo $varSelected?>>
    <?php print $option; ?>
  </option>

<?php 
} 
?>
</select>

Javasript方法:需要进行表单修改。您必须在选项框中添加id,它与其值相同。

// supposing $_POST['colors']='Red';
<html>
<select name="gender">
<option value="Red" id="Red">Red</option>
<option value="Blue" id="Blue">Blue</option>
</select>
</html>

<script type="text/javascript">
document.getElementById("<?php echo $_POST['colors']").setAttribute("selected", "selected");
</script>