Laatste wijzigingsdatum i.p.v. laatste post datum
Forumregels
Sinds 1 januari 2009 wordt phpBB2 niet meer ondersteund.
Onderstaande informatie is verouderd en dient uitsluitend als archief.
Sinds 1 januari 2009 wordt phpBB2 niet meer ondersteund.
Onderstaande informatie is verouderd en dient uitsluitend als archief.

Laatste wijzigingsdatum i.p.v. laatste post datum
Standaard is het zo dat de datum <laatste bericht> alleen wordt aangepast wanneer er een bericht wordt toegevoegd.
Op mijn forum heb ik echter een aantal topics die gesloten zijn en waar ik zelf als administrator af en toe een regel aan toevoeg (bijv. soort van agenda).
Het zou mooi zijn als op dat moment de datum ook zou worden aangepast.
Hoe kan ik dit voor elkaar krijgen?
Groeten,
Jan.
Op mijn forum heb ik echter een aantal topics die gesloten zijn en waar ik zelf als administrator af en toe een regel aan toevoeg (bijv. soort van agenda).
Het zou mooi zijn als op dat moment de datum ook zou worden aangepast.
Hoe kan ik dit voor elkaar krijgen?
Groeten,
Jan.
Open includes/functions_post.php en zoek
Zet erachter
Zoek
Zet erahcter
Code: Selecteer alles
SET topic_title = '$post_subject',
Code: Selecteer alles
topic_time = $current_time,
Code: Selecteer alles
post_username = '$post_username',
Code: Selecteer alles
post_time = $current_time,
-
- Berichten: 55
- Lid geworden op: 04 dec 2004, 16:06
Kijk uit dat je op die manier niet de tijd wijzigt van berichten waar al op gereageerd is. Normaal worden berichten op volgorde van aanmaken in de database opgehaald, maar als je ze ooit op basis van hun tijd gaat ophalen ga je hiermee de mist in en raken topic-volgordes door de war! Ik heb het zelf ook gedaan trouwens, maar uitsluitend indien het bericht het laatste in de thread is wordt de tijd aangepast, en dan zien anderen het dus weer als een nieuw bericht staan in hun lijst nieuwe berichten.
Ik heb deze aanpassing toegevoegd zoals bovenstaand omschreven.
En volgens mij wordt de tijd/datum dan ook aangepast op een post die ergens bovenin een topic staat.
Oftewel, het probleem waar jij het over hebt is zowieso van toepassing
Enig idee wat ik hier aan kan doen?
M.a.w., kan jij me de code aangeven die jijzelf gebruikt hebt om het alleen op de laatste post te laten uitvoeren?
(Het gaat bij mij om topics met 1 post, echter iemand anders zou ook nog wat in een van zijn posts kunnen wijzigen waarmee de boel fout gaat..)
Groeten,
Jan
En volgens mij wordt de tijd/datum dan ook aangepast op een post die ergens bovenin een topic staat.
Oftewel, het probleem waar jij het over hebt is zowieso van toepassing

Enig idee wat ik hier aan kan doen?
M.a.w., kan jij me de code aangeven die jijzelf gebruikt hebt om het alleen op de laatste post te laten uitvoeren?
(Het gaat bij mij om topics met 1 post, echter iemand anders zou ook nog wat in een van zijn posts kunnen wijzigen waarmee de boel fout gaat..)
Groeten,
Jan
-
- Berichten: 55
- Lid geworden op: 04 dec 2004, 16:06
Ik heb geen mod klaarliggen maar in de topics-tabel staat het huidige topic_id natuurlijk, dat geeft het record aan, en in dat record zit een veld met topic_last_post_id, dus het ID van het laatste bericht in een topic. Je kunt checken of DAT id hetzelfde is als het id van het bericht dat je nu wilt gaan bewaren, en als dat zo is, kun je toestaan om de tijd bij te werken.
Laat maar even weten of je voldoende van PHP en zo weet om deze code zelf te kunnen schrijven met enige hulp / checken van deze kant
Laat maar even weten of je voldoende van PHP en zo weet om deze code zelf te kunnen schrijven met enige hulp / checken van deze kant

