Sortering af posts i et lille nyhedssystem?
Jeg har et nyhedssystem, som jeg gerne vil have til at bytte om på rækkefølgen af posts der bliver postet. Altså som det er nu, er den nyeste nyhed øverst, men jeg vil have den nederst!Jeg har ændret alle "DESC" til "ASC" i forhåbning om at det var nok, men det ændrede intet ... Koden ser således ud - hvad skal jeg gøre?:
<?
error_reporting(E_ALL ^ E_NOTICE);
// CONFIG
$ppp = 4; // posts per page
$adminname = "xxx";
$adminpwd = "xxx";
$adminexpire = 5*60; // time until relogin
$wrap = 40; // max wordlength
// language setttings
$txtsign = "add news"; // menu item text
$txtview = "view news"; // menu item text
$txtadmin = "admin"; // menu item text
$txtbadtitle = "missing title";
$txtbadstory = "missing story";
$txtclickback = "Click BACK in your browser!";
$txterrors = "Following errors occurred:";
$txtedit = "edit";
$txtdelete = "delete";
$txtoptional = "optional";
// STYLE DEFs
?>
<style type="text/css">
<!--
.smtxt, .smtxt a {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
color: #163968;
}
.smsmall, .smsmall a {
font-size: 9px;
letter-spacing: 0px;
}
-->
</style>
<?
// misc variables
$dir=substr(__FILE__, 0, strrpos(__FILE__, "/")+1);
$dat=$dir."data.dat";
$template=$dir."template.inc.php";
$log=$dir."log.dat.php";
$badwords=explode(",", $badwords);
$me= $_SERVER['PHP_SELF'];
$empty=false;
$now=time();
$version="v1.0";
if (!isset($_GET['hash']) || $_GET['hash']=="") {
srand($now);
for ($i=0; $i<16 ; $i++) $secret.=chr(rand(60, 127));
$secret=md5($secret);
$hash=md5($_SERVER['HTTP_USER_AGENT'].$now.$secret);
}else $hash= $_GET['hash'];
$getvars="?hash=$hash";
if (isset($_REQUEST['do'])) $do=$_REQUEST['do'];
if (isset($_REQUEST['id'])) $id=$_REQUEST['id'];
if (isset($_REQUEST['action'])) $action=$_REQUEST['action'];
if (isset($_REQUEST['title'])) $title=$_REQUEST['title'];
if (isset($_REQUEST['name'])) $name=$_REQUEST['name'];
if (isset($_REQUEST['pwd'])) $pwd=$_REQUEST['pwd'];
if (isset($_REQUEST['email'])) $email=$_REQUEST['email'];
if (isset($_REQUEST['www'])) $www=$_REQUEST['www'];
if (isset($_REQUEST['story'])) $story=$_REQUEST['story'];
if (isset($_REQUEST['time'])) $time=$_REQUEST['time'];
if (isset($_REQUEST['from'])) $from=$_REQUEST['from']; else $from=1;
// functions
class mdasort {
var $data;
var $sortkeys;
function _sortcmp($a, $b, $i=0) {
$r = strnatcmp($a[$this->sortkeys[$i][0]],$b[$this->sortkeys[$i][0]]);
if ($this->sortkeys[$i][1] == "ASC") $r = $r * -1;
if($r==0) {
$i++;
if ($this->sortkeys[$i]) $r = $this->_sortcmp($a, $b, $i);
}
return $r;
}
function msort() {
if(count($this->sortkeys)) {
usort($this->data,array($this,"_sortcmp"));
}
}
}
function getkey($index, $stuff){
foreach ($stuff->data as $key => $item){
if ($item['id']==$index){
$ret=$key;
break;
}
}
return $ret;
}
function validemail($addr){
return eregi("^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,4}$", $addr);
}
function clearoldadmins() {
global $log, $now, $adminexpire;
include($log);
if (count($admins)>0){
$i=0;
$fp=fopen($log, "w");
fputs($fp, "<?\n");
foreach ($admins as $line){
if ($now-$line['time']<$adminexpire)
fputs($fp, "\$admins[$i]['time']=".$line[time]."; \$admins[$i]['hash']='".$line['hash']."';\n");
$i++;
}
fputs($fp, "?>");
fclose($fp);
}
}
function saveposts($stuff){
global $dat;
$fp=fopen($dat, "w");
foreach ($stuff as $item){
$line=$item['id']."|".$item['time']."|".$item['title']."|".$item['story']."\n";
fputs($fp, $line);
}
fclose($fp);
}
function isloggedin() {
global $log, $now, $adminexpire;
include($log);
$logged=false;
if (count($admins)>0){
foreach ($admins as $line){
if ($line['hash']==md5($_GET['hash'])) $logged=true;
}
}
return $logged;
}
function showmenu() {
global $txtsign, $txtview, $txtadmin, $me, $getvars;
echo "<div class='smtxt' style='margin-bottom:8px;'><a href='$me$getvars&do=add'>$txtsign</a> :: <a href='$me$getvars&do=view'>$txtview</a></div>";
}
function emailencoder ($str){
for ($i=0; $i< strlen($str); $i++){
$n=rand(0,10);
if ($n>5) $foo.="&#".ord($str[$i]).";";
else $foo.="&#x".sprintf("%X", ord($str[$i])).";";
}
return $foo;
}
if (!function_exists('str_ireplace'))
{
function str_ireplace ($search, $replace, $subject, $count = null)
{
if (is_string($search) && is_array($replace)) {
trigger_error('Array to string conversion', E_USER_NOTICE);
$replace = (string) $replace;
}
if (!is_array($search)) {
$search = array ($search);
}
if (!is_array($replace))
{
$replace_string = $replace;
$replace = array ();
for ($i = 0, $c = count($search); $i < $c; $i++)
{
$replace[$i] = $replace_string;
}
}
$length_replace = count($replace);
$length_search = count($search);
if ($length_replace < $length_search)
{
for ($i = $length_replace; $i < $length_search; $i++)
{
$replace[$i] = '';
}
}
$was_array = false;
if (!is_array($subject)) {
$was_array = true;
$subject = array ($subject);
}
$count = 0;
foreach ($subject as $subject_key => $subject_value)
{
foreach ($search as $search_key => $search_value)
{
$segments = explode(strtolower($search_value), strtolower($subject_value));
$count += count($segments) - 1;
$pos = 0;
foreach ($segments as $segment_key => $segment_value)
{
$segments[$segment_key] = substr($subject_value, $pos, strlen($segment_value));
$pos += strlen($segment_value) + strlen($search_value);
}
$subject_value = implode($replace[$search_key], $segments);
}
$result[$subject_key] = $subject_value;
}
if ($was_array === true) {
return $result[0];
}
return $result;
}
}
// MAIN
// init
$foo=file($dat);
$stuff= new mdasort;
$stuff->sortkeys = array(array('time','ASC'));
if (count($foo)==0){
$empty=true;
$nextindex=1;
}else{
$i=0;
foreach ($foo as $line){
$line=explode("|", rtrim($line));
$stuff->data[$i] = array("id" => $line[0], "time" => $line[1], "title" => $line[2], "story" => $line[3]);
$i++;
}
$stuff->sortkeys = array(array('id','ASC'));
$stuff->msort();
$foo=current($stuff->data);
$nextindex=$foo['id']+1;
$stuff->sortkeys = array(array('time','ASC'));
$stuff->msort();
$numposts=count($stuff->data);
}
echo "\n\n<!-- start mynews $version -->\n\n";
echo "<table cellpadding='0' cellspacing='0' border='0'><tr><td align='center'>";
clearoldadmins();
// admin
if ($do=="admin") {
if ($action=="login"){
if ($name==$adminname && $pwd==$adminpwd){
include($log);
$fp=fopen($log, "w");
fputs($fp, "<?\n");
$i=0;
if (count($admins)>0){
foreach ($admins as $line){
fputs($fp, "\$admins[$i]['time']=".$line[time]."; \$admins[$i]['hash']='".$line['hash']."';\n");
$i++;
}
}
fputs($fp, "\$admins[$i]['time']=".$now."; \$admins[$i]['hash']='".md5($hash)."';\n?>");
fclose($fp);
echo "<meta http-equiv='refresh' content='0;URL=$me$getvars'>";
}
}
if ($action=="delete" && isloggedin()){
$todel=getkey($id, $stuff);
unset($stuff->data[$todel]);
$stuff->msort();
saveposts($stuff->data);
$do="view";
}else{
?>
<form action="<?=$me.$getvars?>" method="post" name="form2" class="smtxt">
<font color="1e0000" face="Verdana, Arial, Helvetica, sans-serif"> Admin Login<br>
<br>
</font>
<table border="0" cellpadding="0" cellspacing="0" class="smtxt">
<tr>
<td width="60"><font color="1e0000" face="Verdana, Arial, Helvetica, sans-serif">Login</font></td>
<td>
<input name="name" type="text" id="name" size="20">
</td></tr><tr>
<td width="60"><font color="1e0000" face="Verdana, Arial, Helvetica, sans-serif">Password</font></td>
<td><input name="pwd" type="password" id="pwd" size="20"></td>
</tr><tr>
<td width="60"> </td>
<td>
<input type="submit" name="Submit" value="Login">
<input name="do" type="hidden" id="do" value="admin">
<input name="action" type="hidden" id="action" value="login">
</td></tr></table>
</form>
<?
}
}
if (isloggedin()){
showmenu();
if ($do=="add"){
if ($action=="save"){
$error=false;
$saveit=false;
if ($title=="") $error.="<br>» $txtbadtitle";
if ($story=="") $error.="<br>» $txtbadstory";
if ($error===false){
if ($id=="new"){
$index=$numposts;
$id=$nextindex;
$time=$now;
$saveit=true;
}else if (is_numeric($id)){
$index=getkey($id, $stuff);
$saveit=true;
}
if ($saveit){
$stuff->data[$index]['id']=$id;
$stuff->data[$index]['time']=$time;
$stuff->data[$index]['title']=$title;
$stuff->data[$index]['story']=str_replace(array("\r", "\n"), array("", "<br>"), $story);
saveposts($stuff->data);
$stuff->msort();
$empty=false;
}
$do="view";
}else echo "<div class='smtxt' style='color:#cc0000;'><b>$txterrors</b>$error<br><br><i>$txtclickback</i></div>";
}else{
if ($action=="edit"){
$post=$stuff->data[getkey($id, $stuff)];
$title= html_entity_decode($post['title'], ENT_QUOTES);
$story=stripslashes(str_replace("<br>", "\n", html_entity_decode($post['story'], ENT_QUOTES)));
$time=$post['time'];
}else{
$title="";
$story="";
$time="notset";
$id="new";
}
?>
<form name="form1" method="post" action="<?=$me.$getvars?>">
<table border="0" cellpadding="4" cellspacing="0" class="smtxt">
<tr>
<td><font color="1e0000" face="Verdana, Arial, Helvetica, sans-serif">Title</font></td>
<td>
<input name="title" type="text" id="title" value="<?=$title?>" size="42" >
</td></tr>
<tr>
<td><font color="1e0000">Story</font></td>
<td>
<textarea name="story" cols="42" rows="5" id="story"><?=$story?></textarea>
</td></tr><tr><td> </td><td>
<input type="submit" name="Submit" value="Add">
<input name="do" type="hidden" id="do" value="add">
<input name="action" type="hidden" id="action" value="save">
<input name="time" type="hidden" id="time" value="<?=$time?>">
<input name="id" type="hidden" id="id" value="<?=$id?>">
</td></tr>
</table>
</form>
<?
}
}
}
// display posts
if ($do=="view" || !isset($do)){
if (!$empty){
$tpl=implode("", file($template));
$i=1;
foreach($stuff->data as $item){
if ($item['id']!=0 && $i>=$from && $i< ($from+$ppp) ){
if ($wrap!==false) $item['story']=wordwrap($item['story'], $wrap, " ", 1);
$match=array("{title}", "{time}", "{story}", "{edit}", "{delete}");
if (isloggedin()) $replace=array($item['title'], date("d. M Y H:i", $item['time']), stripslashes($item['story']), "<a href='$me$getvars&do=add&action=edit&id=".$item['id']."'>$txtedit</a>", "<a href='$me$getvars&do=admin&action=delete&id=".$item['id']."&from=$from'>$txtdelete</a>");
else $replace=array($item['title'], date("d. M Y H:i", $item['time']), stripslashes($item['story']), "", "");
$html.=str_replace($match, $replace, $tpl);
}
$i++;
}
echo $html;
$numpages=(fmod($numposts,$ppp)>0) ? floor($numposts/$ppp)+1 : ($numposts/$ppp);
echo "<div class='smtxt'>";
echo (($from>1) ? "<a href='$me$getvars&from=".(($from-$ppp<1)?1:$from-$ppp)."'>«««</a> " : "").(!(($from+$ppp>$numposts)) ? " <a href='$me$getvars&from=".($from+$ppp)."'>»»»</a>" : "");
echo "</div>";
}
}
// closing table tags
echo "</td></tr><tr class='smtxt'><td align='center' class='smsmall' height='20' valign='bottom'>";
if (!isloggedin()) echo "<a href='$me$getvars&do=admin'>$txtadmin</a> ";
echo "\n\n<!-- end mynews $version -->\n\n";
?>
