Avatar billede tobrukDk Novice
04. juni 2012 - 23:10 Der er 28 kommentarer og
1 løsning

spørgsmål til forum svar opbyggning

hej

Det er sådan at jeg skal have bygge et forum svar. altså det er sådan at når man opret et spørgsmål så skal man kunne svar tilbage. så havde jeg tænkt mig at lave inner join eller ligne så at table forum og forum_svar er sammen

forum har jeg sådan her i databasen
id_forum
title
tekst
dato
id_bruger

forum_svar havde jeg tænkt mig sådan her,
id_forumsvar
tekst
id-fk_forum <---- det nr som man få når man kommer ind på siden altså $_get['id] altså dens tal eller hvad man siger til det..
id_bruger

er lidt usikker på hvordan jeg bygge det op på men her er min f.eks på hvordan jeg vil gøre det så vil jeg høre/se om du har et som jeg måske kunne bruge eller ligne.. :D jeg er helt løse om jeg skal gør det sådan der.. :D
Avatar billede inteeeL Nybegynder
05. juni 2012 - 01:50 #1
Er nedenstående ikke kompatibelt nok?
$query = "SELECT * FROM forum_svar WHERE id_forumsvar = $_GET['id']";
Avatar billede detziaw Nybegynder
05. juni 2012 - 02:24 #2
Jo det er en korrekt struktur du har valgt :-)
Avatar billede tobrukDk Novice
05. juni 2012 - 03:12 #3
#1 jeg forstår ikke liger hvad du mener? hmm

#2 Ja ikke også , altså jeg kun bare ikke se det på andre måde. men så må jeg heller gå i gang, og give det god mening omkring hvordan jeg vil sæt det op på?
Avatar billede inteeeL Nybegynder
05. juni 2012 - 14:53 #4
Hov, jeg misforstod dit spørgsmål samt hvad du ville med indlægget her. :-)

Der er som sådan ikke noget, der hedder forkert og korrekt struktur, da det vigtigste er, at det skal passe til netop dit formål. Man kan tale om, hvad der kunne fungere bedre samt om mere fordelagtige løsninger frem for løsninger, der ikke holder i længden.