-
- Berichten: 55
- Lid geworden op: 04 dec 2004, 16:06
Oops, ik keek mijn code nog even door en zag de regel ineens staan. Ik hoop dat mijn code overeen komt met de standaard:
open functions_post.php
Rond regel 280 zoek
Voeg daarna deze regels toe:
De code vervolgt met
Nu zou de tijd uitsluitend bijgewerkt worden als het bericht het laatste in een topic is.
Wel even voorzichtig testen bijvoorbeeld in een voor anderen onzichtbaar subforum met een test-onderwerp, want ik weet niet of $post_data['post_time'] alsook $current_time in de standaard code bestaan.
Verder moet je de tijd van een bericht dus in het bericht opzoeken, want in een standaard-board worden berichten op volgorde van aanmaken opgehaald (waarbij de tijd geen rol speelt) en je bericht zal dus niet voorin het topic komen te staan als de tijd per ongeluk op 0 wordt gezet!!
Succes!
open functions_post.php
Rond regel 280 zoek
Code: Selecteer alles
if ($mode == 'newtopic')
{
$topic_id = $db->sql_nextid();
}
}
Code: Selecteer alles
// Edit the last post in a thread? Then update the time too, to keep the thread active
$post_time = ($mode == 'editpost' && $post_data['last_post']) ? $current_time : $post_data['post_time'];
De code vervolgt met
Code: Selecteer alles
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
Wel even voorzichtig testen bijvoorbeeld in een voor anderen onzichtbaar subforum met een test-onderwerp, want ik weet niet of $post_data['post_time'] alsook $current_time in de standaard code bestaan.
Verder moet je de tijd van een bericht dus in het bericht opzoeken, want in een standaard-board worden berichten op volgorde van aanmaken opgehaald (waarbij de tijd geen rol speelt) en je bericht zal dus niet voorin het topic komen te staan als de tijd per ongeluk op 0 wordt gezet!!
Succes!
Okay, in de nieuwe uitvoering is dit de code die ik gebruik, de code die eerder door Luuk werd aangegeven heb ik weer verwijderd. Vanaf regel 261:
Als ik nu echter in een laatste post een wijziging aanbreng blijft de datum en tijd gewoon staan, oftewel het werkt niet bij mij.
Ik zal vast iets fout doen/ iets over het hoofd zien; enig idee?
Ik heb zelf ook nog even zitten snuffelen, daar ben ik nieuwsgierig genoeg voor en ALS ik het goed begrijp zou de code van Luuk alleen actief zijn wanneer het gaat om het editen van een eerste post. Hier is het stukje script waar zijn wijzigingen in geplaatst worden (let op 1e regel):
Groeten,
Jan
Code: Selecteer alles
if ($mode == 'newtopic')
{
$topic_id = $db->sql_nextid();
}
}
$post_time = ($mode == 'editpost' && $post_data['last_post']) ? $current_time : $post_data['post_time'];
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig" . $edited_sql . " WHERE post_id = $post_id";
if (!$db->sql_query($sql, BEGIN_TRANSACTION))
{
Ik zal vast iets fout doen/ iets over het hoofd zien; enig idee?
Ik heb zelf ook nog even zitten snuffelen, daar ben ik nieuwsgierig genoeg voor en ALS ik het goed begrijp zou de code van Luuk alleen actief zijn wanneer het gaat om het editen van een eerste post. Hier is het stukje script waar zijn wijzigingen in geplaatst worden (let op 1e regel):
Klopt dit en zou daarom de code van Luuk dus wel zonder problemen toegepast kunnen worden?if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post']))
{
$topic_vote = (!empty($poll_title) && count($poll_options) >= 2) ? 1 : 0;
$sql = ($mode != "editpost") ? "INSERT INTO " . TOPICS_TABLE . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_vote) VALUES ('$post_subject', " . $userdata['user_id'] . ", $current_time, $forum_id, " . TOPIC_UNLOCKED . ", $topic_type, $topic_vote)" : "UPDATE " . TOPICS_TABLE . " SET topic_title = '$post_subject', topic_time = $current_time, topic_type = $topic_type " . (($post_data['edit_vote'] || !empty($poll_title)) ? ", topic_vote = " . $topic_vote : "") . " WHERE topic_id = $topic_id";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}
if ($mode == 'newtopic')
{
$topic_id = $db->sql_nextid();
}
}
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', post_time = $current_time, enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig" . $edited_sql . " WHERE post_id = $post_id";
if (!$db->sql_query($sql, BEGIN_TRANSACTION))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}
Groeten,
Jan
-
- Berichten: 55
- Lid geworden op: 04 dec 2004, 16:06
Klopt dat de groene code niet werkt, als je heel zorgvuldig leest zie je dat de tijd helemaal niet onderdeel van de SQL is in het geval er ge-edit wordt.
De sql moet zo zijn - let op het invoegen van
, post_time = $post_time
zodat in het UPDATE gedeelte inderdaad nu een tijd wordt veranderd in de database:
De sql moet zo zijn - let op het invoegen van
, post_time = $post_time
zodat in het UPDATE gedeelte inderdaad nu een tijd wordt veranderd in de database:
Code: Selecteer alles
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig, post_time = $post_time" . $edited_sql . " WHERE post_id = $post_id";
-
- Berichten: 55
- Lid geworden op: 04 dec 2004, 16:06
Volgens mij heb ik nu alles gedaan zoals je aangaf, echter ik krijg de volgende error:
Ik hoop dat je er nog eens naar wilt kijken, ik weet het ff niet meer....
Groeten,
Jan
Dit is de code:SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' post_edit_time = 1108755368, post_edit_count = post_edit_count
UPDATE hch_posts SET post_username = '', enable_bbcode = 1, enable_html = 1, enable_smilies = 1, enable_sig = 0, post_time = , post_edit_time = 1108755368, post_edit_count = post_edit_count + 1 WHERE post_id = 222
Line : 272
File : \wwwroot\forum\includes\functions_post.php
Code: Selecteer alles
$post_time = ($mode == 'editpost' && $post_data['last_post']) ? $current_time : $post_data['post_time'];
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig, post_time = $post_time" . $edited_sql . " WHERE post_id = $post_id";



