1

Topic: felsök min gästbok

denna gästbok har jag knopat ihop: http://g3wd.mine.nu:8080/index.php?content=gb

buggar som jag vet om:
*Den vill inte göra email adressen klick bar <a herf="mailto: blabvala> mail </a> vill inte funka
*Skriver man ett inlägg på 2 rader eller mer så flyttar raderna ner till näst namn/epost/datum fält...
*alla får mitt IP :/
*nya medelanden läggs högs upp och inte längs ner

några fler?

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

Re: felsök min gästbok

Hehe. Det där med två rader upptäckte jag. Det blev lite tokigt :-)

Orsaken till att det inte blir någon länk till e-postadressen är att du har gjort ett litet "stavfel" i HTML-koden. <a herf= står det. Det ska vara <a href=.

"Programming is like sex: one mistake and you have to support it for the rest of your life."

3

Re: felsök min gästbok

åh, ibland bli blind för sina egna missar, någon som känner igen sig? :-P

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

4

Re: felsök min gästbok

ARGH!
får inte bukt med IP problemet...
http://g3wd.mine.nu:8080/misc/gb.zip här e sårsen, hjälp mig du mäktiga kennel :-)

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

Re: felsök min gästbok

Hmm. Du använder gethostbyname() vilken gör en vanlig dns lookup. Det behöver du inte. Bara spara $REMOTE_ADDR direkt i filen istället. Varför det alltid blir ditt IP har jag ingen aning om. Det måste vara det faktum att du använder gethostbyname() som ställer till det. Om du vill kan du använda min funktion för att försöka få tag på rätt IP:

function getRemoteAddress()
{
    if( isset( $_SERVER['HTTP_CLIENT_IP'] ) )
        return $_SERVER["HTTP_CLIENT_IP"];
    else if( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) && strlen( $_SERVER['HTTP_X_FORWARDED_FOR'] ) <= 15 )
        return $_SERVER['HTTP_X_FORWARDED_FOR'];
    else
        return $_SERVER["REMOTE_ADDR"];
}
"Programming is like sex: one mistake and you have to support it for the rest of your life."

Re: felsök min gästbok

Ett annat tips är att använda serialize() och unserialize(). Ta en titt på de funktionerna.

"Programming is like sex: one mistake and you have to support it for the rest of your life."

7 (edited by GÖWD 2002-06-23 19:17)

Re: felsök min gästbok

hmm nu skriver den inte ut IP:t alls
har ändat gb_send.php till detta:

<?
function getRemoteAddress()
{
    if( isset( $_SERVER['HTTP_CLIENT_IP'] ) )
        return $_SERVER["HTTP_CLIENT_IP"];
    else if( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) && strlen( $_SERVER['HTTP_X_FORWARDED_FOR'] ) <= 15 )
        return $_SERVER['HTTP_X_FORWARDED_FOR'];
    else
        return $_SERVER["REMOTE_ADDR"];
}

$namn = $_POST[namn];
$msg = $_POST[msg];
$mail = $_POST[mail];
$ip = $getRemoteAddress; 
$postat = date("d/m-y  H:i:s");                            
$cfile = "namn.txt"; 

$fp = fopen($cfile, "a"); 
fwrite($fp, "$namn | $msg | $postat | $ip |$mail|\n"); 
fclose($fp); 

#header("Location: index.php?content=gb");
Echo("<center>
<font face=verdana size=3><b> Ditt gästboksinlägg skickades felfritt ;-) </b><br>
<font size=1>Du skickas nu vidare till gästboken, om din browser inte skickar dig vidare eller om du inte orkar vänta klicka <a href=index.php?contens=gb> här</a></font>");
?>

kollade serialize() i manulen, fattar inte vad det ska vara bra till :/

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

8

Re: felsök min gästbok

weeee har fixat rad problemet... bara IP grejjen kvar nu :)

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

Re: felsök min gästbok

Ändra:

$ip = $getRemoteAddress;

till

$ip = getRemoteAddress();


Angående serialize(). Denna funktion använder man för att omvandla en array till en sträng som man t.ex. kan skriva till en fil eller sätta i en cookie osv. I ditt fall skulle du t.ex. kunna sätta in namn, e-mail, ip osv i en array och sen använda serialize() för att göra detta till en sträng och sen skriva denna sträng till filen. När du sen skulle visa ett inlägg skulle du läsa strängen från filen och köra unserialize() på den som omvandlar tillbaka den till en array. En av fördelarna skulle t.ex. vara att du hur enkelt som helst skulle kunna lägga till nya poster i din form och bara smälla in dem i arrayen innan du kör serialize. Det skulle också tillåta namn och e-mail att innehålla vilka tecken som helst. Om man t.ex. skrev "| bajs |" som meddelande i din gästbok skulle det väl bli lite tokigt när du skriver den till filen med tanke på att du använder | som en avgränsare mellan data. Med serialize skulle detta inte vara ett problem.

"Programming is like sex: one mistake and you have to support it for the rest of your life."

