Håller på med ett blogg-projekt som jag har kört fast på. Vill koppla ihop mina inlägg med rätt kommentarer, eller rättare sagt rätt kommentarer till rätt inlägg. Hej om jag förstått det rätt måste du bygga om databasen lite. Vet inte om det blir rätt, men jag försökte använda nid till detta istället. Eller är jag ute på fel spår med detta. Vet fortfarande inte hur jag skriver för att koppla ihop dessa.Koppla ihop 2 tabeller
Som det är nu så kommer alla kommentarer fram när jag visar första sidan och vill visa hur många kommentarer som varje inlägg har.
Alltså vill ja ha "Inlägg"---> 2 kommentarer kopplat till rätt inlägg.
Inläggen postas som de ska och lika dant med kommentarer, men kopplingen mellan dessa får jag inte ihop.
Posta inlägg.
<?php
require_once('CHTMLPage.php');
$title = "PTemplate1Columns";
$style = "1-kolumns.css";
$page = new CHTMLPage($style);
$page->printHTMLHeader('Fooglers blogg idag den ' . date(DATE_RFC822));
if (isset($_POST['submit'])) {
// Create a new database object, we are using the MySQLi-extension.
//
//
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_errno()) {
echo "Connect failed: ".mysqli_connect_error()."<br>";
}
$rubrik= $_POST['rubrik'];
$text = $_POST['text'];
$forfattare = $_POST['forfattare'];
$datum = date('Y-m-d H-i-s');
$query = "INSERT INTO blogg SET rubrik='$rubrik ', text='$text' , forfattare='$forfattare' , datum='$datum'" or die(mysqli_error());
$result = $mysqli->query($query, MYSQLI_USE_RESULT);
$result = array($result);
if ($mysqli->error) {
try {
throw new Exception("MySQL error $mysqli->error <br> Query:<br> $query", $msqli->errno);
} catch(Exception $e ) {
echo "Error No: ".$e->getCode(). " - ". $e->getMessage() . "<br >";
echo nl2br($e->getTraceAsString());
}
}
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$mysqli->close();
}
?>
<?php
$html = <<<EOD
<form method="post" action="?p=post" name="matain" onSubmit="return skicka_OnClick();">
<p>
Rubrik:<br>
<input type="text" name="rubrik" id="title" size="25" />
</p>
Text:<br>
<textarea name="text" rows="5" cols="30"></textarea>
</p>
<p>
Författare:<br>
<input type="text" name="forfattare" id="forfattare" size="25" />
</p>
<p>
<input type="submit" name="submit" value="Posta inlägg!" />
</p>
</form>
<p>Tillbaka</p>
<script language="JavaScript">
function skicka_OnClick() {
var rubrik = document.matain.title.value;
var text = document.matain.text.value;
var forfattare = document.matain.forfattare.value;
if((rubrik.length != 0) && (text.length != 0) && (forfattare.length != 0)) {
return true;
} else {
alert("Du glömde att fylla i Rubrik, Inlägg eller Författare");
return false;
}
}
</script>
EOD;
$page->addPageBodyLeft($html);
// Print out the resulting page
$page->printPage($title);
?>
Inlägg
<?php
require_once('CHTMLPage.php');
$title = "PTemplate1Columns";
$style = "1-kolumns.css";
$page = new CHTMLPage($style);
if (isset($_POST['submit'])) {
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_error()) {
echo "Connect failed: ".mysqli_connect_error()."<br>";
//exit();
}
$titel= $_POST['titel'];
$namn = $_POST['namn'];
$innehall = $_POST['innehall'];
$datum = date('Y-m-d H-i-s');
$nid = $_GET['nid'];
$id = $_GET['id'];
$query = "INSERT INTO kommentarer SET nid='$nid', titel='$titel', namn='$namn', datum='$datum', innehall='$innehall'" or die(mysqli_error());
$result = $mysqli->query($query, MYSQLI_USE_RESULT);
$result = array($result);
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$mysqli->close();
}
?>
<?php
$html = <<<EOD
<h2>Skriv en kommentar</h2>
<p>
<form method="post" action="?p=style1cols&nid=12" name="matain" onSubmit="return skicka_OnClick();">
<p>
Titel:<br>
<input type="text" name="titel" id="titel" size="25" />
</p>
Text:<br>
<textarea name="innehall" rows="5" cols="30"></textarea>
</p>
<p>
Namn:<br>
<input type="text" name="namn" id="namn" size="25" />
</p>
<p>
<input type="submit" name="submit" value="Kommentera!" />
</p>
</form>
<p>Läs nya meddelande</p>
</p>
<script language="JavaScript">
function skicka_OnClick() {
var titel = document.matain.titel.value;
var namn = document.matain.namn.value;
var innehall = document.matain.innehall.value;
if((titel.length != 0) && (innehall.length != 0) && (namn.length != 0)) {
return true;
} else {
alert("Du glömde att skriva Inlägg eller Namn");
return false;
}
}
</script>
EOD;
$page->addPageBodyLeft($html);
// Print out the resulting page
$page->printPage($title);
?>
Och sidan som jag läser från, alltså första sidan.
<?php
require_once('CHTMLPage.php');
$page = new CHTMLPage();
$page->printHTMLHeader('Fooglers blogg idag den ' . date(DATE_RFC822));
$title = "PTemplate2Columns";
$style = "step14_twocolumns.css";
$page = new CHTMLPage($style);
$html = <<<EOD
Byt utseende
<h2>Senaste blogg-inläggen</h2>
EOD;
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_error()) {
echo "Connect failed: ".mysqli_connect_error()."<br>";
}
$query = "SELECT * FROM blogg ORDER BY datum DESC;";
$res = $mysqli->query($query)
or die("Could not query database");
if ($qkom = $mysqli->query("SELECT * FROM kommentarer ORDER BY datum DESC")) {
/* determine number of rows result set */
$count = $qkom->num_rows;
/* close result set */
$qkom->close();
}
while($row = $res->fetch_object()) {
$html .= <<< EOD
<h2>$row->rubrik<br></h2>
$row->text<br><br>
$row->forfattare
$row->datum<br>
<!--<p>Antal inlägg som visas: {$res->num_rows}</p> -->
<p>Antal kommentarer: ($count)\nKommentera\nLäs alla</p>
EOD;
}
$res->close();
$page->addPageBodyLeft($html);
$html = <<<EOD
<h4>Meny</h4>
EOD;
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_error()) {
echo "Connect failed: ".mysqli_connect_error()."<br>";
//exit();
}
$query = "SELECT * FROM membersmembers;";
$res = $mysqli->query($query)
or die("Could not query database");
if ($qkom = $mysqli->query("SELECT * FROM kommentarer ORDER BY datum DESC")) {
/* determine number of rows result set */
$count = $qkom->num_rows;
/* close result set */
$qkom->close();
}
while($row = $res->fetch_object()) {
$html .= <<< EOD
<p><a href>$row->namnUser</a href></p>
<p>$row->ansvarsomrade</p>
EOD;
}
$res->close();
$page->addPageBodyRight($html);
$page->printPage($title);
?>
Och tabellerna som jag använder.
CREATE TABLE IF NOT EXISTS `blogg` (
`id` int(11) NOT NULL auto_increment,
`rubrik` varchar(300) NOT NULL default '',
`text` varchar(10000) NOT NULL default '',
`forfattare` varchar(50) NOT NULL default '',
`datum` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
CREATE TABLE IF NOT EXISTS `kommentarer` (
`id` int(11) NOT NULL auto_increment,
`nid` int(11) NOT NULL default '0',
`titel` varchar(255) NOT NULL,
`namn` varchar(255) NOT NULL,
`datum` varchar(255) NOT NULL,
`innehall` text NOT NULL,
PRIMARY KEY (`id`),
KEY `nid` (`nid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
Hur löser jag detta med att koppla rätt kommentar till rätt inlägg. Hoppas att jag inte är för luddig i min fråga.
Sv: Koppla ihop 2 tabeller
I kommentartabellen behöver du en kolumn som heter något i stil med blog_id. När du skriver en kommentar till ett bloginlägg ska kommentaren få blog_id = det inläggets id.
Sen i selected gör du bara en where blog_id=[bloggens id]Sv:Koppla ihop 2 tabeller
Annars om jag lägger in som du sa, så får du gärna visa hur du menar och vad jag bör skriva detta i min kod. Har lite hjärnsläpp förtillfället.Sv: Koppla ihop 2 tabeller
Som ni ser så försöker jag sätta nid i kod 2, men vet inte hur jag fångar och kopplar ihop detta med inlägg(blogg-inlägg).
Annars så har jag utskrift på första sidan med följande text:
Antal kommentarer: (5) Kommentera Läs alla
men som sagt detta hämtar alla kommentarer i databasen, och är inte kopplade till något specifikt inlägg.
Fråga mig inte varför jag har satt det så här, men va för att kunna få något värde alls. Men nu får jag ju 12 på alla kommentarer. Så ska det inte vara.
action="?p=style1cols&nid=12"