Avatar billede tangveje Nybegynder
13. marts 2003 - 03:35 Der er 16 kommentarer og
1 løsning

Textarea - Grænse for mængde af data

Jeg sidder her og er ved at drives til vandvid. Jeg har mit lille site, hvor jeg kan gå ind og tilføje eller ændre sider. Alle siderne ligger i en MySQL database, og selve indholdet ligger i et felt af typen longtext. Ændringen af denne tekst foregår via et textarea som så sendes til PHP og smides ind i datbasen.

Nu er mit problem bare at den somme tider stopper og ikke tager alt teksten med. Den skærer simpelthen min tekst over og tager kun den første del. Men tilsyneladende er det tilfældigt hvornår, altså det er ikke ved x antal tegn, det virker fuldstændigt tilfældigt.

I min php.ini er denne sat

post_max_size = 8M

Og det skulle gerne være mere end rigeligt da vi ikke snakker om mere end ca. 10 kb text der sendes. Men igen, det virker også tilfældigt, så jeg kan heller ikke se hvordan det skulle have nogen betydning.

Min kode, den del der smider ændringerne ind i databasen når jeg retter en side (ved ikke om samme problem findes når jeg opretter en ny side) :

if ( $_POST['url'] ) {
    $id = $_GET['id'] ;

    $url = $_POST['url'] ;
    $main = $_POST['main'] ;
    $doctype = $_POST['doctype'] ;
    $title = $_POST['title'] ;
    $description = $_POST['description'] ;
    $keywords = $_POST['keywords'] ;
    $robots = $_POST['robots'] ;
    $css = $_POST['css'] ;
    $head = $_POST['head'] ;
    $logo = $_POST['logo'] ;
    $top = $_POST['top'] ;
    $topbar = $_POST['topbar'] ;
    $menu = $_POST['menu'] ;
    $content = $_POST['content'] ;

    mysql_query( "UPDATE pages SET url = '$url', main = '$main', doctype = '$doctype', title = '$title', description = $description',
keywords = '$keywords', robots = '$robots', css = '$css', head = '$head', top = '$top', topbar = '$topbar', menu = '$menu', content = '$content' WHERE id = '$id'" ) ;
}

Please, someone hjælp, det er ved at gå mig på nerverne.
Avatar billede erikjacobsen Ekspert
13. marts 2003 - 06:23 #1
Når du udskriver skal du

  print "<textarea ....>";
  print htmlentites($row['description']);
  print "</textarea>";

og når du putter i databasen skal du huske at bruge addslashes,
hvis ikke dette er slået til automatisk.

Ellers må vi se mere kode...
Avatar billede erikjacobsen Ekspert
13. marts 2003 - 06:24 #2
print htmlentities($row['description']);
Avatar billede erikjacobsen Ekspert
13. marts 2003 - 06:25 #3
Nå, ja det er nok feltet 'content', men linien
description = $description',
ser mystisk ud. Du mener vel
description = '$description',
Avatar billede tangveje Nybegynder
13. marts 2003 - 07:33 #4
htmlentities() må for guds skyld ikke bruges i dette tilfælde, da der er tale om en admin side, hvor jeg skal have mulighed for at bruge HTML... Men det kunne du jo ikke vide :) Men har det nogen betydning i denne sammenhæng?

addslashes klarer den automatisk... plejer den i hvert fald :)

Og den lille fejl med den manglende ' skyldes vist at jeg har fået slettet den da jeg pastede koden ind her... Den er der i den oprindelige kode
Avatar billede tangveje Nybegynder
13. marts 2003 - 07:36 #5
Sorry... Overså lige i hvilken sammenhæng du brugte htmlentities(), den er fin nok :) Men har det nogen betydning, jeg mener, det er jo tilsyneladende ikke mit textarea der fejler, det lader til at gå tabt når det sendes, på en eller anden måde.
Avatar billede tangveje Nybegynder
13. marts 2003 - 07:42 #6
Jeg ved ikke hvor meget mere kode der er at vise... Denne lille stump kommer lige efter den forige kode

if ( $_GET['id'] ) {
    $id = $_GET['id'] ;
    $query = mysql_query( "SELECT * FROM pages WHERE id='$id'" ) ;
    $data = mysql_fetch_assoc( $query ) ;
   
    $data = str_replace( "&", "&amp;", $data ) ;
}

