webForumDet fria alternativet

kommentarer

10 svar · 502 visningar · startad av @ndreas

@ndreasMedlem sedan maj 200149 inlägg
#1

Hej,

Har sökt runt och försökt komma på hur jag ska göra, men det står helt still, iofs ganska sent, men ändå.

Jag har en databas med massa information, och vill att besökaren ska kunna lämna en kommentar på varje ID.
Hur ska jag kunna det, måste jag skapa en tabell för varje ID typ kommentarer23 eller finns det nått enklare sett.
Låt säga att det i ID 7 finns ett field som heter information där det står

I går så åskade det i småland.

Sen ska besökaren kunna kommentera det
Kan det läggas i fältet kommentarer med nån sorts koppling till Id (7) ?

Jag kan ju skriva in det som html i kommentarer och sen när någon skriver så laddas det vad som står i kommentarer och sen läggs den nya kommentaren in. Men då blir det ju som när man skriver till en textfil i brist på databas.

Borde ju finnas en relativt simpel tankebana för detta, bara att jag inte kopplar hur jag ska göra.

Hjälp mig gärna på traven!

yos0nMedlem sedan dec. 200170 inlägg
#2

När jag vill utnyttja kommentarer använder jag en ny tabell i databasen för varje typ av kommentar jag har, så att om jag t.ex. har nyheter och recensioner på en sida så har jag två tabeller, en för nyhetskommentarer och en för recensionskommentarer.

I kommentarerna har jag, förutom ett id för själva kommentaren och övriga fält (text, titel, vem som skrev, epost, url osv.), ett id parent_id som refererar tillbaka till den post som kommenterades. Som exempel kan jag ha en nyhet med id = 24, och alla kommentarer till den nyheten får då parent_id = 24. Det gör att om jag har id:t till nyheten för vilken jag vill ha kommentarerna så kan jag på ett lätt sätt hämta ut alla kommentarer som tillhör just den nyheten.

Hoppas jag förklarar mina tankar någorlunda klart, och att jag har förstått din fråga.

aasahMedlem sedan mars 20033 451 inlägg
#3

Informationstabellen har tex fält:
I_ID, Info, Forfattare, Datum

Kommentarstabellen har fält:
K_ID, Kommentar, Forfattare, Datum, I_ID
(där I_ID är främmande nyckel till Infotabellen.)

Exempel: I infotabellen:
...
7, 'Det åskade i Småland igår', 'Anna', '05-07-20'
8, 'Idag skiner solen', 'Anna', '05-07-21'

I kommentarstabellen:
...
34, 'Trist.', 'Kalle', '05-07-21', 7
35, 'Trevligt!', 'Johan', '05-07-21', 8
36, 'Än sen!', 'Kalle', '05-07-21', 7

Vilket ger :

'Det åskade i Småland igår'

Kommentarer: Trist. och Än sen!

'Idag skiner solen'

Kommentarer: Trevligt!

PeeerMedlem sedan mars 20025 362 inlägg
#4

Flyttas från PHP!
Undrar om tråden hör hemma här i SQL eller om den ska flyttas till databashanterare!?

@ndreasMedlem sedan maj 200149 inlägg
#5

Fint

Tack för hjälpen, gjorde som ni sa och det funkade fin fint.
Använder cid liknande k_Id som i exemplet ovan.
Den visade kommentarerna precis som jag ville ända tills jag kom upp til id 10 (liknande i_Id i exemplet ovan) då visade den det som var skrivet i i_Id 1 och det som skrevs i id tabellen var 1.

Kanske är min insert som är fel:

mysql_query("INSERT into comment VALUES ('".$id["id"]." ()', '()', '$namn', '$datum', '$kommentar', '$epost', '$rubrik')") or die(mysql_error());

eller är det fältet som inte är rätt, använde från början int(255) då när allt fungerade så fint, nu har jag testat lite olika versioner men kan inte lista ut det.
cid är auto_increment och primary.
Vad är det som jag inte tänkt på?

Tack för hjälpen hittills.

LarsGMedlem sedan dec. 200012 465 inlägg
#6

Om kolumn är definierad som auto_increment så skall du inte ange något värde för den kolumnen i din insert

INSERT into comment (namn,datum,kommentar,epost,rubrik)
VALUES ('$namn', '$datum', '$kommentar', '$epost', '$rubrik')

i synnerhet så skall du inte försöka lagra en sträng i en integerkolumn.

@ndreasMedlem sedan maj 200149 inlägg
#7

fast...

fast id måste ju sättas, annars så visas ju inte kommentarerna under rätt "nyhet".

hur ska jag skicka med id och vilken sorts field är bäst till det?

LarsGMedlem sedan dec. 200012 465 inlägg
#8

Hur är tabellen comment definierad? Visa din kod för create table.

Vad menade du med

'".$id["id"]." ()'

egentligen?

@ndreasMedlem sedan maj 200149 inlägg
#9

CREATE TABLE `comment` (
`ID` int(255) NOT NULL default '0',
`CID` int(255) NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`Date` datetime NOT NULL default '0000-00-00 00:00:00',
`Comment` text NOT NULL,
`epost` text NOT NULL,
`rubrik` varchar(30) NOT NULL default '',
PRIMARY KEY (`CID`)
) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=11 ;

Den sätter in * på $id typ tror jag, lånade av annan kod och det fungerade, ända tills jag kom över id 9

LarsGMedlem sedan dec. 200012 465 inlägg
#10
 CREATE TABLE `comment` (
`ID` int NOT NULL default 0,
`CID` int NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`Date` datetime ,
`Comment` text NOT NULL,
`epost` varchar(200) NOT NULL,
`rubrik` varchar(30) NOT NULL default '',
PRIMARY KEY (`CID`)
) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=11 ;

Några kommentarer
Det finns ingen anledning att ange int(255).
Defaultvärden för en numerisk kolumn skall vara ett numeriskt värde och inte en sträng.
Varför skall date ha ett defaultvärde som inte ens är ett giltigt datum? Använd hellre null.
Att använda text för en epost-adress känns överflödigt. 200 tecken borde räcka.
Egentligen borde du definera ID som en foreign key till din andra tabell vilket innebär att du måste använda INNODB som tabelltyp.

Din insert borde se ut som.

INSERT into comment (id,namn,datum,kommentar,epost,rubrik)
VALUES ( <id från andra tabelllen>,
'$namn', '$datum', '$kommentar', '$epost', '$rubrik')
@ndreasMedlem sedan maj 200149 inlägg
#11

Tack

Nu löste sig allt.

Tack för all hjälp!

130 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
126 ms — hämta tråd, inlägg och bilagor (db)