Avatar billede delphiuser Mester
21. februar 2014 - 11:56 Der er 21 kommentarer og
1 løsning

hvorfor viser den <br>

Hej eksperter

Jeg sidder og er i gang med at lave et lille system til min side hvor jeg gerne vil bruge BBCode tags. Men syntes absolut ikke at det virker efter min hensigt...

Problem stilling.
-Når jeg uploader et indlæg viser den <br> kode i indlægget. skal den helst ikke.
-når jeg bruger [code][/code] tag skulle den gerne lave en box med min kode i.
-Jeg vil gerne kunne bruge alle tegn i min textarea. men som det køre nu kan jeg bruge " når jeg skriver en kode og ikke ' hvilket genere mig en hel del.

Her kommer kommer min uploadform med upload script.

function addquestion() {
    ?>
    <table border="0" cellpadding="0" cellspacing="0" width="750" align="center">
    <form action="<?php $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
    <input type="hidden" name="forum_user_id" value="<?php echo $_SESSION['user_id']; ?>">
    <input type="hidden" name="forum_date" value="<?php echo date("d-m-Y"); ?>">
    <tr>
        <th colspan="3">Opret Sp&oslash;rgsm&aring;l</th>
    </tr>
    <tr>
        <td width="140" height="20">Brugernavn</td>
        <td width="10" height="20" align="center">:</td>
        <td width="600" height="20"><input type="text" name="forum_user" value="<?php echo $_SESSION['username']; ?>" class="input"></td>
    </tr>
    <tr>
        <td width="140" height="20">Overskrift</td>
        <td width="10" height="20" align="center">:</td>
        <td width="600" height="20"><input type="text" name="forum_title" class="input"></td>
    </tr>
    <tr>
        <td width="140" height="20">Kategori</td>
        <td width="10" height="20" align="center">:</td>
        <td width="600" height="20"><select name="forum_cat" class="input">
        <?php
        $sql = "select * from categories order by cat_title";
        $list = mysql_query($sql);
        if(mysql_num_rows($list)) {
            while($row = mysql_fetch_assoc($list)) {
                $title = $row['cat_title'];
                $id = $row['cat_id'];
                echo '<option value="'.$id.'">'.$title.'</option>';
            }
        }
        ?>
        </select></td>
    </tr>
    <tr>
        <td width="140" height="20">Antal Point</td>
        <td width="10" height="20" align="center">:</td>
        <td width="600" height="20"><input type="text" name="forum_points" class="input"></td>
    </tr>
    <tr>
        <td colspan="3" height="20">Beskrivelse</td>
    </tr>
    <tr>
        <td colspan="3" height="200"><textarea name="forum_desc" class="desc"></textarea></td>
    </tr>
    <tr>
        <td colspan="2" height="20"><input type="submit" name="addquest" value="Opret Sp&oslash;rgsm&aring;l"></td>
        <td width="600" height="20"><input type="reset" value="Fortryd"></td>
    </tr>
    </form>
    </table>
    <?php
    if(isset($_POST['addquest'])) {
        // trækker point fra bruger med det samme
        $forum_points = $_POST['forum_points'];
        $forum_user = $_POST['forum_user'];
        $forum_title = $_POST['forum_title'];
        $forum_cat = $_POST['forum_cat'];
        $forum_desc = nl2br($_POST['forum_desc']);
        $forum_user_id = $_POST['forum_user_id'];
        $forum_date = $_POST['forum_date'];
        $sql = "select point_antal from users where user_id='".$_SESSION['user_id']."'";
        $point = mysql_query($sql);
        if(mysql_num_rows($point)) {
            while($row = mysql_fetch_assoc($point)) {
                $old_point = $row['point_antal'];
                $saldo = $old_point - $forum_points;
                mysql_query("update users set point_antal='$saldo' where user_id='".$_SESSION['user_id']."'");
            }
        }
        $sql1 = "insert into forum(forum_title, forum_desc, forum_date, forum_user, forum_points, forum_cat, forum_user_id) values('$forum_title', '$forum_desc', '$forum_date', '$forum_user', '$forum_points', '$forum_cat', '$forum_user_id')";
        mysql_query($sql1) or die(mysql_error());
        echo '<p class="home">Du har nu oprettet sp&oslash;rgsm&aring;let<br><b>'.$forum_title.'</b>';
    }
}

