Bu işlevi yapma ile yardıma ihtiyacınız

4 Cevap php

I have a php page where users may enter data into fields inside a form. The form also has a picture upload utility. This page is refreshed every time a new picture is uploaded, so to 'remember' the values the user ALREADY has filled in, I have this code:

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

Bu açılan listeleri veya radyolar için çalışmak ETMEZ ...

Ben bir önceki Q itibaren bir çözüm var ama onlar artık HTML olduğunda ben, PHP yine tüm açılan listeleri oluşturmak zorunda kalacak anlamına gelir, ve bu açılan listelerde seçenekleri LOT olduğunu.

Başka bir yolu var mı?

İşte ilk çözümdür:

$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>

Teşekkürler

4 Cevap

Üzgünüm söylüyorlar, ama ne olursa olsun bu ne kadar bir ağrı çıktı geçerli HTML zorunda. Iyi öneri bir yardımcı işlevi sarın ve eklemektir. Veya daha da iyisi, iyi bir formu işleme kütüphanesini bulmak gider ve onu kullanır. Bu sorun, defa 1000 çözüldü.

XSS CONCERN: Sizin örnek kod güvenlik açıkları bir numarası vardır. Bana temiz bir form işlemek için basit bir yol göstermek edelim. Aşağıdaki kod işlemek için bir hata geçirmez yol göstermektedir:

  • Girişi Okuma
  • Onaylama
  • Güzel mesajlar ile, hataları işleme
  • Formu yeniden doldurmamak
  • Vs ..

htmlspecialchars kullanımını ve unutmayın ENT_QUOTES gerektiğinde. Ayrıca, cond ? val1 : val2 operatörün kullanımı @ (ki performans için çok kötü olabilir) kullanılmadan ihmal no E_STRICT uyarılar, var olmasını sağlar.

<?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>

Sen zamanında bir seçeneği seçmek için Javascript kullanabilir, ve PHP ile Javascript kontrol edebilirsiniz.

Bu gibi:

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

Sadece bu komut onLoad çalışmasını sağlamak ve değeri her option öğenin id set.

Tamamen php ile listeyi yinelemek zorunda değilsiniz - Geçerli seçim işaretler sadece biraz:

<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>

Kaç seçeneğini kutuları ve radyo düğmeleri ur formu var. Sayısı 10'dan az ise u javascript kullanmak ve kolayca yapabilirsiniz. Else kendi php sizin seçme kutularını yapmak tavsiye

PHP KODU:

<?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 Yöntem: form değişiklik gerekecek. Onun değeri olarak aynı olacak seçenek kutularına kimliği eklemek gerekir.

// 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>