Fonksiyonu ile PHP / SQL yardımı

3 Cevap php

Benim yazmak bir işlev Yardım.

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

}

Ne başarmak istiyorum is_checked = 0 ile tablodaki kullanıcı raporlarını i başka hatayı söylemek istediğiniz bir URL gidecekseniz eğer i eklemek istiyorum ki!

Bu benim için çalışmaz. Her zaman eklemek gelmez.

reports:
id, url, is_checked(default 0), userID

i kayıtları var ...

3 Cevap

Şu anda, kod ne istediğinizi tam tersi olan, if ($r['is_checked'] == 0) takmadan konum. Ama tek sorun bu değil.

Ayrıca (==) yerine kimlik operatörün eşitlik operatörünü kullanarak (===).

PHP, 0 falsy değerdir. Bu şekilde aşağıdaki gibidir:

  • "" (boş dize)
  • 0 (bir tamsayı olarak 0)
  • "0" (bir dizge olarak 0)
  • NULL
  • FALSE
  • array() (boş bir dizi)
  • var $var; (bir değişken bildirilmiş, ancak bir sınıfta bir değeri olmayan)

Yani hiçbir sonuç varsa (neden olacak bir NULL) veya is_checked bu değerlerin herhangi eşitlik operatörünü kullanarak karşılaştırma doğrudur yapacak olan.

PHP: Comparison Operators

Değer gibi, 0 gerçekten eşitse Gerçekten ne yapmak istediğinizi kontrol edilir:

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

Bunu yapıyorsun çünkü Ama, neden, doğrudan sorguda operasyon yapmak değil mi?

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

Sizin mantık çarpık olduğunu. is_checked 0'a eşit ise bu kod ekler bu deneyin.:

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

Sorgu bir boolean operatörü olarak hareket etmek için istediğiniz tüm olup olmadığını tamamen satırların sayısını kontrol etmek için ihtiyacını ortadan kaldırabilir. Yerine tek başına is_checked kolonun bir toplama işlevi ve sorgu her zaman tek bir satır döndürür ve her zaman en az 0 olacağı şekilde kullanın. Ve is_checked sütunu kaldırırsanız ve user_id kolonu (ihtiyacınız olduğunda sadece başka bir sorguda bu çıkışı) bir url parçası kaldırmak, çok hafif bir şey olsun:

Örnek:

<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.";
 }
 ?>
 ");

Yukarıdaki örnekte zaten (böylece komut dosyası etiketleri dışında gereksiz yankı için ihtiyacını ortadan kaldırarak), ve o zaman sadece uyarı doldurulması gereken php başlatmak çıktı, PHP üzerinden javascript kaçtığını varsayar dikkat edin