2010-03-23 2 views
0

에 "예"또는 "아니오"자동차는 해당 라디오 버튼 확인 :PHP가 비교를 허용하지 않는 이유는 무엇입니까? 나는 데이터베이스 내 테이블에 항목이 설정되어있는 경우 읽기 PHP를 사용하고

<?php include 'file.php'; 
$query = "SELECT * FROM TABLE"; 
$runquery = odbc_exec($connect,$query); 
$status= odbc_result($runquery,"status"); 
odbc_close($file); 
?> 
<form> 
<div class="formContainer"> 
    <fieldset> 
    <legend>Campus Alert<span class="tooltip">Turn campus alert on and off.</span></legend> 
     <?php echo $status; ?> 
     Yes <input type="radio" name="alertStatus" id="alertStatus" value="yes" <?php if($status== "yes") echo "checked";?>> 
     No <input type="radio" name="alertStatus" id="alertStatus" value="no" <?php if($status== "no") echo "checked";?>> 
    </fieldset> 
</div> 

<?php echo $status; ?> 그래서 디버깅입니다 나는 데이터베이스가 말하는 것과 폼의 반응이 정확한지 확인할 수 있습니다. "예"(따옴표 제외)를 인쇄합니다. 그러나 if 문은 응답하지 않습니다. 왜 이런 짓을 한거야?

+0

$ status = "yes"입니까? 첫 번째 줄 (첫 번째 라디오 버튼 앞에)에 "예 예"(따옴표 제외)가 표시되어야합니다. ... –

+0

정확히 내가 본 것입니다. 그것이 나를 던지는 이유입니다. 나는 $ 상태가 "echo"라는 echo를 볼 수 있으므로 DB로부터 올바른 것을 반환하지만 if 문은 그것을 좋아하지 않습니다. – dcp3450

+0

아무 것도 반환하지 않는 $ status == "yes" –

답변

3

당신이 변경 해봤 당신의 당신은 페이지의 소스를 보면

<?php if(strtolower(trim($status)) == "yes") echo "checked";?> 
+0

trim()이 트릭을했음을 지적 해 주셔서 감사합니다. – dcp3450

+1

'trim'이 트릭을했다는 사실은 데이터베이스 필드에 공백이 있거나 공백이 있음을 의미합니다. 이것이 어디에서 왔는지 조사하는 것이 가치가있을 것입니다. – mikej

+0

그래서 echo가 아닌 var_dump()를 사용하여 디버깅해야합니다 –

0

와우, 정말 이상하네요. 문제는 PHP가 아닙니다. 우선, 해당 필드에서 id 속성을 제거해야합니다. 그러나 실제 문제는 Firefox가 alertStatus라는 이름을 가진 두 번째 필드를 확인하려고하지 않는다는 것입니다. 이름을 다른 것으로 변경하면 작동하는 것 같습니다. 왜 이런 생각인지 잘 모르겠다.

여기 내 테스트 코드입니다 :

<?php //include 'file.php'; 
//$query = "SELECT * FROM TABLE"; 
//$runquery = odbc_exec($connect,$query); 
//$status= odbc_result($runquery,"status"); 
//odbc_close($file); 
$status='no'; 
?> 
<form> 
<div class="formContainer"> 
    <fieldset> 
    <legend>Campus Alert<span class="tooltip">Turn campus alert on and off.</span></legend> 
     <?php echo $status; ?> 
     Yes <input type="radio" name="alertStatu" value="yes" <?php if($status== "yes") echo "checked";?>> 
     No <input type="radio" name="alertStatu" value="no" <?php if($status== "no") echo "checked";?>> 
    </fieldset> 
</div> 
+0

$ status = "yes"또는 $ status = "no"로 $ status를 yes 또는 no와 같은 특정 값으로 설정하면 작동합니다. DB를 당겨서 값을 설정할 때만 중단됩니다. 나는 내 코드에 들어가서 다른 것만 바꾸면 작동한다. – dcp3450

+0

이것은 필드의 특정 이름과 관련이 없습니다. 예 : "alertStatus". 페이지를 새로 고치면 Firefox는 양식 필드에서 이전 데이터를 기억하고 HTML 소스에있는 "checked"를 무시하고 양식을이 상태로 복원합니다. 대신 완전히 새로 고침 (Ctrl + F5)해야합니다. Firefox가 새 이름에 대해 기억 된 값을 가지고 있지 않기 때문에 필드의 이름을 바꾸는 것이 도움이되는 것 같습니다. – mikej

+0

아 ... 글쎄, 내가 그 하나의 XD에 실패했다고 생각해. 그것이 의미가 없기 때문에, 잘 알고있어. > _ < – Chibu

0

같은에 문 당신이 check이 실제로 있다는 것을 확인할 수있는 경우 . 그러나 ID가 중복되어 브라우저가 혼란스러워지고 있습니다.

Yes <input type="radio" name="alertStatus" id="alertStatus" ....> 
No <input type="radio" name="alertStatus" id="alertStatus" .....> 

Yes <input type="radio" name="alertStatus" id="alertStatus:yes" ....> 
No <input type="radio" name="alertStatus" id="alertStatus:no" .....> 

으로 그것은 수정합니다 : 교체합니다.

1

$status에 "예/아니오"를 사용하는 것은 좋지 않으므로 int 또는 boolean 값을 사용하는 것이 좋습니다.

관련 문제