webForumDet fria alternativet

Länka till gästboksinlägg

PHP

10 svar · 736 visningar · startad av Blockqoute

Medlem sedan dec. 200380 inlägg
Frågan#1

Jag håller på med en hemsida för min och min sambos hund. Den ligger preliminärt nu uppe på https://www.dcweb.nu/lars. Jag har en gästbok på den sidan. Jag skulle vilja länka de 2 första inläggen i gästboken till en ruta som ligger permanent till höger på sidan. Titta på hemsidan så är det lättare att förstå. Där vill jag att inläggen skall uppdateras automatiskt så klart, så det är de 2 nyaste GB-inläggen som skall visas där. Jag vill att datum och tid, namn, och de antal tecken som får plats på en rad i rutan av hela GB-inlägget skall visas. Raden skall avslutas med t.ex. "...". Och på raden underst så vill jag har en länk man kan klicka på där det står "Read more", som skall ta en till gästbokssidan. Någon som har några ideér på hur detta kan lösas?

Jag bifogar en .zip-fil med de två sidorna som är aktuella. Databasen för gästboken ser ut som nedan:

CREATE TABLE `gastbok` (
  `id` mediumint(11) NOT NULL auto_increment,
  `datum` datetime NOT NULL default '0000-00-00 00:00:00',
  `namn` varchar(50) NOT NULL default '',
  `stad` varchar(50) NOT NULL default '',
  `epost` varchar(50) NOT NULL default '',
  `hemsida` varchar(50) NOT NULL default '',
  `ager` varchar(50) NOT NULL default '',	
  `inlagg` text NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

Är tacksam för alla svar och ideér.

Medlem sedan aug. 20051 601 inlägg
#2

Varje gång sidan uppdateras plockar du ut de två rader i databasen där datetime är störst och skriver ut dessa? Eller har jag missförstått dig helt nu?

Superfin hund btw! :)

Medlem sedan dec. 200380 inlägg
#3

Ja det är väl så det är tänkt att fungera :) Kommer inte riktigt på hur man implemeterar detta bara...

Medlem sedan juni 20006 031 inlägg
#4
<?php
$conn = @mysql_connect('localhost', 'anvandarnamn', 'losenord') or die("Kunde inte ansluta till databasen..."); 
mysql_select_db('dbnamn', $conn)

$data = mysql_query("SELECT * FROM gastbok ORDER BY id DESC LIMIT 2") or die("Kunde inte hämta från databasen...");
while ($rad = mysql_fetch_array($data)) {
	// Kolla om inlägget är mer än 40 tecken, isåfall korta ner
	if (strlen($rad['inlagg']) > 40) {
    // Skriv ut första 35 tecknen, sen ...
    $inlagg = substr($rad['inlagg'], 0, 35) . '...';
	}
	echo "<strong>".$rad['datum']." - ".$rad['namn']."</strong><br />\n";
	echo $inlagg;
	echo "<br />\n<a href=\"guestbook.php\">Read more</a><br/>\n";
}
?>
Medlem sedan dec. 200380 inlägg
#5

Tack så mkt för ditt svar! Det fungerar bra i stora drag, men det är några buggar. Om man skriver meddelanden som är kortare än 35 tecken (har ändrat lite) så kommer inte själva meddelandet med på högersidan. Och om man skriver meddelanden som är längre än 35 tecken så fungerar förkortningen och allt bra, bara det att då kommer samma meddelande upp på båda inläggen. Men namnet och datumet är som de ska, alltså bara själva meddelandet som kommer upp två gånger. Sidan är uppdaterad med det senaste försöket nu. Men här kommer även själva koden:

<?php 
    $data = mysql_query("SELECT * FROM gastbok ORDER BY id DESC LIMIT 2") or die("Kunde inte hämta från databasen..."); 
    while ($rad = mysql_fetch_array($data)) { 
    // Kolla om inlägget är mer än 35 tecken, isåfall korta ner 
    if (strlen($rad['inlagg']) > 35) { 
    // Skriv ut första 30 tecknen, sen ... 
    $inlagg = substr($rad['inlagg'], 0, 30) . '...'; 
    } 
    echo "<strong>".$rad['namn']." - ".$rad['datum']."</strong><br />\n"; 
    echo $inlagg; 
    echo "<br />\n<a href=\"guestbook.php\">Read more</a><br/>\n<br>"; 
}
?>
Medlem sedan jan. 20023 327 inlägg
#6

Du sparade endast ditt inlägg i variabeln $inlagg när det var mer än 35 tecken så felet var ju ganska logiskt.
Koden nedan bör fungera som du tänkt dig. :)

/Edit Ändrade lite, else-vilkor behövs inte med denna förbättring..

<?php 
    $data = mysql_query("SELECT * FROM gastbok ORDER BY id DESC LIMIT 2") or die("Kunde inte hämta från databasen..."); 
    while ($rad = mysql_fetch_array($data)) { 
    $inlagg = $rad['inlagg'];
    if (strlen($inlagg) > 35) { //kort ner inlägg om längre än 35 tecken 
        $inlagg = substr($inlagg, 0, 30) . '...'; 
    } 
    echo "<strong>".$rad['namn']." - ".$rad['datum']."</strong><br />\n"; 
    echo $inlagg; 
    echo "<br />\n<a href=\"guestbook.php\">Read more</a><br/>\n<br>"; 
}
?>
Medlem sedan juni 20006 031 inlägg
#7

Compusa skrev:

Du sparade endast ditt inlägg i variabeln $inlagg när det var mer än 35 tecken så felet var ju ganska logiskt.

Självklart, det var jag som hade lite för bråttom när jag skrev koden. Ber om ursäkt för det.

Medlem sedan jan. 20023 327 inlägg
#8

Pedda skrev:

Självklart, det var jag som hade lite för bråttom när jag skrev koden. Ber om ursäkt för det.

Det var absolut inte menat att låta spydig om det uppfattades så. Är väl medveten om att att misstag, kan uppstå i all hast ibland :D

Medlem sedan juni 20006 031 inlägg
#9

Ånej, så uppfattade jag det inte.
Det var bara bra att du såg felet jag hade gjort. Det blir lätt fel när man är stressad och inte kan testköra koden heller.

Medlem sedan dec. 200380 inlägg
#10

Tack så mycket allihop! Hur det blev kan ni kolla på hemsidan.

Medlem sedan jan. 20023 327 inlägg
#11

Okej trevlig att löste sig :)

Blockquote: om du vet vilken data du vill hämta ut så är det rekomenderat att byta ut:

<?php 
    $data = mysql_query("SELECT FROM * FROM gastbok ORDER BY id DESC LIMIT 2") or die("Kunde inte hämta från databasen..."); 
?>

mot...

<?php 
    $data = mysql_query("SELECT namn, datum, inlagg FROM gastbok ORDER BY id DESC LIMIT 2") or die("Kunde inte hämta från databasen..."); 
?>

Bättre rent prestandamässigt.

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)