webForumDet fria alternativet

Sortera och fixa tecken / från textfil

23 svar · 931 visningar · startad av bassebhu

bassebhuMedlem sedan nov. 20016 480 inlägg
#1

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!

SPiNMedlem sedan mars 20007 896 inlägg
#2

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.

bassebhuMedlem sedan nov. 20016 480 inlägg
#3

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

bassebhuMedlem sedan nov. 20016 480 inlägg
#4

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!

SPiNMedlem sedan mars 20007 896 inlägg
#5

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 );
SPiNMedlem sedan mars 20007 896 inlägg
#6

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?

bassebhuMedlem sedan nov. 20016 480 inlägg
#7

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 ;)

SPiNMedlem sedan mars 20007 896 inlägg
#8

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?

bassebhuMedlem sedan nov. 20016 480 inlägg
#9

ska testa. i morrn!

tack!!!!!

bassebhuMedlem sedan nov. 20016 480 inlägg
#10

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!

SPiNMedlem sedan mars 20007 896 inlägg
#11

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 );
bassebhuMedlem sedan nov. 20016 480 inlägg
#12

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

bassebhuMedlem sedan nov. 20016 480 inlägg
#13

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. :(

bassebhuMedlem sedan nov. 20016 480 inlägg
#14

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,

bassebhuMedlem sedan nov. 20016 480 inlägg
#15

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!

bassebhuMedlem sedan nov. 20016 480 inlägg
#16

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;

?>
SPiNMedlem sedan mars 20007 896 inlägg
#17
$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 );
bassebhuMedlem sedan nov. 20016 480 inlägg
#18

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!

bassebhuMedlem sedan nov. 20016 480 inlägg
#19

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

SPiNMedlem sedan mars 20007 896 inlägg
#20

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?

140 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)