---
title: "Sortera och fixa tecken / från textfil"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/89593-sortera-och-fixa-tecken-från-textfil"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "bassebhu"
published: "2003-11-03T22:32:27.000Z"
updated: "2003-11-24T21:15:39.000Z"
replies: 23
views: 937
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/89593-sortera-och-fixa-tecken-från-textfil"
---

# Sortera och fixa tecken / från textfil

_Sida 1 av 2._

## #1 — bassebhu, 2003-11-03T22:32Z

Hej!

Kör en gästbok från textfil men vill sortera från början av gästboken. Jag vill ha senaste inlägget först! Sen blir det kosntiga tecken när man skriver & och åäö och sånt. Urlencode som ska dit eller nåt?

Har sökt i forumet men är helt blank så jag klarade inte att vända gästboken med rewind själv :( Hjälp?

```
<?
    if (!isset($name) || !isset($email) || !isset($message) || empty($name) || empty($email) || empty($message)) {
         print "&result=Fail";
         print "&errorMsg=" . urlencode("fill in all fields...");
         exit;
    }

    $email = strtolower($email);

    addentry($name, $email, $message);

function addentry($name, $email, $message) {

    $posted = strftime("%D %I:%M %p");

    $message = stripslashes($message);

    $file = fopen('entry.txt', 'a+');

    if (!$file) {
         print "&result=Fail";
         print "&errorMsg=" . urlencode("Could not open entry.txt file. Change CHMOD levels to 766.");
         exit;
    }

    fputs($file, "<font color=\"#000000\">Name:</font> $name\n<font color=\"#000000\">email:</font> <font color=\"#000000\"><u><A href=\"mailto:$email\">$email</A></u></font><br>\n<font color=\"#000000\">posted:</font> $posted\n<font color=\"#000000\">message:</font> $message\n\n");
    fclose($file);

    // Send admin an email when new entry occurs
    // mailAdmin($name, $email);
}

function mailAdmin($name, $email) {
    $mailTo = "Ja <xxx@telia.com>";
    $mailFrom = "From: Guestbook <noreply@email.com>";
    $mailSubject = "New Guestbook Entry";
    $mailBody = "$name ($email) has just posted in your guestbook\n\n";
    mail($mailTo, $mailSubject, $mailBody, $mailFrom);
}

print "&result=okay";
exit;

?>
```

Tack!

Permalänk: https://www.webforum.nu/p/89593

## #2 — SPiN, 2003-11-03T22:39Z

Ok, vi börjar med att visa åäö. Testa att vid skrivningen till filen låta strängen gå igenom funktionen htmlentities().

```
$message = htmlentities( $message );
```

För att skriva till början av filen, öppna med mode 'r+' istället för 'a+'. Då skriver du till början av filen istället, och ditt senaste meddelande hamnar så ledes först när du skriver ut dem.

Permalänk: https://www.webforum.nu/p/1197368

## #3 — bassebhu, 2003-11-03T23:08Z

hmmm nu tömdes hela textfilen och ingenting funkar :D

Permalänk: https://www.webforum.nu/p/1197383

## #4 — bassebhu, 2003-11-03T23:13Z

eller det är nog rätt fast jag måste ha "&result=okay&entries=" först i textfilen för att kunna visa det i flash. men den skriver ju nu så att den textslingan hamnar efter inläggen. what to do? :) 

Tack!

Permalänk: https://www.webforum.nu/p/1197384

## #5 — SPiN, 2003-11-03T23:20Z

Hoppas att jag inte förstörde något för dig nu... \*skäms\* :r

Du får göra det på det här sättet:

```
$fileEntrys = file( 'fil.txt' );

$fPtr = fopen( 'fil.txt', 'w' );
fputs( $fPtr, $message );

for( $i = count( $fileEntrys ) - 1; $i >= 0; $i-- )
     fputs( $fPtr, $fileEntry[ $i ] );

fclose( $fPtr );
```

Säg till om det är något som du inte förstår.

Du bör också göra en nl2br() på din sträng, för att förhindra radbrytningar, det blir fel vid läsningen då.

```
$message = htmlentities( $message );
$message = nl2br( $message );
```

Permalänk: https://www.webforum.nu/p/1197387

## #6 — SPiN, 2003-11-03T23:23Z

Kan du inte hämta filen från PHP och lägga in i Flash?

```
<?php
$staticURL = "&result=okey&entries=";
$page = $staticURL . urlencode( implode( '', file( 'fil.txt' ) ) );
echo $page;
?>
```

