fant0mas - har du meget styr på scriptet?
Jeg har ændret lidt i scriptet og fået det til at virke nogenlunde efter hensigten, men når jeg prøver at implementere det på siden driller det lidt :/
Det virker meget mystisk i mine øjne.. Når jeg opretter kommentarer bliver de godt nok smidt i databasen med de fornødne oplysninger.. Men det er kun kommentarerne med parent_id 0, der bliver vist under hver blog.. Dvs. de kommentarer, der er svar til andre kommentarer bliver ikke vist af en eller anden underlig grund :| Men hvis jeg smider dataen fra zip filen ind i databasen bliver de vist og der fungerer det som det skal - men hvordan i al verden kan det være :S Dataen er jo ens..
Har lige taget et billede af databasen:
http://www.valuable.dk/data.jpgHer er det altså kun kommentarer+svar, der bliver vist til blog med blog_id 1, mens det ved blog 51 kun er kommentarerne med parent_id 0, som bliver vist.. Når man svarer til en kommentar i eksempelvis blog 51, skriver den heller ikke at man besvarer kommentar XX :S
Du skulle vel ikke vide hvad det skyldes?
Jeg kan lige plukke koden ud fra filerne:
--------------------------------------------------------------
_thread.php
--------------------------------------------------------------
<?php
class thread
{
public $aCommentId = array(0);
public $aThread = array();
public function getThreadHTML($aThread, $nLevel=0, $childCount=0) {
$aRet = array('<ul>');
if(count($aThread)){
for ($i=0; $i<count($aThread[$nLevel]); $i++) {
$style = '';
if($aThread[$nLevel][$i]->isChild > 0) $style = 'angle';
if($childCount > 1) $style = 'line_angle';
$id = $aThread[$nLevel][$i]->id;
$no = $aThread[$nLevel][$i]->no;
$aRet[] = sprintf('
<li class="%1$s">
<a id="%5$d" />
<div class="message">
<a href="#%5$d">#%2$d</a> - <a href="?id='.$_GET['id'].'&replyTo=%2$d#reply">Svar</a>
<br /><strong>%3$s</strong>
<br />%4$s
</div>', $style, $no, $aThread[$nLevel][$i]->author, $aThread[$nLevel][$i]->text, $id);
$childCount--;
if (isset($aThread[$id]) && is_array($aThread[$id])) {
$aRet[] = $this->getThreadHTML($aThread, $id, $aThread[$nLevel][$i]->childCount).'</li>';
}
else $aRet[] = '</li>';
}
}
return implode('', $aRet).'</ul>';
}
public function getThread($id) {
global $mysqli;
$sql = sprintf("SELECT t.id, t.parent_id, t.author, t.text, t.time, count(t2.parent_id) as childCount, count(t3.id) as isChild
FROM blogs_comments AS t
LEFT JOIN blogs_comments AS t2 ON (t.id=t2.parent_id)
AND t2.blog_id = t.blog_id
LEFT JOIN blogs_comments AS t3 ON (t3.id=t.parent_id)
WHERE t.blog_id = '".$_GET['id']."'
GROUP BY t.id",$id);
if($result = $mysqli->query($sql)){
$i = 1;
while ($row = $result->fetch_object()) {
$row->no = $i++;
$this->aCommentId[] = $row->id;
if (isset($this->aThread[$row->parent_id]) && !is_array($this->aThread[$row->parent_id])) $this->aThread[$row->parent_id] = array();
$this->aThread[$row->parent_id][] = $row;
}
}else{
die($mysqli->error);
}
return $this->aThread;
}
function insertReply($forumID, $replyID, $username, $text){
global $mysqli;
$sql = "INSERT INTO blogs_comments (parent_id, blog_id, author, text, time) VALUES (?, ?, ?, ?, NOW())";
if($stmt = $mysqli->prepare($sql)){
$stmt->bind_param('iiss', $replyID, $forumID, $username, $text);
$stmt->execute();
return $stmt->insert_id;
}else{
return $mysqli->error;
}
//return true;
}
function insertTopic($name){
$sql = mysql_query(sprintf("INSERT INTO topic (name, createdTS) VALUES (%s, %s)", mysql_real_escape_string($name), getdate()));
}
}
?>
--------------------------------------------------------------
blogs.display.php
--------------------------------------------------------------
<?php
$mysqli = new mysqli('localhost', 'root', '', 'mindatabaseher');
if(!isset($_GET['forumID'])){
$_GET['forumID'] = 1;
}
include_once '_thread.php';
$thread = new thread();
$res = $thread->getThread($_GET['forumID']);
if(isset($_POST['reply']) && in_array($_GET['replyID'], $thread->aCommentId)){
$replyID = $thread->insertReply($_POST['forumID'], $_POST['replyID'], $_POST['name'], $_POST['text']);
if(is_numeric($replyID)){
header("Location: blogs.display.php?id=".$_GET['id']."");
}
}
if(isset($_POST['topic'])){
$threadId = $thread->insertTopic();
if(is_numeric($threadId)){
header("Location: blogs.display.php?id=".$_GET['id']."");
}
}
?>
<?php echo '<div class="contain">'.$thread->getThreadHTML($res).'</div>'; ?>
<?php
echo '<form method="post" action="">';
if(isset($_GET['replyTo']) && $_GET['replyTo'] && in_array($_GET['replyTo'], $thread->aCommentId)){
echo 'Svar til #'.$_GET['replyTo'].' | <a href=blogs.display.php?id='.$_GET['id'].'>Cancel</a>';
}
echo '<input type="hidden" name="reply" value="1" />';
echo '<input type="hidden" name="forumID" value="'.$_GET['id'].'">';
echo '<input type="hidden" name="replyID" value="'.$_GET['replyTo'].'">';
echo '<input class="inputText" type="text" name="name" value="" /><br />';
echo '<textarea name="text">
?>