Jeg har et forum: http://www.123y.dk/falkobilleder/forum/index.php , som jeg synes er alletiders. Men nu vil jeg gerne have et forum, hvor ulæste beskeder vises først. Det må skam gerne være et helt andet script I har fundet ude på nettet, bare det er et trådforum i stil med det nævnte.
Jeg er mere eller mindre PHP-dummie og har brug for hjælp, og det vil jeg gerne betale points for, så ikke noget med: "Det er pære let, du skal bare lave noget a la...."! - Det har jeg dårlig erfaring med.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Så skal vi jo vide lidt om hvordan din database er sammensat. Evt hvordan din forum-tabel er bygget. Og hvad mener du med ulæste beskeder i toppen? En tråd hvor der ikke er skrevet indlæg til endnu? Eller snakker vi en tråd som den enkelte bruger ikke har læst endnu? (og du måske bruger noget login/brugersystem?)
Det skal være dem den enkelte bruger ikke har læst endnu, men der er ikke noget brugerlogin. Det er ligesom i nogle forums hvor der kommer et mærke ud for de ulæste tråde.
Hvis ikke du vil have et brugersystem, så skal det jo laves i en cookie. Du kunne evt lave noget i stil med: Når en bruger besøger din side, så gemmer du en cookie med tidspunktet lige nu. Når brugeren så kommer næste gang, så tjekker du cookie, og viser alle tråde nyere end tidspunktet fra cookien øverst. Eller markere dem med et lille ikon.
$query = mysql_query("SELECT *,DATE_FORMAT(date,'%e/%c-%y %T') AS date FROM sladder WHERE parent=$id ORDER BY id ASC"); while ($row = mysql_fetch_assoc($query)) { echo empty($row['email']) ? $row['name'] : "<a href='mailto:$row[email]'>$row[name]</a>"; echo " ($row[date])<br><br>"; echo nl2br($row['message']).'<hr>'; } ?>
if ($_POST['prfm'] == 'new') { $header = strip_tags($_POST['header']); if (!empty($header) && !empty($name) && !empty($message)) { mysql_query("INSERT INTO sladder VALUES ('','$header','$name','$email',now(),'$message','')") or die(mysql_error()); $id = mysql_insert_id(); header("Location: laes.php?id=$id"); } else { echo '<font color="red">Alle felter er ikke udfyldt!</font>'; } } if ($_POST['prfm'] == 'comment') { $parent = $_POST['parent']; if (!empty($name) && !empty($message)) { mysql_query("INSERT INTO sladder VALUES ('','','$name','$email',now(),'$message','$parent')") or die(mysql_error()); header("Location: laes.php?id=$parent"); } else { echo '<font color="red">Alle felter er ikke udfyldt!</font>'; } } ?>
soeg.php:
<td width="740" height="460"><font face="Verdana, Arial, Helvetica, sans-serif"><h1>Søg efter tråd</h1>
Her kan søges efter tråde i sladder-forummet. Der søges i overskrift og tekst i de oprettede tråde; dog ikke i de tilhørende kommentarer. Hvis du ikke indtaster et søgeord vil alle resultater blive vist!<br> <br>
//Sætter cookie næsten et år... setcookie("TimeCookie", time(), time()+60*60*24*30*12, "/", ".ditdomain.dk");
include('config.php'); $query = mysql_query("SELECT id,header,name,DATE_FORMAT(date,'%e/%c-%y %T') AS date FROM sladder WHERE parent=0 ORDER BY id DESC LIMIT $offset,$range") or die(mysql_error()); if (mysql_num_rows($query) == 0) { echo 'Der er ingen tråde i forummet!<br>'; } else { echo '<table width="50%" id="list"><tr>'; echo '<th width="40%">Overskrift</th><th width="30%">Forfatter</th><th width="30%">Dato</th><th>Indlæg</th>'; echo '</tr>';
while($row = mysql_fetch_assoc($query)) { echo '<tr>'; echo "<td width='40%'><a href='laes.php?id=$row[id]'>$row[header]</a></td>"; echo '<td width="30%">'.$row['name'].'</td>'; echo '<td width="30%">'.$row['date'].'</td>'; echo '<td>'.mysql_result(mysql_query("SELECT COUNT(*) FROM sladder WHERE parent=$row[id]"),0).''; $query = mysql_query("SELECT UNIX_TIMESTAMP(date) AS unix FROM sladder WHERE parent=$row[id] OR id=$row[id] ORDER BY date LIMIT 1"); $row2 = mysql_fetch_assoc($query);
Jeg kan desværre ikke teste det lige nu, da jeg ikke er ved min ftp-server, men jeg kan se at jeg dummede mig lidt. Som du måske har lagt mærke til var jeg ved at lave det med at den skriver "NY!" ud for de nye beskeder. Det er jo det jeg vil droppe, til fordel for det system der lægger de tråde med nyeste indlæg i toppen.
Det med at sortere så nyeste altid er øverst, det bliver noget ged. Man kan ikke lave det i en pæn query. Hvilken version bruger du af MYSQL? Man kan muligvis lave noget rigtigt slamkode, som så trækker data ud og bygger det hele op i et array. Måske man kunne lave det med subqueries. Mon ikke Arne_V kunne klare den opgave? Prøv evt at stil spørgsmålet i mysql-sektionen!
No no no no no no.. nu bliver det bare alt for avanceret. Vi må lige klappe hesten engang. - Det jeg forestillede mig, var lidt ligesom en SMS-indbakke, hvor ulæste beskeder altid er øverst, og tydeligt markeret som ulæste. Men skide være med det, så..
Så prøv istedet at lave så den skriver "NY!" med rød skrift ud for en tråd med et nyt indlæg i. Det vigtige er at folk lynhurtigt kan se, hvor der er noget nyt!
//Sætter cookie næsten et år... setcookie("TimeCookie", time(), time()+60*60*24*30*12, "/", ".ditdomain.dk");
include('config.php'); $query = mysql_query("SELECT id,header,name,DATE_FORMAT(date,'%e/%c-%y %T') AS date FROM sladder WHERE parent=0 ORDER BY id DESC LIMIT $offset,$range") or die(mysql_error()); if (mysql_num_rows($query) == 0) { echo 'Der er ingen tråde i forummet!<br>'; } else { echo '<table width="50%" id="list"><tr>'; echo '<th width="40%">Overskrift</th><th width="30%">Forfatter</th><th width="30%">Dato</th><th>Indlæg</th>'; echo '</tr>';
while($row = mysql_fetch_assoc($query)) { echo '<tr>'; echo "<td width='40%'><a href='laes.php?id=$row[id]'>$row[header]</a></td>"; echo '<td width="30%">'.$row['name'].'</td>'; echo '<td width="30%">'.$row['date'].'</td>'; echo '<td>'.mysql_result(mysql_query("SELECT COUNT(*) FROM sladder WHERE parent=$row[id]"),0).''; $query = mysql_query("SELECT UNIX_TIMESTAMP(date) AS unix FROM sladder WHERE parent=$row[id] OR id=$row[id] ORDER BY date LIMIT 1"); $row2 = mysql_fetch_assoc($query);
if ($antal > $offset+$range) { $naeste = $offset+$range; echo "<a href='?offset=$naeste'>Næste</a> "; } else { echo 'Næste '; } ?> </font> </p> <hr> <p><font face="Verdana, Arial, Helvetica, sans-serif"><a href="opret.php">Opret tråd</a> | <a href="soeg.php">Søg efter tråd</a> </font> </td> </p> <p><font color="#999999" size="2" face="Verdana, Arial, Helvetica, sans-serif">Generelt slettes ingen indlæg, men i helt specielle tilfælde(gentagende, hadefulde indlæg mod enkeltpersoner, racisme osv.) kan det alligevel komme på tale. Falkobilleder.dk kan ikke holdes ansvarlig, hvis der opstår utilfredshed med indholdet af enkelte indlæg. Indlæg som indeholder reklamer for andre hjemmesider eller reklame generelt vil blive slettet uden varsel.</font></p> </div> </body> </html>
Men jeg får fejlen: Parse error: parse error, unexpected $ in /customers/123y.dk/123y.dk/httpd.www/falkobilleder/forum/index.php on line 100
Det begynder at ligne noget. Den første tråd vises, men ovenover får jeg fejlen: Warning: Cannot modify header information - headers already sent by (output started at /customers/123y.dk/123y.dk/httpd.www/falkobilleder/forum/index.php:11) in /customers/123y.dk/123y.dk/httpd.www/falkobilleder/forum/index.php on line 27
Kan du ikke flytte dette: $lastVisit = $_COOKIE["TimeCookie"];
//Sætter cookie næsten et år... setcookie("TimeCookie", time(), time()+60*60*24*30*12, "/", ".ditdomain.dk"); op til toppen: så det bliver: <? $lastVisit = $_COOKIE["TimeCookie"];
//Sætter cookie næsten et år... setcookie("TimeCookie", time(), time()+60*60*24*30*12, "/", ".ditdomain.dk"); ?> <html> <head>
Ret lige: $query = mysql_query("SELECT UNIX_TIMESTAMP(date) AS unix FROM sladder WHERE parent=$row[id] OR id=$row[id] ORDER BY date LIMIT 1"); $row2 = mysql_fetch_assoc($query);
til:
$query2 = mysql_query("SELECT UNIX_TIMESTAMP(date) AS unix FROM sladder WHERE parent=$row[id] OR id=$row[id] ORDER BY date LIMIT 1"); $row2 = mysql_fetch_assoc($query2);
For fanden da også! :o) Du skal rette: setcookie("TimeCookie", time(), time()+60*60*24*30*12, "/", ".ditdomain.dk"); til: setcookie("TimeCookie", time(), time()+60*60*24*30*12, "/", ".123y.dk");
Jeg sover! Det skal være: echo "Unix: " . $row2['unix'] . "<br>"; og echo "LastVisit: " . $lastVisit . "<br>";
og sæt det efter: $query2 = mysql_query("SELECT UNIX_TIMESTAMP(date) AS unix FROM sladder WHERE parent=$row[id] OR id=$row[id] ORDER BY date LIMIT 1"); $row2 = mysql_fetch_assoc($query2);
Prøv at lav: show_source(__FILE__); i bunden af siden. Så kan jeg se hvilken kode du bruger på pågældende side. PT aner jeg ikke om du arbejder på alt hvad jeg har givet dig, halvdelen eller intet.
Og nu jeg tænker over det. Så er det med cookien en crap løsning. Bruger kommer til siden første gang! Cookie er ikke sat. Alle tråde viser ny! Så åbner han en tråd, læser den. Går tilbage igen (nu henter den ny cookie) og så kan man ikke se flere NY-tags.
Husk så at ændre $lastVisit til $_SESSION['lastVisit']
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.