Sen anropar du bara PHP-dokumentet istället för textfilen från Flash?

Permalänk: https://www.webforum.nu/p/1197388

## #7 — bassebhu, 2003-11-03T23:24Z

hehe tack. jag förstår lite när jag kollar på ditt exempel men vet inte hur jag ska få in det i min kod :D ;)

Permalänk: https://www.webforum.nu/p/1197389

## #8 — SPiN, 2003-11-03T23:27Z

Testa med min första version och skapa PHP-dokumentet ur mitt förra inlägg som du sedan anropar från Flash. Fungerar inte det?

Permalänk: https://www.webforum.nu/p/1197390

## #9 — bassebhu, 2003-11-03T23:29Z

ska testa. i morrn!

tack!!!!!

Permalänk: https://www.webforum.nu/p/1197391

## #10 — bassebhu, 2003-11-03T23:58Z

Jag vill inte ändra nåt i flashfilen helst eftersom det är ett stort script där med actionsscript som jag verkligen inte har koll på. 

går det att skriva till textfilen med min första kod fast den lägger nya inlägg efter just "&result=okay&entries=" som behövs för att flashen ska hitta posterna?

Det är så jag måste ha det!

och sedan så var den lite lurig mot tecknet & också. den slutade skriva ut om man postade en sådan. den kanske förväntar sig fler variabler då? går att lösa? ;) 

Tack!

Permalänk: https://www.webforum.nu/p/1197397

## #11 — SPiN, 2003-11-04T00:30Z

Ja, det går att lösa. I funktionen addentry():

```
...
$file = fopen('entry.txt', 'r+');
fseek( $file, 21 );
...
```

Som du ser lade jag endast till en rad ( fseek()-raden ) direkt efter att du öppnar din fil. Det här kräver dock att din URL-sträng alltid är 21 tecken lång, ändras den - fungerar inte längre PHP-dokumentet som det ska.

Lurig mot &-tecknet? Skumt. Antagligen förväntar den sig en till variabel i frågesträngen i URL:en... Borde gå att lösa genom att köra en urlencode() på strängen först:

```
$message = urlencode( $message );
```

Permalänk: https://www.webforum.nu/p/1197404

## #12 — bassebhu, 2003-11-04T12:34Z

shyrre! ska testa när jag kommer hem. :)

Permalänk: https://www.webforum.nu/p/1197616

## #13 — bassebhu, 2003-11-04T22:14Z

hmm... nu skriver den rätt väg, men ersätter föregående inlägg med det nya och visar därmed bara ett inlägg =/ :OO 

