Just nu i M3-nätverket
Jump to content

PHP-tips


Cariad

Recommended Posts

Några tips för alla PHP-kodare

 

Hej,

Det händer väldigt ofta att man påpekar samma saker i flera trådar, så därför tänkte jag skriva ihop lite tips som kan vara bra att spara.

Det är ju självklart inget fel med att fråga, men ibland skulle man kunna använda tiden mer effektivt ;)

 

Så nedan kommer tipsen...

 

1. MySQL-frågor

När man kör en fråga med mysql_query() och eventuellt använder sig av indata från besökaren, så missar många att göra sin fråga säker. Detta ger besökaren möjlighet att köra vilken SQL-fråga som helst, som att t.ex. rensa en hel databas.

För att undvika detta ska man omge alla värden med '-tecken (även numeriska värden går).

Man måste då se till att strängen i sig inte innehåller några '-tecken, vilket man gör med addcslashes(), som lägger ett bakvänt snedstreck \ framför.

 

Ta därför för vana att alltid använda dig av detta, även om indatan är hårdkodad i ditt PHP-skript

 

Exempelkod:

$res = mysql_query("INSERT INTO tabell (fält1, fält2, fält3) VALUES('" . addcslashes($indata1, "\\'") . "', '" . addcslashes($indata2, "\\'") . "', '" . addcslashes($indata3, "\\'") . "')");

Länkar:

http://www.php.net/manual/en/function.addcslashes.php

 

 

2. Formulär-indata & utskrift av matriser

I nyare versioner av PHP använder man sig av några s.k. superglobaler. Dessa är $_POST, $_GET, $_SERVER, $_SESSION, $_COOKIE, $_FILE, $_ENV samt $_REQUEST (läs mer om dessa i länken nedan).

 

Tidigare kunde man komma åt data som skickats via ett formulär direkt via ett variabelnamn, vilket öppnade PHP för attacker, där en besökare (beroende på hur din kod såg ut) kunde utföra skadliga kommandon.

Se därför alltid till att register_globals är off i din php.ini.

Ett värde som tidigare gick att komma åt med $fältnamn går alltså numera att komma åt med $_POST["fältnamn"] alt. $_GET["fältnamn"] beroende på om formuläret skickades via method="POST" eller method="GET".

POST bör användas för formulär, medan GET används för länkar med variabler i (ex. länk.php?fält=foo&fält2=bar)

 

Om du på ett enkelt sätt vill se all data som skickats med i ett formulär (eller allt innehåll i vilken matris som helst) kan du använda dig av print_r().

Då får då en lång, strukturerad, lista som är jättebra för felsökning.

 

Exempelkod:

print_r($_POST);

Länkar:

http://www.php.net/manual/en/language.variables.predefined.php#language.variables.superglobals

http://www.php.net/manual/en/function.rawurlencode.php

 

 

3. Länkar & formulär

