Avatar billede nevil Nybegynder
15. august 2008 - 10:06 Der er 14 kommentarer og
1 løsning

Uønskede line breaks gemmes i MySQL

Jeg er ved at lave et lille redigeringsmodul vha. PHP5 og MySQL, men er løbet ind i et lille irreterende problem at når jeg indtaster en tekst i et TEXTAREA indsættes der (ud over linieskiftene) ekstra '<br />' tags i den tekst der gemmes i MySQL databasen.

1
2
3

bliver første gang jeg gemmer til:

1<br />
2<br />
3

og anden gang der gemmes bliver det til:

1<br /><br />
2<br /><br />
3

osv...

Jeg har forsøgt alt mellem himmel og jord med str_replace, nl2br, strip_tags m.fl. for at komme problemet til livs, men til syneladende uden nogen effekt. Har sågar forsøgt ved to forskellige webudbyderes servere.

Er der nogen der har en løsning på problemet vil jeg blive meget glad :-)
Avatar billede fsconsult.dk Nybegynder
15. august 2008 - 10:08 #1
det lyder mere som et PHP problem.

du er sikker på at det er når du gemmer at de <br> tags kommer, og ikke når du henter det ud til dit TEXTAREA igen ?
Avatar billede w13 Novice
15. august 2008 - 10:35 #2
Det er jo klart. I din tekst er der jo linjeskift efter hvert <\br>, som også vil blive erstattet af endnu et br.

Vis os lige den kode, der gemmer..
Avatar billede nevil Nybegynder
15. august 2008 - 10:37 #3
>fsconsult.dk

Jo, det kan sagtens være, for de er ikke umiddelbart at se hvis jeg kigger i basen med phpMyAdmin, men hvordan slipper jeg så af med dem. Har som nævnt prøvet at sætte et hav af funktioner på det output der kommer fra databasen.

echo '<textarea name="text" '. $itemDisabled. ' cols="48" rows="10" />'. nl2br($searchResultArray['text']). '</textarea>';
Avatar billede nevil Nybegynder
15. august 2008 - 10:41 #4
>w13

Her er uddrag af den del der gemmer:

$queryString = '';
$queryString = $queryString. 'UPDATE xxx SET ';
$queryString = $queryString. 'text="'. $_POST['text']. '", ';
$queryString = $queryString. 'WHERE id='. $id;
doMysqlQuery($queryString);

function doMysqlQuery ($queryString) {
    $db = mysql_connect('localhost', 'xxx', 'xxx');
    mysql_select_db('xxx', $db);
    mysql_query($queryString);
    $error = mysql_error($db);
    $errorNo = mysql_errno($db);
    if ($errorNo <> 0) {
        echo '<br>'. $queryString;
        echo '<br>ERROR: ('. $errorNo. ') '. $error;
    }
    else {
        echo '<br>'. $queryString;
    }
}
Avatar billede nevil Nybegynder
15. august 2008 - 10:43 #5
>fsconsult:

Hov der var lige kommet en lille fejl med (nl2br). Den rigtige kode ser således ud:

echo '<textarea name="text" '. $itemDisabled. ' cols="48" rows="10" />'. $searchResultArray['text']. '</textarea>';
Avatar billede fsconsult.dk Nybegynder
15. august 2008 - 11:40 #6
ok, for du skal da  ikke bruge nl2br når du skriver data ud til textarea, kun når data skal ud udenfor et input element ;)
Avatar billede nevil Nybegynder
15. august 2008 - 12:32 #7
I know, men copy/paste er en farlig ting ;-)
Avatar billede nevil Nybegynder
15. august 2008 - 12:32 #8
Er der nogen der kan komme med nogle idéer til hvordan jeg løser mit problem?
Avatar billede w13 Novice
15. august 2008 - 12:42 #9
Altså du skal ikke bruge:

echo '<textarea name="text" '. $itemDisabled. ' cols="48" rows="10" />'. nl2br($searchResultArray['text']). '</textarea>';

men:

echo '<textarea name="text" '. $itemDisabled. ' cols="48" rows="10" />'.$searchResultArray['text']. '</textarea>';

For ellers bliver der indsat endnu et <br>, hver gang man gemmer.

Men det har du måske rettet?
Avatar billede nevil Nybegynder
15. august 2008 - 12:47 #10
> w13

Ja, det var som nævnt en copy/paste fejl. Her er den aktuelle kode:

// GEM I DB
$queryString = '';
$queryString = $queryString. 'UPDATE xxx SET ';
$queryString = $queryString. 'text="'. $_POST['text']. '", ';
$queryString = $queryString. 'WHERE id='. $id;
doMysqlQuery($queryString);

function doMysqlQuery ($queryString) {
    $db = mysql_connect('localhost', 'xxx', 'xxx');
    mysql_select_db('xxx', $db);
    mysql_query($queryString);
    $error = mysql_error($db);
    $errorNo = mysql_errno($db);
    if ($errorNo <> 0) {
        echo '<br>'. $queryString;
        echo '<br>ERROR: ('. $errorNo. ') '. $error;
    }
    else {
        echo '<br>'. $queryString;
    }
}

// VIS I FORM
echo '<textarea name="text" '. $itemDisabled. ' cols="48" rows="10" />'.$searchResultArray['text']. '</textarea>';
Avatar billede w13 Novice
15. august 2008 - 13:31 #11
Fejlen lader ikke til at ligge i den kode, du viser.

Det er vel et sted, hvor du bruger nl2br?
Avatar billede nevil Nybegynder
15. august 2008 - 18:56 #12
Du har ret - har netop fundet en nl2br i en function der viser noget indhold i en table cell. Nåh, men så fik jeg da tre aftner til at gå med det :-/

Tak for hjælpen !!
Avatar billede w13 Novice
15. august 2008 - 20:13 #13
Så lidt. =)
Avatar billede w13 Novice
15. august 2008 - 20:14 #14
Du skal acceptere mit svar i bunden af denne side ved at markere mit navn i boksen og trykke "Accepter" for at spørgsmålet lukkes. Du har i øvrigt også et par gamle, åbne spørgsmål.
Avatar billede w13 Novice
15. august 2008 - 23:19 #15
Tak for point! :)
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
Computerworld tilbyder specialiserede kurser i database-management

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