Açılan kutu PHP kümesi seçilen değeri

4 Cevap php

Ben PHP ile inşa bir açılır kutu var. İşte kod:

 $region_result = mysql_query("SELECT * FROM region ORDER BY region");    

 $dropdown = "<select name='region'>";
while($row = mysql_fetch_assoc($region_result)) {
	$rid = $row["id"];
	$region = $row["region"];

	$dropdown .= "\r\n<option value='{$row['rid']}'>{$region}</option>";
}
 $dropdown .= "\r\n</select>";

Ben yukarıdaki kodu işlenir SONRA açılan kutusunun seçili değerini ayarlamanız gerekir. Bunu yapmanın kolay bir yolu var mı?

Herkes herhangi bir öneriniz var mı? Teşekkürler!

EDIT:

Cevaplarınız için hepinize teşekkür ederim. Bana ne yapıyorum açıklayayım. Metin kutuları ve açılan kutuları - olduğunu - Ben birden çok ölçüte göre bir kullanıcı için arama yapabilirsiniz ve daha sonra sonuçları bir "düzenleme modunda" listelenen bir "Kullanıcıları Düzenle" sayfasını, batıyordu. Yani sonra düzenlemek ve bir kullanıcı güncelleyebilirsiniz. Iki kullanıcı alanları için, ben (veri bütünlüğünü ve kısıtlamaları sağlamak için) açılan kutuları verileri listelemek gerekir. Yani, ben açılan seçilen değeri şu anda kullanıcı ile ilişkili olmak istiyorum dışında, siz değiştirebilirsiniz tüm olası değerleri olanlar açılan kutuları göstermek istiyorum.

Yani, ben bu deceze önerisi ile çalışma almak başardı - bu veritabanı sonuçları ile benim PHP değerlerini ayarlıyor olan benim while döngüsü, ben iç içe bir takılı iken $ açılan inşa, ve eğer içinde, bir iç içe olacak döngü çevrim. Ben bütün bu içe döngüler hakkında deli değilim. İşte bunun için kod segment:

 if (@mysql_num_rows($result)) {
		while ($r=@mysql_fetch_assoc($result)) {	
			$fname = $r["fname"];
        	$lname = $r["lname"];
	        $region = $r["region"];
	        $role = $r["role"];
			$extension = $r["extension"];
			$username = $r["username"];
			$building = $r["building"];
			$room = $r["room"];?>

			<?php
			$dropdown = "<select name='region'>";
			while($row = mysql_fetch_assoc($region_result)) {
				$rid = $row["id"];
				$region2 = $row["region"];

				if($region == $region2){
					$dropdown .= "\r\n<option selected='selected' value='{$row['rid']}'>{$region}</option>";
				}else{
					$dropdown .= "\r\n<option value='{$row['rid']}'>{$region2}</option>";
				}
			}
			$dropdown .= "\r\n</select>";
			?>

Ben bu performans daha iyi olacağını düşünüyorum Ancak, ben, (soulscratch ve zombat tarafından önerilen) metin değiştirme için bu değişen düşünüyor yaşıyorum.

... Bu, birden fazla sonuç kümesi (2 ve 3 için açılan kutuları vb sonuç olarak boş) olsa, arama kriterlerini karşıladığında çalışmak için görünmüyor.

Siz ne düşünüyorsunuz?

4 Cevap

Lütfen dize inşa yolu ile, düzenli ifadeler ihtiyacı güçlük kaydeder gibi güzel olan, oldukça basit bir str_replace() bulunuyor:

$dropdown = str_replace("value='".$rid."'","value='".$rid."' selected=\"selected\"",$dropdown);

Eğer monte HTML değiştirmek istiyorsanız after the fact size karmaşık dize yöntemleri yerine kullanmak gerekir, ya da Javascript, ikisi de iyi bir seçimdir.

Eğer varsa en iyi seçenek döngü etrafında ilk defa giderken selected niteliğini ayarlayabilirsiniz böylece programı yeniden olacaktır.

Sen $ _REQUEST içinde bulmak mümkün ['bölge'] olacaktır

Ben bir daha esnek bir çözüm ile gelip değerli olurdu anlamına gelir, yine bu sorun haline çalıştırmak bahse girerim. İşte bu amaca yönelik bir fikir:

İlk olarak, açılan listeden seçeneklerini tutmak için bir dizi kullanın. Eğer aynı seçenekleri ile çoklu seçim elemanları gerekiyorsa, ücretsiz yeniden kullanmak dizi olsun:

$options = array ();
while ($row = mysql_fetch_assoc($region_result)) {
  $options[$row['id']] = $row['region'];
}

Sonra, bir seçme denetimini üreten bir fonksiyon içine besleyebilir:

function getSelect ($name, $options, $current)
{
  $markup = '<select name="' . htmlspecialchars($name) . '">';
  foreach ($options as $value => $label)
  {
    $selected = ($value == $current) ? ' selected="selected"' : '';
    $markup .= sprintf(
      "<option value=\"%s\"%s>%s</option>\r\n",
      htmlspecialchars($value), 
      $selected, 
      htmlspecialchars($label)
    );
  }
  $markup .= '</select>';
  return $markup;
}

(Ayrıca, id, class, vb ayarlamak için bir veya daha fazla isteğe bağlı parametreleri ekleyebilirsiniz)

Ayrıca, çünkü hız yöntemleri geçiş düşünüyor belirtildiği, ancak bu performansı hakkında endişelenmenize gerek zaman ve yer olması çok olası değil. Şimdi rahat kodu odaklanın ve gerekli hale herhangi bir performans tweaks daha kolay ve daha etkili olacaktır.