Så langt så godt. Så her jeg prøvet at lave et lille BBCode tag function. den ser så sådan her ud.

function BBCode($string) {
    $string = htmlentities($string);
    $search = array(
        '@\[(?i)code class="code"\](.*?)\[/(?i)code\]@si',
        '@\[(?i)php\](.*?)\[/(?i)php\]@si',
    '@\[(?i)css\](.*?)\[/(?i)css\]@si',
    '@\[(?i)asp\](.*?)\[/(?i)asp\]@si',
    '@\[(?i)script\](.*?)\[/(?i)script\]@si'
    );
   
    $replace = array(
        '<code>\\1</code>',
          '<php>\\1</php>',
    '<css>\\1</css>',
    '<asp>\\1</asp>',
    '<script>\\1</script>'       
    );
    return preg_replace($search , $replace, $string);
}
Om det virker efter hensigten nej. For efter hensigten skal dan lave en box til min kode. så den er  særskilt fra resten af teksten. men lige nu kan jeg se min kode men som sagt ikke efter hensigten.

her kommer så den funktion jeg bruger til at hente hele indlægget ud med.

function show_quest() {
    ?>
    <table border="0" cellpadding="0" cellspacing="0" width="750" align="center">
    <?php
    if($_GET['qid']) {
        $qid = $_GET['qid'];
        $sql = "select * from forum where forum_id='$qid'";
        $show = mysql_query($sql);
        if(mysql_num_rows($show)) {
            while($row = mysql_fetch_assoc($show)) {
                $title = $row['forum_title'];
                $dato = $row['forum_date'];
                $user = $row['forum_user'];
                $point = $row['forum_points'];
                $desc = $row['forum_desc'];
                ?>
                <tr>
                    <th><?php echo $title;?></th>
                </tr>
                <tr>
                    <td><?php echo $dato . ' ' . $user . ' ' . $point; ?></td>
                </tr>
                <tr>
                    <td><?php echo nl2br(BBCode($desc)); ?></td>
                </tr>
                <?php
            }
        }
    }
   
    ?>
    </table>
    <?php
}
Som i kan se så kalder jeg en BBCode function frem i den linie hvor selve indlægget bliver hentet frem. Her kommer så hvordan mit output ser ud.
-----------------------------------------------------------------
<br />
Dette er en test.
<?php<br />
echo "hello world";<br />
?>
<br />
Lad os se om det virker.
-----------------------------------------------------------------

Som i kan se virker det ikke efter hensigten. så jeg håber i kan hjælpe mig. På forhånd tak for hjælpen.

Delphiuser
Avatar billede repox Seniormester
21. februar 2014 - 12:03 #1
<?php echo nl2br(BBCode($desc)); ?>

nl2br sætter <br /> ind hvor der er en newline (\n).
Avatar billede delphiuser Mester
21. februar 2014 - 12:24 #2
ok men når jeg så fjerner nl2br kommer det bare ud i en køre.

hvad kan jeg gøre for at fjerne <br> tagget
Avatar billede repox Seniormester
21. februar 2014 - 12:25 #3
Ikke forstået?
Du vil ikke have at det bare kommer ud i en køre, men du vil fjerne det som gør at det ikke sker?
Avatar billede repox Seniormester
21. februar 2014 - 12:27 #4
Ah, nu er jeg med... Det er fordi den rent visuelt viser de tags.
Det er fordi at du indsætter dem i databasen når opretter din entry:

$forum_desc = nl2br($_POST['forum_desc']);

Fjern nl2br derfra og brug kun funktionen når du skal vise data.
Avatar billede delphiuser Mester
21. februar 2014 - 12:32 #5
jep den har jeg fjernet.
nu er mit problem bare at når jeg bruger mit tag [code][/code]
så viser den selt ikke noget selvom at det bliver gemt i min database.
Avatar billede delphiuser Mester
21. februar 2014 - 12:35 #6
Når jeg laver et indlæg og undlader [code][/code] taget så kan jeg se det hele og det står fint. men når jeg bruger mit [code][/code] tag skriver den slet ikke noget overhovedet.

