2009-08-08 4 views
1

도움말 내 기능을 작성하십시오.함수가있는 PHP/SQL 도움말

function reportThread() { 
global $id; 

$result = mysql_query("SELECT is_checked FROM reports WHERE url = '?threadID=$id'"); 
$r = mysql_fetch_assoc($result); 

if ($r['is_checked'] == 0) { 

echo "<script type=\"text/javascript\">alert(\"A moderator has been notified.\");</script>"; 

mysql_query("INSERT INTO reports (url, userID) VALUES ('?threadID=$id', 1)"); 

} else echo "<script type=\"text/javascript\">alert(\"Theres already a pending report on this thread.\");</script>"; 

} 

내가 실현하려 싶은 = is_checked 0 표에서 사용자의 보고서가 내가 그것을 다른 오류를 말하고 싶은있는 URL 프로그래머의 경우 내가 그것을 삽입 할 것입니다!

이것은 나를 위해 작동하지 않습니다. 항상 삽입됩니다.

보고서 :
ID, URL is_checked (기본값 0), 사용자 ID 난 기록이

...

답변

3

을 지금 당신이 코드는 당신이 원하는 것과 반대입니다 if ($r['is_checked'] == 0)를, 삽입되어있어, : is_checked이 시도 0에 동일한 경우는 그 코드를 삽입합니다. 그러나 이것이 유일한 문제는 아닙니다.

또한 ID 연산자 (===) 대신 항등 연산자 (==)를 사용하고 있습니다.

PHP에서 0은 위변조 값입니다. 그래서 다음과 같습니다 :

  • "" (문자열로 0) (정수로 0) (빈 문자열)
  • 0
  • "0"
  • NULL
  • FALSE
  • array() (빈 배열)
  • var $var; (변수 de clared하지만, 그래서 어떤 결과가없는 경우

) 클래스에 값없이 (당신의 비교가 진실하게됩니다 항등 연산자를 사용하여 NULL) 또는 is_checked 그 값 중 하나입니다 원인이됩니다.

PHP: Comparison Operators

당신이 정말 값이 0 정말 동일한 경우와 같은, 확인되고 싶지 :

if (strval($r['is_checked']) !== '0') { 
    echo "<script type=\"text/javascript\">alert(\"A moderator has been notified.\");</script>"; 
    mysql_query("INSERT INTO reports (url, userID) VALUES ('?threadID=$id', 1)"); 
} else { 
    echo "<script type=\"text/javascript\">alert(\"Theres already a pending report on this thread.\");</script>"; 
} 

을하지만 당신은 그 일을하고 있기 때문에, 왜하지 귀하의 쿼리에서 직접 작업?

$result = mysql_query("SELECT is_checked FROM reports WHERE url = '?threadID=$id' AND is_checked = '0'"); 

// No Result? Continue 
if(mysql_num_rows($result) === 0) { 
    echo "<script type=\"text/javascript\">alert(\"A moderator has been notified.\");</script>"; 
    mysql_query("INSERT INTO reports (url, userID) VALUES ('?threadID=$id', 1)"); 
} else { 
    echo "<script type=\"text/javascript\">alert(\"Theres already a pending report on this thread.\");</script>"; 
} 
+0

대단히 감사합니다! –

0

당신의 논리가 비스듬히이다.

function reportThread() { 
global $id; 

$result = mysql_query("SELECT is_checked FROM reports WHERE url = '?threadID=$id'"); 
$r = mysql_fetch_assoc($result); 

if ($r['is_checked'] == 0) 
{ 
    echo "<script type=\"text/javascript\">alert(\"Theres already a pending report on this thread.\");</script>"; 
} 
else 
{ 
    mysql_query("INSERT INTO reports (url, userID) VALUES ('?threadID=$id', 1)"); 
    echo "<script type=\"text/javascript\">alert(\"A moderator has been notified.\");</script>"; 
} 
0

원하는 모든 것이 쿼리가 부울 연산자로 작동하는 것이면 행 수를 확인할 필요가 없습니다. is_checked 열 대신에 집계 함수 만 사용하면 쿼리가 항상 단일 행을 반환하며 항상 0 이상이됩니다.

예 :

<script type="text/javascript"> 
alert(" 
<?php 
$results = mysql_query("SELECT COUNT(threadID) AS counter FROM reports 
      WHERE threadID = '$id'"); 

while($count = mysql_fetch_assoc($results)) { 
     $checked = ($count > 0) ? TRUE : FALSE; 
} 

if($checked) { 
    echo "There is already a pending report on this thread."; 
} 
else { 
    mysql_query("INSERT INTO reports (threadID, userID) VALUES ('$id', 1)"); 
    echo "Theres already a pending report on this thread."; 
} 
?> 
"); 

공지하고 is_checked 열을 제거하고 user_id 컬럼의 URL 부분을 제거하면 (당신이 그것을 필요로 다른 쿼리에서 해당 출력이), 당신은 훨씬 가볍고 뭔가를 얻을 수 위 예제는 이미 PHP에서 벗어났다 고 가정하고 자바 스크립트를 출력하므로 (스크립트 태그에서 여분의 에코를 제거 할 필요가 없음) 경고를 입력해야하는 PHP를 시작하면됩니다.

관련 문제