2009-08-08 23 views
1

私は関数を書くのを助けます。PHP/SQL help with function

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>"; 

} 

私がachiveたいのは= is_checked 0を持つテーブル内のユーザレポートは、私はそれが他のエラーを言いたいというURL theresのであれば、私はそれを挿入したいということです!

これは私にとっては役に立ちません。常に挿入されます。

レポート:(デフォルト0)is_checked
ID、URL、ユーザーID

私はレコードを持っている...

答えて

3

を今あなたはコードが何をしたいの反対をあるif ($r['is_checked'] == 0を、挿入されている、:is_checkedはこれを試してみてください0に等しい場合、そのコードが挿入されます。しかしそれが唯一の問題ではありません。

また、同一性演算子(===)ではなく、等価演算子(==)を使用しています。

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列の代わりに集計関数を単独で使用すると、クエリは常に1行を返し、常に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から脱出して、JavaScriptを出力して(スクリプトタグから余分なエコーを除去する必要があると仮定して)、警告を入力する必要のあるPHPを起動すると仮定しています。