Og så er der mit textarea

<textarea cols="10" rows="20" name="content"><?php echo $data['content'] ; ?></textarea>

Og min form

<form method="post" action="editpage.php?id=<?php echo $data['id'] ; ?>">
Avatar billede erikjacobsen Ekspert
13. marts 2003 - 08:29 #7
Joh, hvis der nu står </textarea> i dit felt, så går det galt ... :)
Men det gør der nok ikke. Du kan droppe din str_replace, hvis du bruger
htmlentities - bortset fra den ikke tager et array.

Jeg spekulerer bare på hvor afskæringen sker. Ved indsættelse eller udtræk.
Umiddelbart er der ikke noget anderledes end det jeg gør.
Avatar billede tangveje Nybegynder
13. marts 2003 - 08:37 #8
Ja, det jo rigtigt, forhåbentlig får jeg ikke brug for at indsætte nogen </textarea> foreløbigt :) Det er i hvert fald ikke forklaring, men gid det var, så vidste jeg da hvorfor :)

Jeg tror (uden at være sikker) at det sker før indsættelsen. Men jeg kan ikke lige forklare det. Kan det være en fejl på serveren?
Avatar billede Slettet bruger
13. marts 2003 - 08:56 #9
$sql = UPDATE pages SET url = '$url', main = '$main', doctype = '$doctype', title = '$title', description = $description',
keywords = '$keywords', robots = '$robots', css = '$css', head = '$head', top = '$top', topbar = '$topbar', menu = '$menu', content = '$content' WHERE id = '$id'";

echo $sql;

mysql_query($sql) or die(mysql_error());
Avatar billede tangveje Nybegynder
13. marts 2003 - 09:16 #10
el_barto > Har mine problemer med at fremprovokere fejlen, men nu ved jeg da med sikkerhed at det ikke er ved x antal tegn! Men det er også noget nær det eneste jeg kan komme frem til. Det dukker bare lige pludselig op uden nogen synlig grund, den opdaterer fint indholdet i databasen, men den tager bare ikke det sidste med. Hvis jeg f.eks. ændrer den del den tager med er der ingen problemer, men jeg kan ikke tilføje mere.

Det sgu for mystisk til mit trætte hoved det her :( Tror mere og mere det er en fejl på serveren, men kan bare ikke lige se nogen logik i det
Avatar billede erikjacobsen Ekspert
13. marts 2003 - 10:13 #11
Når du leger med det, så husk at kigge i "vis kilde" om du får det
hele med ud, så det ikke er en dum HTML-fejl, der skærer af.
Kan vi få hele koden (uden passwords) - gerne som link, eller en URL
til afprøvning?
Avatar billede tangveje Nybegynder
13. marts 2003 - 20:52 #12
Kan simpelthen ikke fremprovokere fejlen nu... Har prøvet alverdens underlige ting, men den vil ikke, så hvad end det var ser det ud til at være væk nu. Kunne jo godt tyde på en dum HTML fejl, synes bare det lyder usandsynligt at jeg skulle have lavet den samme fejl så mange gange lige efter hinanden, men man ved jo aldrig :)

Jeg kan ikke rigtigt smide et link, men hvis det kan hjælpe noget, så er hele min kode her www.tangveje.dk/files/editpage.txt

init.php indeholder følgende (uden kodeord :)

<?php
    // Connect to MySQL database
    $db = mysql_connect( "***", "***", "***" ) ;
    mysql_select_db( "***", $db ) ;
?>

Og undskyld tiden, men havde brug for lidt søvn :)
Avatar billede erikjacobsen Ekspert
13. marts 2003 - 22:18 #13
Jeg kan ikke se noget galt...
Avatar billede tangveje Nybegynder
14. marts 2003 - 17:31 #14
Hmm, må bare gå ud fra det var en dum HTML fejl, har ikke kunnet frembringe fejlen siden.

Men læg et svar, så i kan få lidt for jeres hjælp :)
Avatar billede erikjacobsen Ekspert
14. marts 2003 - 17:39 #15
INgen point til mig, tak.
Avatar billede tangveje Nybegynder
14. marts 2003 - 17:50 #16
Helt i orden, man tak alligevel :)
Avatar billede tangveje Nybegynder
15. marts 2003 - 16:09 #17
Så må jeg vist hellere lukke :) Tak for hjælpen
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