Groeten,
Jan
-
- Berichten: 55
- Lid geworden op: 04 dec 2004, 16:06
Het probleem is
post_time = ,
ofwel er wordt geen waarde gegeven aan het veld post_time, en dat betekent dat de variabele $post_time dus niet is gezet. Het kan zijn dat de variabele $current_time of $post_data['post_time'] in jouw geval niet bestaat, kijk de code van de hele functie goed door om te zien of die inderdaad bestaat of niet.
post_time = ,
ofwel er wordt geen waarde gegeven aan het veld post_time, en dat betekent dat de variabele $post_time dus niet is gezet. Het kan zijn dat de variabele $current_time of $post_data['post_time'] in jouw geval niet bestaat, kijk de code van de hele functie goed door om te zien of die inderdaad bestaat of niet.
-
- Berichten: 55
- Lid geworden op: 04 dec 2004, 16:06
-
- Berichten: 55
- Lid geworden op: 04 dec 2004, 16:06
Het schoot me te binnen dat je de oorspronkelijke post_time niet nodig hebt als je alleen bij wijzingen een extra stukje in de SQL plakt.
Hieronder is een nieuw blok, probeer het maar eens in plaats van het oude
Hieronder is een nieuw blok, probeer het maar eens in plaats van het oude
Code: Selecteer alles
$post_time_sql = ($mode == 'editpost' && $post_data['last_post']) ? ', post_time = $current_time' : '';
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig " . $post_time_sql . $edited_sql . " WHERE post_id = $post_id";
SQL Error : 1054 Unknown column '$current_time' in 'field list'
UPDATE hch_posts SET post_username = '', enable_bbcode = 1, enable_html = 1, enable_smilies = 1, enable_sig = 0, post_time = $current_time WHERE post_id = 265
Line : 272
File : \includes\functions_post.php
Ik heb er eens naar zitten kijken en begin me inmiddels een aardige dombo te voelen....
Waarom wordt post_time niet gezet in de eerste regel middels post_time = $current_time, terwijl een regel verder ook $current_time wordt gebruikt en dus blijkbaar wordt herkend?
UPDATE hch_posts SET post_username = '', enable_bbcode = 1, enable_html = 1, enable_smilies = 1, enable_sig = 0, post_time = $current_time WHERE post_id = 265
Line : 272
File : \includes\functions_post.php
Ik heb er eens naar zitten kijken en begin me inmiddels een aardige dombo te voelen....

Waarom wordt post_time niet gezet in de eerste regel middels post_time = $current_time, terwijl een regel verder ook $current_time wordt gebruikt en dus blijkbaar wordt herkend?
Laatst gewijzigd door Lontronics op 20 feb 2005, 15:40, 1 keer totaal gewijzigd.
-
- Berichten: 55
- Lid geworden op: 04 dec 2004, 16:06
SQL Error : 1054 Unknown column '$current_time' in 'field list'
UPDATE hch_posts SET post_username = '', enable_bbcode = 1, enable_html = 1, enable_smilies = 1, enable_sig = 0, post_time = $current_time WHERE post_id = 267
Line : 273
File : \includes\functions_post.php
Nou, ben weer een klein stukje verder.
In het begin van de functie wordt inderdaad $current_time gezet (regel 223).
Omdat er een fout bleef komen heb ik $current_time = time(); toegevoegd op regel 267, een regel boven de code die gewijzigd is. Het maakt niets uit, bovenstaande melding blijft komen.
Volgens mij is de regel waarin post_time gezet wordt niet juist en zou die moeten zijn:
$post_time_sql = ($mode == 'editpost' && $post_data['last_post']) ? ", post_time = $current_time " : "'';
Ik weet alleen niet of ik daar juist zit....
UPDATE hch_posts SET post_username = '', enable_bbcode = 1, enable_html = 1, enable_smilies = 1, enable_sig = 0, post_time = $current_time WHERE post_id = 267
Line : 273
File : \includes\functions_post.php
Nou, ben weer een klein stukje verder.
In het begin van de functie wordt inderdaad $current_time gezet (regel 223).
Omdat er een fout bleef komen heb ik $current_time = time(); toegevoegd op regel 267, een regel boven de code die gewijzigd is. Het maakt niets uit, bovenstaande melding blijft komen.
Volgens mij is de regel waarin post_time gezet wordt niet juist en zou die moeten zijn:
$post_time_sql = ($mode == 'editpost' && $post_data['last_post']) ? ", post_time = $current_time " : "'';
Ik weet alleen niet of ik daar juist zit....