2013-10-06 2 views
1

작은 MySQL DB의 필드에서 부울 값을 전환하는 데 도움이 필요합니다. 이름과 존재 필드 (Present/Away)를 보여주는 index.php를 만들었습니다. 이를 위해 저는 부울을 사용합니다. 값을 클릭 할 수 있습니다.이 값은 부울 값을 전환해야합니다. 여기에 관련 코드 :mysql 쿼리에서받은 부울 값을 사용하여 값을 업데이트하십시오.

$id=$_GET['id']; 

$qresult = mysqli_query($con,"SELECT Present FROM personnel WHERE Inlogcode='$id'"); 

$result=mysql_fetch_array($qresult); 
$presence = (bool)$result; 

echo "ID is: " .$id . "<BR>"; 
echo "Boolean res is: " . $presence . "<BR>"; 

if ($presence) 
{ 
    $sql="UPDATE personnel SET Present=True WHERE Inlogcode='$id'"; 
    $resultaat=mysql_query($sql); 
} 
    else 
{ 
    $sql="UPDATE personnel SET Present=False WHERE Inlogcode='$id'"; 
    $resultaat=mysql_query($sql); 
} 

나는 내 PHP 스크립트의 나머지 부분에서 사용할 수있는 진정한 부울 값으로 다시 내 쿼리의 결과를 변환하는 방법을 찾을 수 없습니다. mysql_fetch_array를 추가하는 것은 불필요한 것처럼 보이지만 항상 0 또는 모두를 얻으므로 부울 값을 잃는 것처럼 보입니다. 물론 테스트 DB에는 두 값이 모두 들어 있습니다.

답변

1

는 단일 쿼리와 업데이트를 수행 할 수 있습니다

UPDATE personnel SET Present = 1 - Present WHERE Inlogcode=? 

은 PDO와 준비된 문을 사용하는 것이 좋습니다. 현재 쿼리는 SQL 인젝션 공격에 취약합니다.

+1

그리고 이것은 단순함의 아름다움입니다. 내가 제일 좋아하는. – user2851974

0

$presence = $result==1?true:false; 
0

당신이 하나 개의 쿼리

'UPDATE personnel SET Present = IF (Present, 0, 1) WHERE Inlogcode="'.$id.'"' 

마음으로 부울을 전환 할 수보십시오 "." 문자열과 변수 사이. 코드에서 올바르게 수행하지 않았습니다.

+0

IF가 필요하지 않습니다. –

+1

IF가 작동하지 않아도됩니다. 그러나 이것이 내가 시도해보고 작동하는 첫 번째 해결책이었습니다. – user2851974

관련 문제