Re: felsök min gästbok

När du ska spara ett nytt inlägg:

$user[] = $_POST[namn];
$user[] = $_POST[msg];
$user[] = $_POST[mail];
$user[] = getRemoteAddress(); 
$user[] = date("d/m-y  H:i:s");                            

$userString = serialize( $user );
// $userString innehåller nu en sträng med alla data i vår array $user

$cfile = "namn.txt"; 

$fp = fopen( $cfile, "a"); 
fwrite($fp, "$userString\n"); 
fclose($fp); 

När du ska skriva ut ett inlägg:

$gb = file ("namn.txt");

while (list ($key, $val) = each ($gb)) {    

$this = unserialize( $val );

$v1 = $this[0]; //namn
$v2 = $this[1]; //medelandet
$v3 = $this[2]; //postat när
$v4 = $this[3]; //ip
$v5 = $this[4]; //email
$count++;

// skriv ut inlägget...
"Programming is like sex: one mistake and you have to support it for the rest of your life."

11

Re: felsök min gästbok

allright det låter ju sunt... :-)

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

Re: felsök min gästbok

Jag kom precis på att $v1 osv var i fel ordning. Jag kom också på att du kan använda list() som är jävligt smidigt. Såhår skulle det se ut då:

list( $v1, $v2, $v3 osv osv ) = unserialize( $val );

På detta sätt behöver man inte "mellanlagra" det i en array för att sen hämta ut värdena en och en.

"Programming is like sex: one mistake and you have to support it for the rest of your life."

13

Re: felsök min gästbok

whoopido fixat...

bara en sak som stör mig nuv hur fn får jag nya inläggen att visas högs upp... :/

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

Re: felsök min gästbok

Ingen vacker lösning, men kör array_reverse() på $gb efter du läst in hela filen med file().

"Programming is like sex: one mistake and you have to support it for the rest of your life."

15 (edited by GÖWD 2002-06-23 22:31)

Re: felsök min gästbok

varför inte vacker?
edit: funkar inte alls med den count metoden jag använder nu..

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

Re: felsök min gästbok

Hmm. Vad händer då? Du kanske måste köra reset( $gb ) efter array_reverse().

"Programming is like sex: one mistake and you have to support it for the rest of your life."

17

Re: felsök min gästbok

den räknade som vanligt, det inlägget som ligger närmast toppen fick #1 och sedan räknades det uppoy ju långre ner man kom i listan...
nummerna var altså oberone av inläggen...

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

Re: felsök min gästbok

Aha, du menade det. Gör såhär. Efter att du initialiserat $gb kör du:

$count = count( $gb );

Sen räknar du ner $count istället för att räkna upp.

$count--;

"Programming is like sex: one mistake and you have to support it for the rest of your life."

Re: felsök min gästbok

Förresten, väldigt leet signatur :-)

"Programming is like sex: one mistake and you have to support it for the rest of your life."

20

Re: felsök min gästbok

mjo... FUI så står det FUN inte PUN om du nu trodde det
:-P

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

Re: felsök min gästbok

GÖWD wrote:

varför inte vacker?

Tja, array_reverse() kommer vara en ganska tung operation för PHP när du har en massa inlägg. En lite snyggare lösning hade varit att inte appenda nya inlägg utan att på något sätt lägga dem först i filen istället. Det kräver dock lite mer kod.

"Programming is like sex: one mistake and you have to support it for the rest of your life."

Re: felsök min gästbok

GÖWD wrote:

mjo... FUI så står det FUN inte PUN om du nu trodde det
:-P

Va fan! Vill du bli bannad eller? :-)

"Programming is like sex: one mistake and you have to support it for the rest of your life."

23

Re: felsök min gästbok

Kennel wrote:

Tja, array_reverse() kommer vara en ganska tung operation för PHP när du har en massa inlägg. En lite snyggare lösning hade varit att inte appenda nya inlägg utan att på något sätt lägga dem först i filen istället. Det kräver dock lite mer kod.

jo jag provade först genom att bara ändra vilkoren (kallas det det?) för fopen. men det finna ingen som sätter "file pointern" i början av filen utan att skriva över det som finns bakom...

och något mer avancerat kan jag inte komma på...

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

24

Re: felsök min gästbok

Kennel wrote:

Va fan! Vill du bli bannad eller? :-)

du kan få tro att det står PUN om du vill ;-)

lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
lllllllllllllllllllllllllllllllllll
uhm leet?

Re: felsök min gästbok

GÖWD wrote:

jo jag provade först genom att bara ändra vilkoren (kallas det det?) för fopen. men det finna ingen som sätter "file pointern" i början av filen utan att skriva över det som finns bakom...

och något mer avancerat kan jag inte komma på...

Mm. Det du får göra är att du först får läsa upp hela filen med t.ex. file(), sen skriva över den gamla filen med det nya inlägget överst och sen skriva till allt gammal du läste upp innan.

"Programming is like sex: one mistake and you have to support it for the rest of your life."