Для нижеприведенной функции я хотел бы, чтобы ссылка <div class="footervote"><a href="http://www...com/.../footervote.php">Vote</a></div>
отображалась только в том случае, если в настоящее время зарегистрированный пользователь появляется на editorlist.php. (I. e. Если loginid
в функции соответствует любому из username
, который в настоящее время отображается в editorlist.php.)
Появление на editorlist.php является динамическим.
Как я могу это сделать?
Спасибо заранее,
Джон
function show_userbox()
{
// retrieve the session information
$u = $_SESSION['username'];
$uid = $_SESSION['loginid'];
// display the user box
echo '<div id="userbox">
<div class="username">'.$u.'</div>
<div class="submit"><a href="http://www...com/.../submit.php">Submit an item.</a></div>
<div class="changepassword"><a href="http://www...com/.../changepassword.php">Change Password</a></div>
<div class="logout"><a href="http://www...com/.../logout.php">Logout</a></div>
<div class="footervote"><a href="http://www...com/.../footervote.php">Vote</a></div>
</div>';
}
В редакторе .php:
$sqlStr = "SELECT
l.loginid,
l.username,
l.created,
DATEDIFF(NOW(), l.created) AS days,
COALESCE(s.total, 0) AS countSubmissions,
COALESCE(c.total, 0) AS countComments,
COALESCE(s.total, 0) * 10 + COALESCE(c.total, 0) AS totalScore,
DATEDIFF(NOW(), l.created) + COALESCE(s.total, 0) * 10 + COALESCE(c.total, 0) AS totalScore2
FROM login l
LEFT JOIN (
SELECT loginid, COUNT(1) AS total
FROM submission
GROUP BY loginid
) s ON l.loginid = s.loginid
LEFT JOIN (
SELECT loginid, COUNT(1) AS total
FROM comment
GROUP BY loginid
) c ON l.loginid = c.loginid
GROUP BY l.loginid
ORDER BY totalScore2 DESC
LIMIT 10";
$result = mysql_query($sqlStr);
$arr = array();
echo "<table class=\"samplesrec1edit\">";
while ($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td class="sitename1edit1"><a href="http://www...com/.../members/index.php?profile='.$row["username"].'">'.stripslashes($row["username"]).'</a></td>';
echo '<td class="sitename1edit2">'.($row["countSubmissions"]).'</td>';
echo '<td class="sitename1edit2">'.($row["countComments"]).'</td>';
echo '<td class="sitename1edit2">'.($row["days"]).'</td>';
echo '<td class="sitename1edit2">'.($row["totalScore2"]).'</td>';
echo '</tr>';
}
echo "</table>";
Если пользователь указан как редактор на всем сайте, я бы рекомендовал установить переменную $_SESSION[]
для записи, является ли Пользователь редактором или нет, в то же время, когда вы обрабатываете свой логин.
В случае, если Редакторы ограничены в отношении того, что они контролируют, возможно, установка переменной сеанса в массив элементов, которые они могут редактировать, может быть вариантом.
Просто подумайте - проверьте один раз и помните, а не проверяйте каждый. Один. время.
Вы можете попробовать запустить SQL-запрос из editorlist.php
, чтобы определить, находится ли пользователь в списке, вместо того, чтобы пытаться извлекать данные из самой страницы editorlist.php
.
Я бы сделал ваш редактор sql более управляемым, например:
function getEditors($editor = false) {
$sqlStr = "SELECT l.loginid, l.username, l.created,
DATEDIFF(NOW(), l.created) AS days, COALESCE(s.total, 0) AS countSubmissions,
COALESCE(c.total, 0) AS countComments, COALESCE(s.total, 0) * 10 + COALESCE(c.total, 0) AS totalScore, DATEDIFF(NOW(), l.created) + COALESCE(s.total, 0) * 10 + COALESCE(c.total, 0) AS totalScore2
FROM login l LEFT JOIN (
SELECT loginid, COUNT(1) AS total FROM submission
GROUP BY loginid) s ON l.loginid = s.loginid LEFT JOIN ( SELECT loginid, COUNT(1) AS total
FROM comment GROUP BY loginid ) c ON l.loginid = c.loginid ";
if( $editor !== false ) { //if we specified an editor, find it
$sqlStr .= " WHERE `l.loginid` = '" . $editor . "'";
}
$sqlStr .= "GROUP BY l.loginid
ORDER BY totalScore2 DESC
LIMIT 10";
$result = mysql_query($sqlStr);
if( $editor !== false) { // if we specified an editor, return that editor or false
if( $row = mysql_fetch_assoc($result)) {
return $row;
}
return false;
}else { // otherwise, return the array of editors
$editors = array();
while( $row = mysql_fetch_assoc($result)) {
$editors[] = $row;
}
return $editors;
}
}
и таким образом для вашего editorlist.php вы могли бы сделать
$editors = getEditors();
foreach( $editors as $editors ) {
// echo your table row like you were doing
}
и в show_userbox() вы можете сделать
$editor = getEditors(12);
if( $editor ) {
// echo your vote html stuff
}
Я не говорю об этом неявно.. но я думаю, что это даст вам правильную идею о том, куда перейти от..