PHP: хранение двух совпадающих элементов в массиве данных из MySQL - PullRequest
0 голосов
/ 10 января 2009
$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.";
}

Приведенный выше код корректно представляет мне все записи, найденные с помощью $ taleTable_Name, но представляет только последнюю переменную $ postid, когда я печатаю $ newpost. Я хочу, чтобы идентификатор ($ postid соответствовал имени таблицы ($ taleTable_Name), чтобы созданный URL-адрес действительно направлялся на правильный форум.

Ответы [ 3 ]

3 голосов
/ 10 января 2009

Во-первых, я понятия не имею, что означают имена ваших переменных. Я пытался угадать, но вы должны посмотреть на переименование их. Чтобы сохранить здравомыслие вашего программиста обслуживания.

Глядя на ваш код, я знаю, что он делает, но я понятия не имею, что он должен делать и почему. Ниже приведена попытка переименовать имена переменных, но я понятия не имею, является ли оно правильным или близким к правому:


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

Что означают следующие переменные? : $xs, $c, &i, &t и $fc? Это должны быть значимые имена. Я переименовал другие ваши переменные, но по ним я только догадался. Я мог бы быть далеко. Значимые имена переменных способствуют тому, чтобы кто-то читал код, у которого нет комментариев. Как бы то ни было, если у вас были значимые имена переменных, мне могут не понадобиться комментарии - хотя, что делает магическое число из '20'? Что такого значимого в этом числе?

0 голосов
/ 20 января 2009

Как насчет?

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.";
}
0 голосов
/ 10 января 2009

Одна вещь, которую я заметил в вашем коде, это то, что нигде не печатается $ newpost. Перед завершением цикла for необходимо что-то сделать с $ newpost. В этом случае вы просто выбрасываете результат каждый раз (или, точнее, перезаписываете его). Вам нужно что-то сделать с $ newpost (распечатать, сохранить в другом значении, отправить обратно в браузер и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...