åäö visas fortfarande kosntigt :(  

jobbig grej. hatar att spara till textfil!! men kan inte ha nån annan databas. :(

Permalänk: https://www.webforum.nu/p/1197928

## #14 — bassebhu, 2003-11-06T01:36Z

men vad skumt! ibland händer det att det hamnar massa tecken emellan poster. tex. 

message=blabl

e

o

messade=blabla

det emellan kommer troligtvis när man skriver "olagliga" tecken.

kanske därför den slutar spara poster med det nya systemet med r+ och seek.

den ersätter vara senaste posten heöa tiden. men den ersätter inget som fanns där från det gamla systemet. hehe allt är skumt!! ytoligen så är det att den muppar sig vid några teckenfel =/

tack för all hjälp!

Mvh,

Permalänk: https://www.webforum.nu/p/1198460

## #15 — bassebhu, 2003-11-23T12:46Z

Dags att fila på det här igen... ;) 

Jag fick det nästan att funka med:

```
$file = fopen('entry.txt', 'r+');
fseek( $file, 21 );
```

Enda problemet är att när den sökt sig förbi de första 21 tecknena så börjar den skriva över det som står = blir helt fel!

**Kan man säga till att den ska börja skriva efter 21 tecken, men bara fylla ut - inte skriva över!? Då skulle nämligen allt fungera!**

Det andra sättet var ju att vända på alla inlägg men eftersom jag måste ha med de där första 21 tecknena för att det ska fungera med flashen så är det nog en krångligare väg :( 

Tack!

Permalänk: https://www.webforum.nu/p/1212374

## #16 — bassebhu, 2003-11-23T13:09Z

Koden ser nu ut så här:

```
<?
    if (!isset($name) || !isset($email) || !isset($message) || empty($name) || empty($email) || empty($message)) {
         print "&result=Fail";
         print "&errorMsg=" . urlencode("fill in all fields...");
         exit;
    }

    $email = strtolower($email);

    addentry($name, $email, $message);

function addentry($name, $email, $message) {

    $posted = strftime("%D %I:%M %p");

    $message = stripslashes($message);

    $file = fopen('entry.txt', 'r+');
	fseek( $file, 21 );

    if (!$file) {
         print "&result=Fail";
         print "&errorMsg=" . urlencode("Could not open entry.txt file. Change CHMOD levels to 766.");
         exit;
    }

    fputs($file, "Name: $name\nemail: <u><A href=\"mailto:$email\">$email</A></u>\nposted: $posted\nmessage: $message\n\n");
    fclose($file);

    // Send admin an email when new entry occurs
    // mailAdmin($name, $email);
}

function mailAdmin($name, $email) {
    $mailTo = "Ja <xxx@telia.com>";
    $mailFrom = "From: Guestbook <noreply@email.com>";
    $mailSubject = "New Guestbook Entry";
    $mailBody = "$name ($email) has just posted in your guestbook\n\n";
    mail($mailTo, $mailSubject, $mailBody, $mailFrom);
}

print "&result=okay";
exit;

?>
```

Permalänk: https://www.webforum.nu/p/1212395

## #17 — SPiN, 2003-11-23T13:21Z

```
$filePointer = fopen( 'fil.txt', 'r+' );
fseek( $filePointer, 21 );

$buffer = "";
while( !feof( $filePointer ) ) {
     $buffer .= fread( $filePointer, 128 );
}

fseek( $filePointer, 21 );
fwrite( $filePointer, "Ny information till textfilen\r\n" );
fwrite( $filePointer, $buffer );
fclose( $filePointer );
```

Permalänk: https://www.webforum.nu/p/1212402

## #18 — bassebhu, 2003-11-23T13:39Z

Tack! Men jag får inte in det i min kod. Den slutar ladda.

```
<?
    if (!isset($name) || !isset($email) || !isset($message) || empty($name) || empty($email) || empty($message)) {
         print "&result=Fail";
         print "&errorMsg=" . urlencode("fill in all fields...");
         exit;
    }

    $email = strtolower($email);

    addentry($name, $email, $message);

function addentry($name, $email, $message) {

    $posted = strftime("%D %I:%M %p");

    $message = stripslashes($message);
	

$message = htmlentities( $message );
$name = htmlentities( $name );
$message = urlencode( $message );
$name = urlencode( $name );

    
$file = fopen( 'fil.txt', 'r+' );
fseek( $file, 21 );

$buffer = "";
while( !feof( $file ) ) {
     $buffer .= fread( $file, 128 );
}

fseek( $file, 21 );

    if (!$file) {
         print "&result=Fail";
         print "&errorMsg=" . urlencode("Could not open entry.txt file. Change CHMOD levels to 766.");
         exit;
    }

    fputs($file, "Name: $name\nemail: <u><A href=\"mailto:$email\">$email</A></u>\nposted: $posted\nmessage: $message\n\n");
    fwrite( $file, $buffer );
	fclose($file);

    // Send admin an email when new entry occurs
    // mailAdmin($name, $email);
}

function mailAdmin($name, $email) {
    $mailTo = "Ja <xxx@telia.com>";
    $mailFrom = "From: Guestbook <noreply@email.com>";
    $mailSubject = "New Guestbook Entry";
    $mailBody = "$name ($email) has just posted in your guestbook\n\n";
    mail($mailTo, $mailSubject, $mailBody, $mailFrom);
}

print "&result=okay";
exit;

?>
```

Har köttat dit några htmlentities och urlencodes för att fixa åäö som blev fel. Det är inte heller rätt än. Hade jag bara urlencode slutade den skriva ut. Hade jag bara htmlentities så slutade den också skriva ut och skrev ett frågetecken i flashen. Hade jag både htmlentities och urlencode så stannade den åtminstone inte, men den skriver ut html-koden för alla åäö =/ Idéer?

Tack!

Permalänk: https://www.webforum.nu/p/1212411

## #19 — bassebhu, 2003-11-23T19:45Z

någon som har nån idé? :)

Permalänk: https://www.webforum.nu/p/1212645

## #20 — SPiN, 2003-11-23T20:51Z

Var stannar den? Hur ser textfilen ut efter att du kört filen? Vad händer förutom att sidan stannar, några andra effekter?

Permalänk: https://www.webforum.nu/p/1212671

---

Tråden på webben: https://www.webforum.nu/amne/php/89593-sortera-och-fixa-tecken-från-textfil  
Nästa sida: https://www.webforum.nu/amne/php/89593-sortera-och-fixa-tecken-från-textfil/page2.md