kunne jo godt tænke mig at når tagget bliver brugt at den laver en boks hvor at koden kommer ind i.
Avatar billede repox Seniormester
21. februar 2014 - 12:45 #7
Det forstår jeg ikke?
Avatar billede delphiuser Mester
21. februar 2014 - 12:51 #8
når jeg laver et indlæg og skriver

[code]
<?php
echo 'hello world';
?>
[/code]

er mit output ingenting. så er der tomt. selvom at det står i min database.
men laver jeg mit indlæg hvor jeg ikke laver [code][/code] tagget
så viser den i mit output.

<?php
echo 'hello world';
?>

men vil jeg gerne have min kode ind i box. sådan at den ligesom bliver udskilt fra resten af indlægget. håber du forstår hvad jeg mener.
Avatar billede delphiuser Mester
21. februar 2014 - 12:52 #9
ja nu har den fjernet mit code tag.
Avatar billede delphiuser Mester
21. februar 2014 - 16:44 #10
Når jeg lave visse bestemte tegn i min kode i textarea så vil den ikke uploade til min server? hvorfor vil den ikke det?

hvordan kan jeg gøre så alle tegn bliver accepteret?
Avatar billede delphiuser Mester
21. februar 2014 - 17:26 #11
repox læg et svar og du får pointene
Avatar billede repox Seniormester
22. februar 2014 - 12:50 #12
Fandt du af hvorfor den ikke tog imod specielle tegn?
Avatar billede MadsHaupt Juniormester
22. februar 2014 - 15:19 #13
Hvis du skal uploade det til en database, så kan du ikke bruge tegnet ' fordi den tolker det som en kommando, prøv at ærstatte tegnet ' med ' det vil blive vist som tegnet ' når det bliver vist på siden.

Man kan ikke bruge tags inde i en textarea, så det kan ikke lad sig gøre at lave en boks i en textarea, men det kan godt lad sig gøre at lave noget i teksten om til tags, inden du sender det til databasen.
Avatar billede MadsHaupt Juniormester
22. februar 2014 - 15:29 #14
Men der er en anden måde at lave det på, her er et eksemepel, du skal bruge det i eksemplet og noget javascript.
<div style="width: 100px; height: 100px; background-color: red;" contenteditable="true"></div>
Avatar billede repox Seniormester
22. februar 2014 - 18:59 #15
MadsHaupt, selvfølgelig kan man bruge både ' og " tegnene, hvis man vil indsætte dem i databasen - man skal bare huske at escape sit input eller bruge prepared statements.

Og selvfølgelig kan man bruge både tags, BBcode, markdown eller hvad der nu falder dig ind i et textarea! Hvordan troe du ellers Eksperten.dk virker? Eller resten af nettet for den sags skyld?
Avatar billede MadsHaupt Juniormester
22. februar 2014 - 20:22 #16
repox det jeg mener med at man ikke kan bruge tags i en textarea er at man ikke kan få vist for eksempel et div tag som en box i en textarea.
Avatar billede repox Seniormester
22. februar 2014 - 21:54 #17
At bruge contenteditable er heller ikke en reel løsning på netop den problematik uden at lave scripts til at manipulere DOM'en i feltet.
Avatar billede MadsHaupt Juniormester
23. februar 2014 - 15:04 #18
delphiuser har du fået svar på dit spørgsmål?.
Avatar billede delphiuser Mester
02. marts 2014 - 11:36 #19
ja det har jeg. så læg et svar og pointene tilfalder jer eller hvem af jer der nu vil have dem
Avatar billede MadsHaupt Juniormester
02. marts 2014 - 11:55 #20
Her er der svar, men er det mig der har givet dig løsningen på problemet?.
Avatar billede delphiuser Mester
02. marts 2014 - 12:43 #21
det er jer begge to. så venter lige på repox giver et svar så i kan dele pointene...
Avatar billede delphiuser Mester
02. marts 2014 - 21:52 #22
madsHaupt du får pointene.
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