2010-06-03 2 views
5

<option selected="selected">을 MySQL 및 PHP로 설정하는 방법은 무엇입니까?MySQL 및 PHP에서 <option selected = "selected"> 설정 방법?

내 코드 : 당신은 $selected 매번를 정의해야합니다, 당신은 비교 대신 대입 연산자를 사용하고

echo '<select>'; 
$tempholder = array(); 
$rs = mysql_query("SELECT * FROM id ORDER BY year"); 
$nr = mysql_num_rows($rs); 
for ($i=0; $i<$nr; $i++){ 
    $r = mysql_fetch_array($rs); 
    //if($year==$r["year"]){ $selected=' selected="selected"'; }//doesn't work so 
    if (!in_array($r['year'], $tempholder)){ 
     $tempholder[$i] = $r['year']; 
     echo "<option>".$r["year"]."</option>";//<option$selected>... 
    } 
} 
unset($tempholder); 
echo '</select>'; 
+0

$ r [ "year"]를 $ r에 할당하기 전에 테스트하는 이유는 무엇입니까? 시도한 코드에서 어떤 오류가 발생합니까? –

+0

@Mark Byers : O.K., 나는 그것을 바꾼다. 그리고'$ r' 할당 후에도 작동하지 않습니다. – Binyamin

답변

5

, 당신은 쿼리에서 한 번만 매년 돌아 데이터베이스를 요청하여 자신에게 배열 조회를 저장하고 코드를 간단하게 할 수 있습니다 숫자가 아닌 연도라고 가정하고 htmlspecialchars()을 사용하지 않아도되지만 HTML 템플릿에 포함 된 일반 텍스트를 항상 HTML 이스케이프 처리하는 것이 좋습니다 .을 단축 이름으로 사용하여 입력을 줄이는 것이 좋습니다. )

+0

샘플과 @ Kau-Boy 코드의 차이점은 무엇입니까? 'htmlspecialchars()'를 무시하면 더 빠르고 안전합니다. – Binyamin

+0

여기서는 HTML 이스 케이 핑 만이 '안전'문제입니다.속도에 관해서는 원래의 질문 코드와 Kau-Boy의 버전에서와 같이 PHP가 아닌 데이터베이스를 사용하여이 답변에서와 같이 중복 연도를 버리는 것이 일반적으로 더 빠릅니다 (데이터가 많으면 * 빠름). 'id' 테이블의 전체 내용을 데이터베이스에서 추출하여 PHP로 반환합니다. – bobince

+0

또 다른 주요 차이점은 PHP 자체를 사용하여 HTML 자체로 템플릿을 작성하는 형식을 변경했기 때문입니다.이 문자열은 연결 문자열을 연결하지 않고이 경우에는 블록 구조를 자체 PHP에서 분리했습니다 꼬리표. 이렇게하면 하나의 일관된 들여 쓰기 계층 구조가 가능합니다. 이는 순수하게 스타일에 대한 선택이며 성능에 별다른 영향을주지 않지만 가독성이 도움이된다고 생각합니다. – bobince

2

:

echo '<select>'; 
$tempholder = array(); 
$rs = mysql_query("SELECT * FROM id ORDER BY year"); 
$nr = mysql_num_rows($rs); 
for ($i = 0; $i < $nr; $i++){ 
    if($year == $r["year"]) { //not $year = $r["year"] 
     $selected=' selected="selected"'; 
    } 
    else { 
     $selected = ""; 
    } 
    $r = mysql_fetch_array($rs); 
    if (!in_array($r['year'], $tempholder)){ 
     $tempholder[$i] = $r['year']; 
     echo "<option$selected>" . $r["year"] . "</option>"; 
    } 
} 
unset($tempholder); 
echo '</select>'; 
+0

불행히도 ** ** 작동하지 않습니다. ** 항상 같은 값 ('year' : 2010)으로'selected' 옵션을 유지합니다. – Binyamin

+0

@Binyamin 나는 당신이 원하는 것을 얻지 못했지만이 코드를 사용해보십시오. 확실히 $ selected는 일정하지 않습니다. – Artefacto

6

을 시도해보십시오이 하나

echo '<select>'; 
$tempholder = array(); 
$rs = mysql_query("SELECT * FROM id ORDER BY year"); 
$nr = mysql_num_rows($rs); 
for ($i=0; $i<$nr; $i++){ 
    $r = mysql_fetch_array($rs); 
    if (!in_array($r['year'], $tempholder)){ 
     $tempholder[$i] = $r['year']; 
     echo "<option".(($year==$r["year"])? ' selected="selected"' : '').">".$r["year"]."</option>"; 
    } 
} 
unset($tempholder); 
echo '</select>'; 

그것은 당신이 덮어 써야하는 변수에 상태를 저장하지 않습니다.

그리고 나는 진짜 오류가 $ year = $ r [ "year"]에있는 단일 등호이고 나머지 코드는 생각하지 않는다고 생각합니다. 당신은 할 수있다 (

<select> 
    <?php $result= mysql_query('SELECT DISTINCT year FROM id ORDER BY year'); ?> 
    <?php while($row= mysql_fetch_assoc($result)) { ?> 
     <option <?php if ($row['year']==$year) { ?>selected="selected"<?php } ?>> 
      <?php echo htmlspecialchars($row['year']); ?> 
     </option> 
    <?php } ?> 
</select> 

다음 =/== 잡았다 고정 외에도

+0

고마워요! 그것은 화격자 작동합니다! – Binyamin

+0

나는 당신을 도울 수있어서 기뻐요. – 2ndkauboy

0

실제로는 mysqli이 있었지만 많은 호스트가 PHP 5를 지원하지 않았던 이전 코드가 사용되지 않는 코드를 사용하기 때문에 후손을 위해 여기에 대답하십시오. 여기

$year 변수 (양식에서 오는 가정하면 데이터베이스 연결

$conn = new mysqli($host, $username, $password, $dbname); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

것 대신 mysql_ 확장을 사용하는, 여기 mysqli_ 연결을 작동 객체 지향 접근 방식을 사용하여 처리하는 방법이있다 이 GET 또는 SESSION 또는 어디든지)

$year = $_POST['year']; 

에서 사용될 수 있지만 여기에 옵션 버튼에 대한 쿼리 (나는 그것이 깨진 가지고입니다 읽기 쉽도록 다른 행에 넣으십시오).

$result=$conn->query($sql); 
    while($row = $result->fetch_assoc()) {  
     if ($row['year']==$year) { 
      $selected = 'selected="selected"'; 
     } 
     else { 
      $selected = ''; 
     } 
     echo '<option value="'.$row['year'].'" '. $selected . '>"' 
      . $row['year'] .'</option>'; 
    } 
관련 문제