php acemi bir soru.

5 Cevap php

kontrol,

i bu tablo var

tablename: reports
id (AI)
content (varchar),
contentID (int),
checked (tinyint)

 if (isset($_GET['reportPost'])){

 $query = mysql_query("select * from reports where contentID = $_GET[reportPost]");
 $report = mysql_fetch_assoc($query);

 if (!mysql_num_rows($query) && $report['checked'] == 0) {
 echo 'There is already a pending report on this object.';
 } else {
 header("Refresh: 2; url=showthread.php?id=$id");
 echo '<div class="successMsg">Thanks for your report!</div>';
 mysql_query("insert into reports...");
 }

 }

Ne ben bu kod ile elde etmek istediğiniz gidecekseniz zaten contentID = $_GET[reportPost] ve olan raporlar halinde bir rekor checked = 0 I dont bu yürütmek istiyor. Yukarıdaki kod bunu alışkanlık.

Bazı yardım kadar appriciated :)

5 Cevap

  1. $_GET["reportPost"] should go outside of the string. I don't think PHP escapes that properly, and in any case it's bad practice even with simple variables. You probably want to do this:

    $query = mysql_query("select * from reports where contentID = '" . mysql_real_escape_string($_GET[reportPost]) . "';");
    Basic SQL injection protection thrown in for free :-)

  2. Eğer biz veri alıp VERMEDİ olmadığını doğrulamak için çalışıyor, ve sonra biz getirilecek NEDİR kontrol çalışıyorsunuz?

        if (!mysql_num_rows($query) && $report['checked'] == 0) {
    Bu doğru görünmüyor. Başkaları tarafından önerildiği gibi, değiştirin ya && ile | | (!), ya da olumsuzlama gitmek zorunda.

Ah, bu arada, ben PDO bir göz atın öneririz. Daha pratik ve daha kolay başka bir veritabanı backend'ine geçiş yapar

EDIT: I mysql_real_escape_string() tarafından oluşturulan dize tırnak eklemek unuttum. Ben $ db-> alıntı () ve parametrized sorguları bu automagically nerede yapılacak ben PDO tarafından şımarık sanırım ...

Denemelisiniz olabilir:

 if (mysql_num_rows($query) && $report[0]['checked'] == 0) {

?

Bazı kombinasyonu ...

$query = mysql\_query("select * from reports where contentID = $\_GET[reportPost] AND checked<>0");
$report = mysql\_fetch\_assoc($query);

if (!mysql_num_rows($query) || $report['checked'] == 0) {
    echo 'There is already a pending report on this object.';
} else {
   ...
}

| NEREDE ve ikinci fıkra fark | yerine &&

neden sadece:

$query = mysql_query("select * from reports where contentID = $_GET[reportPost] and checked = 0");
$report = mysql_fetch_assoc($query);

if (mysql_num_rows($query)) {
echo 'This object is already been reported but not dealt  with.';
} else {
....
}

Ben sql deyimi içine kontrol sizin koşulu eklemek istiyorum:

$query = mysql_query("select * from reports where contentID = '" . $_GET[reportPost] . "' AND checked = 0");

Onlar kontrol Şimdi eğer sadece sonuç kayıtlarını almak, bu nedenle yalnızca sorguya yanıt olarak satır sayısı için test etmek gerekir.

if (!mysql_num_rows($query)) {

Umarım bu yardımcı olur.