PHP: MySQL veri bir dizi iki uygun ürün Holding

3 Cevap php
$story_query = "SELECT table_name, id FROM planning WHERE parent = '$novelnum'";
$story_result = db_query($story_query);
while($story_row = db_fetch_array($story_result)) {
    $taleTable_Name = $story_row['table_name'];
    $postid[] = $story_row['id'];

    $q2 = "Select * from $taleTable_Name where approved='Y' order by id";
    $bset2 = db_query($q2);
    while($rset2 = db_fetch_array($bset2)) {
        $i[] = $rset2['id'];
        $t[] = $rset2['thread'];
        $s[] = $rset2['subject'];
        $a[] = $rset2['author'];
        $d[] = $rset2['datestamp'];

    }
}

if(isset($d)) {
    $fc = count($d);
    if($fc > 20) {
        $xs = $fc - 20;
    }
    else {
        $xs = 0;
    }

    for($c=$xs;$c<$fc;$c++) {
        if($s[$c] != "") {
            $newpost .= $d[$c];
            $newpost .= " <a href='../forums/read.php?f=";
            $newpost .= end($postid);
            $newpost .= "&i=";
            $newpost .= $i[$c];
            $newpost .= "&t=";
            $newpost .= $t[$c];
            $newpost .= "'>" ;
            $newpost .= $s[$c];
            $newpost .= "</a> by "; 
            $newpost .= $a[$c];
            $newpost .= $taleTable_Name;
            $newpost .= "<br>\n";
        }
    }
}
else {
    $newpost = "There are no posts for this scroll yet.";
}

Yukarıdaki kod doğru $ taleTable_Name ile bulunan tüm kayıtları ile bana sunuyor, ama $ newpost yazdırırken sadece $ POSTID son değişken sunar. Ben oluşturulan url aslında doğru forumda gider böylece id ($ ID'si Tablo_ismi ($ taleTable_Name) maç istiyorum.

3 Cevap

Öncelikle, ben senin değişken isimleri ne anlama geldiğini hiçbir fikrim yok. Ben sezgiye dayalı tahmin denedim, ama sen bunları yeniden adlandırma içine bakmak gerekir. Lütfen bakım programcı aklı tutmak için.

Kodu baktığımızda, ben ne yaptığını biliyorum, ama ben hayır yapmak gerekiyordu ne bir fikir, ya da neden var. Aşağıda değişken adlarını yeniden adlandırmak için bir girişim, ama bunu bile doğru veya sağa yakın ise hiçbir fikrim yok:


$story_query = "SELECT table_name, id FROM planning WHERE parent = '$novelnum'";
$story_result = db_query($story_query);
while($story_row = db_fetch_array($story_result)) {
    $taleTable_Name = $story_row['table_name'];
    $postid[] = $story_row['id'];

    $query2 = "Select * from $taleTable_Name where approved='Y' order by id";
    $bset2 = db_query($query2);
    while($rowset2 = db_fetch_array($bset2)) {
        $id[] = $rowset2['id'];
        $thread[] = $rowset2['thread'];
        $subject[] = $rowset2['subject'];
        $author[] = $rowset2['author'];
        $datetime[] = $rowset2['datestamp'];

    }
}

if(isset($datetime)) {
    $forumcount = count($datetime);
    if($forumcount > 20) {
        $xs = $forumcount - 20;
    }
    else {
        $xs = 0;
    }

    for($postnum=$xs;$postnum<$forumcount;$postnum++) {
        if($subject[$postnum] != "") {
            $newpost .= $datetime[$postnum];
            $newpost .= " <a href='../forums/read.php?f=";
            $newpost .= end($postid);
            $newpost .= "&id=";
            $newpost .= $id[$postnum];
            $newpost .= "&thread=";
            $newpost .= $thread[$postnum];
            $newpost .= "'>" ;
            $newpost .= $subject[$postnum];
            $newpost .= "</a> by "; 
            $newpost .= $author[$postnum];
            $newpost .= $taleTable_Name;
            $newpost .= "<br>\n";
        }
    }
}
else {
    $newpost = "There are no posts for this scroll yet.";
}


Aşağıdaki değişkenleri ne anlama geliyor? : $xs, $c, &i, &t ve $fc? Bu anlamlı isimler olmalı. Ben diğer değişkenleri adını ettik, ama bunlar için sadece tahmin. Ben kapalı bir yol olabilir. Anlamlı değişken isimleri birisi yorumu bulunmamaktadır kod okumak yardımcı olmak için uzun bir yol. Olduğu gibi size anlamlı değişken isimleri, I may not need comments olsaydı, - magic number ''20 arasında ne yapıyor, gerçi? Ne bu sayı hakkında bu kadar anlamlıdır?

Ben kodu hakkında fark bir şey hiçbir yerde $ newpost yazdırılır olmasıdır. Arasında sonundan önce döngü için, bir şey $ newpost ile yapılması gerekir. Bu durumda, sadece (üzerine yazmak, daha doğrusu) bir sonuç her zaman atmadan ediyoruz. Sen (vb, tarayıcıya geri göndermek, başka bir değer depolamak, yazdırmak) $ newpost ile bir şeyler yapmak gerekiyor.

Ne dersiniz?

unset($post); // ensure start afresh

$story_query = "SELECT table_name, id FROM planning WHERE parent = '$novelnum'";
$story_result = db_query($story_query);
while($story_row = db_fetch_array($story_result)) {
    $taleTable_Name = $story_row['table_name'];
    $postid         = $story_row['id'];

    $q2 = "Select * from $taleTable_Name where approved='Y' order by id";
    $bset2 = db_query($q2);
    while($rset2 = db_fetch_array($bset2)) {
        $post[$postid] = $rset2;
    }
}

if(isset($post)) {
    /***
     * Page control here    
     ****/

    foreach($post as $id => $msg) {
        if($row['subject'] != "") {
            $newpost .= $msg['datestamp'];
            $newpost .= " <a href='../forums/read.php?f=";
            $newpost .= $id;
            $newpost .= "&i=".$msg['id'];
            $newpost .= "&t=".$msg['thread'];
            $newpost .= "'>" ;
            $newpost .= $msg['subject'];
            $newpost .= "</a> by "; 
            $newpost .= $msg['author'];
            $newpost .= $taleTable_Name;
            $newpost .= "<br>\n";
        }
    }
}
else {
    $newpost = "There are no posts for this scroll yet.";
}