När du skriver ut HTML-kod finns det vissa tecken som är reserverade av HTML-syntaxen (ex. < > " &).

Du kan därför inte skriva ut dessa hur som helst, i synnerhet inte innuti ett formulär eller en länk.

 

För att skapa länkar med variabler bör du vid utskrift av dessa använda dig av rawurlencode(), för att omvandla t.ex. å, ä och ö till tecken som fungerar i datavärlden.

Ta för vana att alltid använda dig av det, även om du bara ska skriva ut en bokstav.

 

Exempelkod:

echo "<a href=\"skript.php?" . rawurlencode("fält1") . "=" . rawurlencode($värde1) . "\">Länk</a><br />\n";

När du däremot gör ett formulär bör du använda dig av htmlentities() eller htmlspecialchars().

Ta för vana att alltid använda dig av någon av dem, även om du skriver ut en sträng utan några specialtecken.

 

Exempelkod:

echo "<form method=\"post\" action=\"skript.php\">\n";
echo "<input type=\"text\" name=\"" . htmlentities("förnamn") . "\" value=\"" . htmlentities($förnamn) . "\" />\n";
echo "<textarea name=\"" . htmlentities("kommentarer") . "\">" . htmlentities($kommentarer) . "</textarea>\n";
echo "</form>\n";

 

4. Reguljära uttryck

Detta är för den lite mer avancerade, men alla kommer någon gång att behöva använda sig av dem, vare sig man vet det eller inte.

Dessa används till att söka enligt avancerade mönster i en sträng.

Jag tänker inte skriva nån förklaring om hur det fungerar (skulle bli hur långt som helst), utan bara ge lite länkar.

 

Länkar (på Eforum):

//eforum.idg.se/viewmsg.asp?EntriesId=354406

//eforum.idg.se/viewmsg.asp?EntriesId=354056

//eforum.idg.se/viewmsg.asp?EntriesId=329039

 

Länkar (syntax):

http://www.contactor.se/~dast/mail2sms/regex.shtml

http://www.php.net/manual/en/ref.pcre.php

 

 

5. Kommentering & struktur

Kommentera din kod så att du storknar.

Det är väldigt användbart när man går tillbaka till sin halvårsgamla webbutik för att lägga till lite funktioner, och inte fattar ett dugg av vad man gjort.

 

Riktiga programmeringsnördar brukar säga att en perfekt kod behöver ingen kommatering, men för oss vanliga människor som inte ser världen i ettor och nollor är kommentarer ett måste.

 

Exempelkod:

// Räknar ut 1 + 1
echo (1 +1);
/* En lång kommentar
över flera rader */

Försök också att komma på din egen struktur, och använd dig alltid av denna, så är det lättare att få en snabb överblick över koden.

Dela gärna upp långa filer i mindre delar och inkludera dessa med include() eller include_once().

 

Skapa egna funktioner. Det rensar upp i koden, och du kanske kan återanvända dem vid nästa projekt.

Den lite mer avancerade kodaren använder sig även av klasser.

 

Länkar:

http://www.php.net/manual/en/language.basic-syntax.comments.php

http://www.php.net/manual/en/function.include.php

http://www.php.net/manual/en/functions.php

 

 

Sammanfattning

Om du inte känner till någon av dessa funktioner eller nyckelord, bör du omedelbart gå tillbaka och läsa om dem.

En PHP-kodare måste känna till dessa:

addcslashes()

superglobaler

rawurlencode()

print_r()

htmlentities()

kommentarer

include()

 

Är det någon som har fler tips? Jag har säkert glömt en hel del användbara saker, men jag ska fylla på när jag kommer på mer.

Link to comment
Share on other sites

Kanske sessioner borde nämnas en snabbis?

 

Jag måste lära mig kommentera min egen PHP kod bättre, har skrivit otroliga mängder med kod och inte en enda kommentar någonstans :)

 

 

 

[inlägget ändrat 2002-12-04 14:21:48 av Divine Light]

Link to comment
Share on other sites

6. Sessioner

Sessioner används för att t.ex. kunna skapa kundvagnar m.m.

Det fungerar så att en massa data sparas på webbservern, och användaren får bara ett ID, som sedan används för att hämta upp rätt data igen.

ID-nummret kan föras över från sida till sida antingen som en GET-variabel (skript.php?id=12345) eller som en kaka (cookie).

 

Du kan spara variabler i superglobalen $_SESSION, och sedan komma åt dessa på alla sidor.

 

En session har en bestämd giltighetstid, som brukar anges i sekunder.

Om man anger giltighetstid 0 så betyder det tills besökaren stänger webbläsaren.

Använd session_set_cookie_params() för att sätta giltighetstiden.

 

Du kan ändra inställningarna för sessioner med ini_set(). En lista över inställningar finns under länken nedan.

 

varje sida som ska kunna komma åt sessionen måste du lägga in session_start() innan.

 

För att förstöra en session, vid t.ex. utloggning, sätter du helt enkelt $_SESSION till inget: $_SESSION = array().

Följt av session_destroy().

 

Exempelkod (sida 1):

session_start();
$_SESSION["foo"] = "bar";

Exempelkod (sida 2):

session_start();
// Skriver ut "bar"
echo $_SESSION["foo"];
// Förstör sessionen
$_SESSION = array();
session_destroy();

Länkar:

http://www.php.net/manual/en/ref.session.php'>http://www.php.net/manual/en/ref.session.php

 

 

7. Hjälp

Om du behöver hjälp är Eforum en självklar plats, men om du vet vilken funktion du ska använda, och bara har problem att få till det, är ofta användarkommentarerna längst ned på varje sida under den officiella PHP-dokumentationen (http://www.php.net/manual/en/) mycket bra.

 

När du dock behöver hjälp här på Eforum underlättar det väldigt om du klistrar in lite av den kod du har problem med. Det är annars väldigt svårt att hjälpa någon, då det ofta är något litet småfel i koden som ställer till det.

 

[inlägget ändrat 2002-12-04 14:43:45 av Cariad]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...