Jeg synes du mangler lidt i din opbygning. Når jeg tænker forum, tænker jeg, at der på startsiden af forummet skal være en oversigt over nogle kategorier - altså mangler du en kategori-tabel. Derudover kunne det være, at du også ville have underkategorier med. Dette kan også klares i kategori-tabellen. Umiddelbart ville jeg opbygge det således (med flg. tabeller):
CREATE TABLE IF NOT EXISTS `forum_traede` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `kategori_id` int(11) NOT NULL,
  `bruger_id` int(11) NOT NULL,
  `titel` varchar(255) NOT NULL,
  `tekst` text NOT NULL,
  `dato` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `forum_kategorier` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `overID` int(11) NOT NULL, // <-- dette kunne bruges, hvis du ville have underkategorier
  `titel` enum('1','2','3','4','5') NOT NULL,
  `beskrivelse` varchar(255) NOT NULL,
  `dato` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `forum_kommentarer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `traed_id` int(11) NOT NULL,
  `bruger_id` int(11) NOT NULL,
  `tekst` text NOT NULL,
  `dato` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

I tabellen overID kan du så beslutte, om kategorien skal "høre under" en anden kategori således, at kategorien bliver en underkategori. Fx:
Kategori: DJ-musik | id=1 | overID=0 (dette er en hovedkategori)
Kategori: Beats | id=2 | overID=1 (dette er en underkategori, der hører under "DJ-musik".

Håber du kan forstå min tankegang, ellers må du endelig spørge.
Avatar billede inteeeL Nybegynder
05. juni 2012 - 14:55 #5
Desuden kan der nok rettes i tabellerne, så de virker bedst muligt. Eksempelvis kunne det tænkes, at varchar(255) er lige lovlig meget til en titel - her kunne 60 være passende. Men igen, det skal passe til dit formål, så det må du selv justere på. :-)
Avatar billede tobrukDk Novice
05. juni 2012 - 15:32 #6
#inteel har du mulighed for at lave en sql til mig og sende den til min email, jeg kan godt lide den måde som du har bygget det op og det er måske det som jeg søger efter.. :D

men forum_traede er den som opret og forum_kategorier det er til det hvor man har opret af kategorier? og forum_kommentarer det er til dem som svar på spørgsmål?
Avatar billede inteeeL Nybegynder
05. juni 2012 - 16:39 #7
Du kan bare kopiere sql-delen fra boksen ovenfor (husk dog at fjerne kommentaren til overID).
Og ja, du har forstået det rigtigt. :-)
Avatar billede tobrukDk Novice
05. juni 2012 - 16:59 #8
Har du mulighed for det så er jeg sikker pa at få alt med !
Avatar billede tobrukDk Novice
05. juni 2012 - 22:28 #9
jeg har klart den :D
Avatar billede tobrukDk Novice
05. juni 2012 - 22:47 #10
Forstår ikke helt hvad du mener med kategori hvordan det skal være?
Avatar billede inteeeL Nybegynder
05. juni 2012 - 23:26 #11
Jeg fik lige lyst til at lave koden til det, jeg har sendt til dig, som du lige kan få lov til at se. Der er kommentarer til, så det burde være til at forstå. Bemærk, at det er utestet, hvorfor fejl muligvis vil forekomme. Du skal være velkommen til at redigere i det så tosset du vil, samt komme med spørgsmål, hvis der skulle dukke nogle op.
<?php

//Forbindelse til mysql
$mysqli = new mysqli("localhost", "root", "", "cassiopia");

//Udskriver fejlmeddelelse, hvis der ikke kan oprettes forbindelse til databasen
if (mysqli_connect_errno()) {
    printf("Der opstod en fejl ved forbindelsen: %s\n", mysqli_connect_error());
    exit();
}

//Sætter variblerne til hhv. kategori-id og tråd-id
$id_cat = ( isset( $_GET['katID']) ? (int)$_GET['katID'] : 0);
$id_thread = ( isset( $_GET['traedID']) ? (int)$_GET['traedID'] : 0);

//Hvis man har klikket ind på en hovedkategori
if ( $id_cat > 0) {
    //Udskrivning af under-kategorier, HVIS der er underkategorier
    $query = "SELECT titel, beskrivelse FROM forum_kategorier WHERE over_id=? ORDER BY id ASC";
    if ($stmt = $mysqli->prepare($query)) {
        $stmt->bind_param('i', $id_cat);
        $stmt->execute();
        $stmt->bind_result( $titel, $beskrivelse);
        if( $stmt->num_rows > 0) {
            while( $stmt->fetch()) {
                // Underkategorier her
            }
        }
        else {
            // Ingen underkategorier - skal der udskrives en meddelese?
        }
        $stmt->close();
    }
    //Udskrivning af tråede, hvis disse forefindes i denne kategori
    $query = "SELECT bruger_id, titel, tekst, dato FROM forum_traede WHERE kategori_id=? ORDER BY id ASC";
    if ($stmt = $mysqli->prepare($query)) {
        $stmt->bind_param('i', $id_cat);
        $stmt->execute();
        $stmt->bind_result( $bruger_id, $titel, $tekst, $dato);
        if( $stmt->num_rows > 0) {
            while( $stmt->fetch()) {
                // Oversigt over tråde vises her
            }
        }
        else {
            // Ingen tråde i denne kategori, jeg ved ikke om der skal udskrives en meddelelse her
        }
        $stmt->close();
    }
}
else {
    //Tjekker om der er blevet klikket ind på en tråd
    if ( $id_thread > 0) {
        // Vis den valgte tråd
        $query = "SELECT bruger_id, titel, tekst, dato FROM forum_traede WHERE id=?";
        if ($stmt = $mysqli->prepare($query)) {
            $stmt->bind_param('i', $id_thread);
            $stmt->execute();
            $stmt->bind_result( $bruger_id, $titel, $tekst, $dato);
            if( $stmt->num_rows > 0) {
                $stmt->fetch();
                //Vi den valgte tråd her
               
                //Hent eventuelle kommentarer
                $query = "SELECT bruger_id, tekst, dato FROM forum_svar WHERE traed_id=? ORDER BY id ASC";
                if ($stmt = $mysqli->prepare($query)) {
                    $stmt->bind_param('i', $id_thread);
                    $stmt->execute();
                    $stmt->bind_result( $bruger_id, $tekst, $dato);
                    if( $stmt->num_rows > 0) {
                        while( $stmt->fetch()) {
                            // Her udskrives kommentarerne
                        }
                    }
                    else {
                        // Ingen kommentarer/svar - dette kunne meddeles
                    }
                    $stmt->close();
                }               
            }
            else {
                // Kunne ikke hente den valgte tråd - her kunne en fejlmeddelelse udskrives
            }
            $stmt->close();
        }
    }
    //Hverken kategori eller tråd er valgt
    else {
        // En liste over hovedkategorier vises
        $query = "SELECT id, titel, beskrivelse FROM forum_kategorier ORDER BY id ASC";
        if ($stmt = $mysqli->prepare($query)) {
            $stmt->execute();
            $stmt->bind_result( $id, $titel, $beskrivelse);
            if( $stmt->num_rows > 0) {
                while( $stmt->fetch()) {
                    // Her vises hovedkategorierne
                }
            }
            else {
                // Ingen hovedkategorier - en meddelese kunne vises
            }
            $stmt->close();
        }
    }
}

?>
Avatar billede tobrukDk Novice
05. juni 2012 - 23:37 #12
Ja okay tak fordi du vil lave det men lige nu har jeg mange problemer med at når jeg ligger det ind i databasen..

f.eks her


<form action="#" method="post" name="formular" onsubmit="return validerform ()">
                <?php
                    if ($stmt = $mysqli->prepare('INSERT INTO `forum_traede` (`kategori_id`, `bruger_id`, `tekst`, `dato`, `titel`) VALUES (?, ?, ?, NOW(), ?)')) {
                        $stmt->bind_param('ssss', $katgori_id, $bruger_id, $tekst, $titel);
                        $katgori_id = $_POST["kategori"];
                        $bruger_id = $_SESSION["user_id"];
                        $tekst = $_POST["tekst_indhold"];
                        $titel = $_POST["title"];
                       
                        $stmt->execute();
                        $stmt->close();
                    } else {
                        echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
                    }
                ?>
                    <table border="0">
                        <tr>
                            <td id="tb-w_a"><p>kategori</p></td>
                            <td>:</td>
                            <td><input type="text" name="kategori"></td>
                        </tr>
                        <tr>
                            <td id="tb-w_a"><p>Title</p></td>
                            <td>:</td>
                            <td><input type="text" name="title"></td>
                        </tr>
                    </table>
                <textarea name="tekst_indhold" style="width:716px; height:170px;"></textarea><br />
                <input type="submit" value="Opret indhold">
            </form>


den vil ikke tag det tekst som er ind i "tekst_indhold"...
Avatar billede inteeeL Nybegynder
05. juni 2012 - 23:51 #13
Du bliver ved med at støde ind i samme problemer, når du tester scripts af - og det samme siger jeg til dig hver gang. :-)
- Prøv at debugge; echo $tekst og se, om den egentlig henter indholdet. Sådan her:
<?php
    if ($stmt = $mysqli->prepare('INSERT INTO `forum_traede` (`kategori_id`, `bruger_id`, `tekst`, `dato`, `titel`) VALUES (?, ?, ?, NOW(), ?)')) {
        $stmt->bind_param('iiss', $katgori_id, $bruger_id, $tekst, $titel);
       
        $katgori_id = $_POST["kategori"];
        $bruger_id = $_SESSION["user_id"];
        $tekst = $_POST["tekst_indhold"];
        $titel = $_POST["title"];
       
        echo $tekst;
     
        $stmt->execute();
        $stmt->close();
    } else {
        echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }
?>

<form action="#" method="post" name="formular" onsubmit="return validerform ()">
    <table border="0">
        <tr>
            <td id="tb-w_a"><p>kategori</p></td>
            <td>:</td>
            <td><input type="text" name="kategori"></td>
        </tr>
        <tr>
            <td id="tb-w_a"><p>Title</p></td>
            <td>:</td>
            <td><input type="text" name="title"></td>
        </tr>
    </table>
    <textarea name="tekst_indhold" style="width:716px; height:170px;"></textarea><br />
    <input type="submit" value="Opret indhold">
</form>

Desuden gør du det forkert. Det er meningen, at kategorien skal vælges via en rullemenu (select) bestående af kategorierne samt underkategorierne fra databasen.
Avatar billede tobrukDk Novice
06. juni 2012 - 00:00 #14
åååhhh okay, så er jeg med omkring kategorien :) jeg klare det i morgen / overmorgen .. :) jeg skal lige finde tid til det :D

Jeg har lige prøve at echo det og der kommer intet ude overhovedet.. hmm
Avatar billede tobrukDk Novice
06. juni 2012 - 00:19 #15
jeg synes et er mærkeligt at jeg ikke kan få tekst med eller ligne.. hmm
Avatar billede inteeeL Nybegynder
06. juni 2012 - 00:27 #16
Prøv lige nedenstående hurtigt:
<?php
    if( isset( $_POST['title'])) echo $_POST['tekst_indhold'];
?>

<form action="#" method="post" name="formular" onsubmit="return validerform ()">
    <table border="0">
        <tr>
            <td id="tb-w_a"><p>kategori</p></td>
            <td>:</td>
            <td><input type="text" name="kategori"></td>
        </tr>
        <tr>
            <td id="tb-w_a"><p>Title</p></td>
            <td>:</td>
            <td><input type="text" name="title"></td>
        </tr>
    </table>
    <textarea name="tekst_indhold" style="width:716px; height:170px;"></textarea><br />
    <input type="submit" value="Opret indhold">
</form>
Avatar billede tobrukDk Novice
06. juni 2012 - 14:58 #17
Der ske stadig intet.. hmm
Avatar billede tobrukDk Novice
06. juni 2012 - 15:00 #18
der ske noget efter jeg tog


<script src="http://js.nicedit.com/nicEdit-latest.js" type="text/javascript"></script>
    <script type="text/javascript">bkLib.onDomLoaded(nicEditors.allTextAreas);</script>   
væk fra toppen!!
Avatar billede tobrukDk Novice
06. juni 2012 - 15:51 #19
skal jeg bare find en anden wysiwyg editor til min side
Avatar billede tobrukDk Novice
06. juni 2012 - 15:54 #20
har klart den !!
Avatar billede tobrukDk Novice
06. juni 2012 - 16:02 #21
Nu skal jeg bare have bygge sådan at man kan kun ligge noget ind i databasen hvis man har klikke på sumbit kneppen :)


<?php
                if ($stmt = $mysqli->prepare('INSERT INTO `forum_traede` (`kategori_id`, `bruger_id`, `tekst`, `dato`, `titel`) VALUES (?, ?, ?, NOW(), ?)')) {
                    $stmt->bind_param('ssss', $katgori_id, $bruger_id, $tekst, $titel);
                    $katgori_id = $_POST["kategori"];
                    $bruger_id = $_SESSION["user_id"];
                    $tekst = $_POST["tekst_indhold"];
                    $titel = $_POST["title"];
                   
                    $stmt->execute();
                    $stmt->close();
                } else {
                    echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
                }
            ?>
Avatar billede inteeeL Nybegynder
06. juni 2012 - 17:09 #22
Vil du være rar at tilføje en pre inde i din div, når du opretter kode her på eksperten - eller kode, der indeholder lange sætninger. Det giver et bedre overblik:
- [ div ][ pre] Kode her [ /pre ] [ /div ]

Desuden er kategori_id og bruger_id ikke stringe, men int-værdier. Det bør se sådan her ud:
<?php
    if ($stmt = $mysqli->prepare('INSERT INTO `forum_traede` (`kategori_id`, `bruger_id`, `tekst`, `dato`, `titel`) VALUES (?, ?, ?, NOW(), ?)')) {
        $stmt->bind_param('iiss', $katgori_id, $bruger_id, $tekst, $titel);
       
        $katgori_id = (int)$_POST["kategori"];
        $bruger_id = (int)$_SESSION["user_id"];
        $tekst = $_POST["tekst_indhold"];
        $titel = $_POST["title"];
     
        $stmt->execute();
        $stmt->close();
    } else {
        echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }
?>
Avatar billede tobrukDk Novice
06. juni 2012 - 20:05 #23
Nååårrra ja .. :D

Det havde jeg lige glemt.. :D og det er er ret op på nu :)

lige nu er jeg totalt løse omkring hvordan jeg skal bygge op sådan at man ikke kan klik/tryg på F5 og bare ligger sig ind i databasen altså det vil sige at [b]spam[b] den eller ligne
Avatar billede tobrukDk Novice
06. juni 2012 - 20:07 #24
tænker på den her del af kode så den ikke bliver spam!!


<?php
                if($stmt = $mysqli->prepare('INSERT INTO `forum_traede` (`kategori_id`, `bruger_id`, `tekst`, `dato`, `titel`) VALUES (?, ?, ?, NOW(), ?)'))
                {
                    $stmt->bind_param('iiss', $katgori_id, $bruger_id, $tekst, $titel);
                    $katgori_id = $_POST["kategori"];
                    $bruger_id = $_SESSION["user_id"];
                    $tekst = $_POST["tekst_indhold"];
                    $titel = $_POST["title"];
                   
                    $stmt->execute();
                    $stmt->close();
            } else {
                    echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
            }
            ?>
Avatar billede inteeeL Nybegynder
06. juni 2012 - 21:48 #25
Du tog ikke mit ønske om pre inde i din div til dig.. :-)
Med hensyn til F5-problemet (POST) synes jeg, du før har spurgt ind til dette og fået svaret. Simpelt nok sætter du blot en header på, når dataene er sat i databasen - header("Location:fil.php?godkendt=1");

Senere kan du så tjekke med:
if( isset( $_GET['godkendt']) { echo "Godkendt"; }
Avatar billede inteeeL Nybegynder
06. juni 2012 - 21:50 #26
Hov, der mangler vist en parentes..
Avatar billede tobrukDk Novice
06. juni 2012 - 21:59 #27

<?php
            if( isset( $_GET['godkendt'])
            {
                if($stmt = $mysqli->prepare('INSERT INTO `forum_traede` (`kategori_id`, `bruger_id`, `tekst`, `dato`, `titel`) VALUES (?, ?, ?, NOW(), ?)'))
                {
                    $stmt->bind_param('iiss', $katgori_id, $bruger_id, $tekst, $titel);
                    $katgori_id = $_POST["kategori"];
                    $bruger_id = $_SESSION["user_id"];
                    $tekst = $_POST["tekst_indhold"];
                    $titel = $_POST["title"];
                   
                    $stmt->execute();
                    $stmt->close();
                    echo "Godkendt";
                }       
            } else {
                    echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
                }
            ?>



Parse error: syntax error, unexpected '{' in /home/jesperbo/public_html/xxxxxxxxx.dk/xxxxxx.php on line 38
Avatar billede tobrukDk Novice
06. juni 2012 - 23:57 #28
#26 Lige et svar for nu har du hjælpe mig med omkring hvordan jeg skal bygge det op på og ligne..

så lige et svar så for du dine point. som for hjælpen.. :)

jeg har opret en indhold /indlæg til det problem som jeg har ny omkring at det jeg har problemere med.


http://www.eksperten.dk/spm/964156

håber du hjælp til videre hos mig så jeg kan for klare det :) smile og tak for hjælpe igen!...
Avatar billede inteeeL Nybegynder
07. juni 2012 - 17:36 #29
Svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester