22. august 2008 - 01:30Der er
12 kommentarer og 1 løsning
problem med textarea input
jeg har et mini-nyhedsscript der giver lidt bøvl
det er meningen at jeg skal kunne skrive en ca 3 linjers nyhed og så smide den ind i min indstillinger tabel og så bryde den op når jeg skal hente nyhederne
hvis jeg skriver en linje, så går det helt fint, den gemmer som den skal og alt er jul og glade dage.
men hvis jeg skriver flere linjer i samme nyhed (hver nyhed har sit eget textarea) så bryder den det op og smider hver linje ind som en seperat nyhed. Det er jo ikke meningen!
troede løsningen var nem med en enkelt nl2br men det virker heller ikke.
her er funktionen:
function RedigerNyheder($PostNyhed){ global $MySQL;
// Lav arrayet om til en streng. foreach ($PostNyhed as $i => $Nyhed){
// Send afsted til databasen. Send('UPDATE `'.$MySQL[Praefix].'Indstillinger` SET `Vaerdi` = "'.$Nyheder.'"');
}
alle nyhederne ligger i tabellen således: nyhed 1\r\nNyhed 2\r\nNyhed 3 etc. og så bryder jeg dem op senere. og det er så meningen at har man linjeskift så skal linjen se således ud: Nyhed 4 linje 1<br />linje2<br />linje 3\r\nNyhed 5
men den indsætter de ekstra linjer med et \r\n efter <br /> så det kommer til at se ud således: Linje 1<br />\r\nLinje 2<br />\r\n
jeg har med vilje ikke lavet en tabel kun til nyheder da det kommer til at være meget sparsomt med nyheder som jeg kommer til at bruge.
jeg har prøvet med nl2br og str_replace uden hjælp, hvad er det lige jeg gør galt?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Er det ikke ligsom fordi du tilføjer ekstra linjeskift: $Nyheder = $Nyheder.nl2br($PostNyhed[$i]).'\r\n';
Og jeg må indrømme at jeg udover det, slet ikke forstår hvordan din kode hænger sammen. Hvis jeg, og sikker andre, skal forstå det bedre bliver du nok nød til at vise lidt mere kode, bl.a. kan du vise din form, hvordan du henter data og viser dem samt hvordan de data er gemt i din database.
// Send så den opdaterede streng til databasen Send('UPDATE `'.$MySQL[Praefix].'Indstillinger` SET `Vaerdi` = "'.$AlleNyheder.'" WHERE `Variabel` = "Nyheder"');
}
// Skal vi opdatere noget, slette noget, eller skal vi bare komme i gang? if(isset($_POST[RedigerNyhederOK])) RedigerNyheder($_POST[Nyhed]); elseif(isset($_POST[SletValgte])) SletNyheder($_POST[Fjern]);
?> <form action="<?php echo $_SERVER[REQUEST_URI]; ?>" method="post"> <p>Du skal kun indtaste en nyhed i hvert felt, klik på linket under for at tilføje flere bokse. Tomme bokse ignoreres når der gemmes.</p> <table width="85%" cellpadding="5" cellspacing="0" border="0" align="center"> <tr> <th width="50%"></th> <th align="left" width="45%">Gennemse</th> <th align="center" width="5%"><input type="checkbox" onclick="markerAlle(this, this.form);" /></th> </tr> <?php
// Hent nyheder og tryl det om til et array. $Nyheder = Hent('SELECT `Vaerdi` FROM `'.$MySQL[Praefix].'Indstillinger` WHERE `Variabel` = "Nyheder"');
if (!checkform[i].disabled) checkform[i].checked = headerfield.checked;
} }
function ydreHTML(element, toValue){
if (typeof(element.outerHTML) != 'undefined') element.outerHTML = toValue;
else{ var range = document.createRange(); range.setStartBefore(element); element.parentNode.replaceChild(range.createContextualFragment(toValue), element);
Fik idéen da jeg snuste rundt i SMF's databaser og så hvordan de håndterede et mindre nyhedsscript. og har allerede en Indstillinger tabel der håndterer andre indstillinger som jeg kan ændre efter behov.
jeg indsætter \r\n til slut så jeg så senere kan dele nyhederne op.
Jeg vil på det kraftigste opfordre dig til at ændre din database struktur med det samme! Den måde du bruger databasen på at intet med database at gøre. Med din struktur kan du foreksempel ikke hente den nyeste nyhed ud, men kun alle nyheder. Flere data af samme type gemmes aldrig i samme felt i databasen, om de så er delt med \n\r, komma eller anden karakter.
De beste for dig vil være at lave en ekstra tabel som indeholder alle dine nyheder i hver sig række. Derved kan du sortere og ud kun et bestemt antal rækker efter dit eget valg, samt at redigere en nyhed uden at de andre bliver påvirket.
En anden ting som jeg lige falder over er, at du forhåbelig IKKE erklære nye funktioner inde i en anden funktion. Det er rigtig rigtig meget forkert brug af funktioner.
Synes bare det var rimelig meningsløst at lave en hel tabel hvis man ikke skal bruge mere end 3-4 nyheder. Der skal ikke stå dato på, der skal ikke være en titel. Det hele skal smides ind i en fader der (sjovt nok) fader mellem beskederne.
og mht. funktionerne, nej, det var bare for at få dem med... også. min funktionsfil er bare rodet.
Det er da langt mere simpelt at vedligeholde en rigtig opbygget tabel, end at have alle de problemer du har. Om du så kun har to nyheder, hvor det nok vil være nemmere at have det gemt i en xml fil, så er det meget bedre kode og nemmere for dig selv hvis de ligger rigtigt.
Men til dit spørgsmål, så skyldes det at nl2br ikke fjerne \r\n fra linjerne, men derimod kun indsætter en <br /> hvergang den finder et \r\n. Det betyder at du, i dit tilfælde skal fjerne \r\n efter du har brugt nl2br og så til sidst tilføje \r\n. Det kunne se ud som følgende: $Nyheder .= str_replace( array("\r\n", "\n", "\r"), "", nl2br($PostNyhed[$i])) . '\r\n';
Så kommer bare problemet når du skal redigere nyhederne. For så skal du først splitte nyhederne op, dernæst skal du udskifte alle <br /> med \r\n før du kan vise dem i de forskellige textarea's.
Når du nu skifter om til en tabel, så søg for at du gemmer teksten som rå tekst, dvs du gemmer den ikke med <br> <br> sætter du først ind når du viser teksten, det gør at det er nemmere at redigere teksten på et senere tidspunkt
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.