Gå til innhold

Php - funksjoner i lange baner!


Gjest anonym

Anbefalte innlegg

Gjest dorina sofie

OK, nå bare må jeg skrive litt om funksjoner, hehe.

Alle de innebygde php-funksjonene er beskrevet her:

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

Man kan søke i funksjonslista fra feltet øverst til høyre på siden.

Men dette er jo bare de innebyggede funksjonene. Alle har sin spesielle funksjon, og kan bare brukes til det.

Det vi skal gjøre nå er å lage våre egne funksjoner! Åååå, så mrsmt! :ler:

Og hva er så en funksjon?

Jo, det ligger litt i navnet.

Kort beskrevet (på dorian-måten) er en funksjon en liten kodesnutt som gjør en ting med en tekst eller en verdi, basert på det du sender inn i funksjonen.

Klokere? Nei?

OK. Tenk på substr()

Den ser slik ut:

$sub = substr($text, 0, 200);

Det vi gjør her, er å sende verdien $text inn i denne funksjonen, og parameterne 0 og 200 forteller funksjonen at her skal den returnere tegnene fra 0 til 200 (som blir liggende i verdien $sub).

Men det er jo ingenting som nekter oss å gjøre ALT som sendes inn i funksjonen til interaktive verdier?

Slik:

$from = $HTTP_POST_VARS['from'];

$to = $HTTP_POST_VARS['to'];

$text = $HTTP_POST_VARS['text'];

$sub = substr($text, $from, $to);

Dette eksemplet ville returnere all tekst i $text fra tegn $from og $to tegn framover.

Som jo blir satt via en html-form (av brukeren).

Hvorfor skal vi lage funksjoner?

Tja, grunnen til at jeg lager funksjoner er at det som regel sparer litt inn på kodingen. Hvis jeg har en kladd med kode som gjør stort sett det samme og som brukes ofte, lønner det seg å lage en funksjon av det. Grunnen er at når funksjonen er lastet en gang er den tilgjengelig i scriptet, og kan kalles så mange ganger du vil med en eneste setning.

Funksjoner er makt! :ler:

Og når man har laget funksjoner kan man begynne med klasser (men det dekkes neppe av dette mikro-kurset...)

Men ok, vi får kanskje lage en funksjon, kanskje? :sjarmor:

En funksjon legges øverst i scriptet, og skal bare lastes en gang:

function funksjonsnavn($verdi) {

Gjør noe meningsfullt med verdien $verdi

}

Dette er slik en funksjons syntax ser ut i php. Verdiene vi vil sende inn i funksjonen for å bli behandlet, legges inni parantesen. Viktig: Ingen andre verdier er tilgjengelige inni denne funksjonen enn det som er listet inni parantesen!

Tok en stund (og litt frustrasjon!) før trege-dorian forsto det...

Hvis du skal behandle flere verdier, må du liste dem inni parantesen, separert med komma:

function funksjonsnavn($verdi, $verdi2) {

Gjør noe meningsfullt med verdiene $verdi OG $verdi2

}

Her er et eksempel på en funksjon "in action" :ler:

function fileWrite($text) {

$text = str_replace("n","",$text);

$text = str_replace("'","*",$text);

$text = strip_tags ($text, "<ul>,<ol>,<li>,<b>,<i>");

$text = str_replace(chr(10),"",$text);

$text = str_replace(chr(13), "<br>", $text);

return($text);

}

Som dere ser består denne funksjonen av bare andre funksjoner, så det er mulig å kjøre funksjoner inni andre funksjoner. Hele vitsen med denne funksjonen er å rengjøre tekst for å skrives til en tekstfil på serveren.

Den tar da teksten som sendes inn ($text), gjør det den skal gjør med den, og returnerer $text i redigert versjon.

Vel, når denne funksjonen er lastet øverst i scriptet (og er dermed er tilgjengelig i resten av scriptet), kan vi referere (kalle) denne funksjonen når vi trenger den.

Dette gjøres ved å legge funksjonen foran en verdi:

# Her kommer teksten inn fra klienten ##

$text = $HTTP_POST_VARS['text'];

# Her behandler vi teksten med fileWrite ##

$text = fileWrite($text);

# That's it! Nå er $text behandlet, og er file-safe :-) ##

Flere eksempler, en funksjon kan godt være en tabell med en form i (og denne sender vi ingen verdier inn i, siden det er ren html):

function reg_form() {

echo "<script language="javascript">

1111<!--

1111function doReg() {

111111user8 = document.registration.username.value.toLowerCase();

111111user8 = user8.replace(/æ/g,"ae");

111111user8 = user8.replace(/ø/g,"o");

111111user8 = user8.replace(/å/g,"aa");

111111document.registration.username.value = user8;

11document.registration.hashpass1.value = MD5(document.registration.password1.value);

1111 11document.registration.password1.value = "";

111111document.registration.hashpass2.value = MD5(document.registration.password2.value);

1111 11document.registration.password2.value = "";

111111document.registration.submit();

1111}

1111// -->

1111</script>";

echo "

<table border="0" cellspacing="0" cellpadding="0" width="435">

<tr>

<td class="textpad1" align="right"><span class="fagmenuLink">Lyst til &aring; delta mer aktivt? Registrer deg her:</span>&nbsp;<a href="forum.boom?forum_control=pubregistration" class="menuLink">Full registrering</a></td></tr></table>

<table border="0" cellspacing="0" cellpadding="0" width="437" class="fp_greypad">

<form name="registration" method="post" action="scriptet.php"><tr>

<td class="textpad1" width="200" align="left"><span class="tdHead_red11">Registrer deg:</span></td>

<td class="textpad1" width="182" align="left"><!--img src="includes_forum/images/smiley_helper.gif" width="16" height="16"--></td>

</tr>

<tr><td colspan="2"><img src="onepx.gif" width="1" height="6"></td></tr>

<tr><td colspan="2"><img src="onepx.gif" width="1" height="6"></td></tr>

<tr>

<td align="left" valign="top"><span class="utilitariantext1">Brukernavn:</span><br>

<input type="text" name="username" size="15" maxlength="15" value="$username" style="width: 100px">&nbsp;<span class="help">(Maks 15 bokstaver)</span>

<br><span class="utilitariantext1">Passord:</span><br><input type="password" name="password1" value="" size="15" style="width: 100px"><br>

<span class="utilitariantext1">Passord en gang til:</span><br><input type="password" name="password2" value="" size="15" style="width: 100px"><br>

<input type="hidden" name="user8" value=""><input type="hidden" name="hashpass1" value=""><input type="hidden" name="hashpass2" value=""><input type="hidden" name="uggabugga" value="Registrermeg">

<input onClick="doReg(); return true;" type="submit" value="Registrer"></td><td align="left" valign="top"><span class="tdHead">Registrering:</span><br><span class="utilitariantext1">Ved å registrere deg her får du rett til å poste på forumet her på boomdesign.no<br>Når du har logget inn kan du legge inn ytterlige opplysninger om deg selv (mail, telefon o.l.)</span></td>

</tr>

<tr><td colspan="2"><img src="onepx.gif" width="1" height="15"></td></tr>

<tr><td colspan="2"><img src="onepx.gif" width="3" height="20"></td></tr></form>

</table>";

}

(Jeg bruker backslashet html-kode, noe som vel gjør denne enda mer forvirrende :ler: )

nerdian :briller:

Lenke til kommentar
Del på andre sider

Fortsetter under...

Juhuu....jeg husket passordet mitt! Ikke verst? :ler:

Mere hjemmebrent:

function chew_article($atext, $lenght, $thisid) {

$barr2 = explode("|/n|", $atext);

$barr1 = explode("|n|", $barr2[0]);

$barr3 = explode("|/u|", $barr2[1]);

$barr4 = explode("|u|", $barr3[0]);

$barr5 = explode("|/t|", $barr3[1]);

$barr6 = explode("|t|", $barr5[0]);

$barr7 = explode("|/p|", $barr5[1]);

$barr8 = explode("|p|", $barr7[0]);

$barr9 = explode("|/h|", $barr7[1]);

$barr10 = explode("|h|", $barr9[0]);

$id = $barr1[1];

$name = $barr4[1];

$atitle = $barr6[1];

$aimage = $barr8[1];

if($aimage != "0") {

if(file_exists("includes/news_images/".$aimage)) {

$imagehw = GetImageSize("includes/news_images/".$aimage);

$width = $imagehw[0];

$height = $imagehw[1];

$apicture = "<img src="includes/news_images/$aimage" width="$width" height="$height" class="onepx_black">";

} else {

$imagehw = "";

}

} else {

$apicture = "<img src="onepx.gif" width="75" height="59" class="onepx_black">";

}

$aimage = "";

$datext = $barr10[1];

$t_lenght = $datext;

if ($lenght == "ingres") {

$datext = substr($datext, 0, 320);

$pos = strrpos($datext, ".");

if ($pos == "") {

$pos = strrpos($datext, "!");

$repl = "!";

} else {

$repl = ".";

}

$datext = substr($datext, 0, $pos) . "$repl";

$datext = fileOutput($datext);

if(strlen($t_length) > 320) {

$datext = $datext . " ...";

}

$readlink = "<tr><td colspan="2" align="left" class="textpad1"><img src="bulletpil_c.gif" width="37" height="5">&nbsp;<a href="index.php?viewnews=single&thisid=$id" class="utilitariantext6">Les mer</a></td></tr>

<tr>

<td colspan="2" align="left" valign="top"><img src="onepx.gif" width="1" height="15"></td>

</tr>";

} else {

$datext = fileOutput($datext);

$readlink = "";

}

$atime = date("d.m - Y G:i:s", $id);

if ($name == "") {

echo "";

} else {

echo "

<table width="340" border="0" cellpadding="0" cellspacing="0">

<tr>

<td width="80" align="left" valign="top" class="textpad1"><img src="onepx.gif" width="75" height="3"><br>$apicture</td><td width="260" align="left" valign="top" class="textpad1"><span class="tdHead_black">$atitle</span><br><span class="utilitariantext6">$atime</span><br><span class="utilitariantext6">Av:</span>&nbsp;<span class="utilitariantext2">$name</span><br><img src="onepx.gif" width="245" height="1"></td>

</tr>

<tr>

<td colspan="2" align="left" valign="top" class="textpad1"><span class="utilitariantext1">$datext</span></td>

</tr>

<tr>

<td colspan="2" align="left" valign="top"><img src="onepx.gif" width="1" height="15"></td>

</tr>

".$readlink."

</table>";

}

$apicture = "";

}

Denne åpner en tekstfil på serveren, deler opp innholdet i flere felter og skriver det hele ut som html.

Og tekstfilen ser slik ut:

### Article for Publicator Lite start ###

## Id ##

|n|1030102513|/n|

## username ##

|u|knutm|/u|

## title ##

|t|En testartikkel|/t|

## picture name ##

|p|news_ourteam.jpg|/p|

## article text ##

|h|Jeg er en lang artikkeltekst! Jeg kan bli ganske lang, jah! Men det gjør ikke noe, for jeg ligger i en egen tekstfil på serveren.|/h|

### Article for Publicator Lite end ###

Det er ikke noe hokus-pokus med denne tekstfilen, det er ganske vanlig tekst. Det funksjonen gjør er å finne de spesifiserte feltene som er markert med |n| og |u| og så videre. Så finner den slutt-taggene |/n|, og viser fram alt som ligger mellom disse som tekst inni html-tagger :kul:

Funksjonen kalles slik fra scriptet der den kjøres:

$fp=@fopen("../articles/$thisid.txt","r");

if($fp)11{

fclose ($fp);

$length = "full";

$atext = file_get_contents("../articles/$thisid.txt");

## Her er'n!!! ##

chew_article($atext, $length, $thisid);

} else {

echo "<br><br><br>&nbsp;&nbsp;&nbsp;<span class="tdHead_red">Denne artikkelen finnes ikke!!</span><br><br><br>";

}

clearstatcache();

dorian - som plutselig fant innloggingsknappen :sjarmor:

Lenke til kommentar
Del på andre sider

Er det forvirrende?? :ler::ler:

Neida!

Hvis vi prøver å brekke opp den ovenforstående funksjonen i biter:

function chew_article($atext, $lenght, $thisid) {

## Først finner vi alle feltene i tekstfilen, og gjør dem om til arrays ##

$barr2 = explode("|/n|", $atext);

$barr1 = explode("|n|", $barr2[0]);

$barr3 = explode("|/u|", $barr2[1]);

$barr4 = explode("|u|", $barr3[0]);

$barr5 = explode("|/t|", $barr3[1]);

$barr6 = explode("|t|", $barr5[0]);

$barr7 = explode("|/p|", $barr5[1]);

$barr8 = explode("|p|", $barr7[0]);

$barr9 = explode("|/h|", $barr7[1]);

$barr10 = explode("|h|", $barr9[0]);

## Nå har vi laget arrays av feltene, og kan gi disse verdier med $verdi = $array[1] ($barr + nummer + [nummer]) ##

$id = $barr1[1];

$name = $barr4[1];

$atitle = $barr6[1];

$aimage = $barr8[1];

## Siden $aimage er et bildenavn må vi finne størrelsen og gjøre det om til en img-tagg ##

if($aimage != "0") {

if(file_exists("includes/news_images/".$aimage)) {

$imagehw = GetImageSize("includes/news_images/".$aimage);

$width = $imagehw[0];

$height = $imagehw[1];

$apicture = "<img src="includes/news_images/$aimage" width="$width" height="$height" class="onepx_black">";

} else {

$imagehw = "";

}

## Hvis bildenavn = 0 (ikke bilde) pynter vi litt på layout'en ved å legge inn et tomt bilde i stedet ##

} else {

$apicture = "<img src="onepx.gif" width="75" height="59" class="onepx_black">";

}

$aimage = "";

$datext = $barr10[1];

$t_lenght = $datext;

## Her er vi ferdig med å hente ut alle verdiene, og splitter resten av funksjonen i 2: hvis $length er "ingres" skal bare maks 320 tegn av teksten vises - hvis ikke, vis alt! ##

## Vis bare ingress ##

if ($lenght == "ingres") {

$datext = substr($datext, 0, 320);

$pos = strrpos($datext, ".");

if ($pos == "") {

$pos = strrpos($datext, "!");

$repl = "!";

} else {

$repl = ".";

}

$datext = substr($datext, 0, $pos) . "$repl";

$datext = fileOutput($datext);

if(strlen($t_length) > 320) {

$datext = $datext . " ...";

}

$readlink = "<tr><td colspan="2" align="left" class="textpad1"><img src="bulletpil_c.gif" width="37" height="5">&nbsp;<a href="index.php?viewnews=single&thisid=$id" class="utilitariantext6">Les mer</a></td></tr>

<tr>

<td colspan="2" align="left" valign="top"><img src="onepx.gif" width="1" height="15"></td>

</tr>";

} else {

## Vis all teksten! ##

$datext = fileOutput($datext);

$readlink = "";

}

$atime = date("d.m - Y G:i:s", $id);

## Og her skriver vi ut resultatet ##

if ($name == "") {

echo "";

} else {

echo "

<table width="340" border="0" cellpadding="0" cellspacing="0">

<tr>

<td width="80" align="left" valign="top" class="textpad1"><img src="onepx.gif" width="75" height="3"><br>$apicture</td><td width="260" align="left" valign="top" class="textpad1"><span class="tdHead_black">$atitle</span><br><span class="utilitariantext6">$atime</span><br><span class="utilitariantext6">Av:</span>&nbsp;<span class="utilitariantext2">$name</span><br><img src="onepx.gif" width="245" height="1"></td>

</tr>

<tr>

<td colspan="2" align="left" valign="top" class="textpad1"><span class="utilitariantext1">$datext</span></td>

</tr>

<tr>

<td colspan="2" align="left" valign="top"><img src="onepx.gif" width="1" height="15"></td>

</tr>

".$readlink."

</table>";

}

$apicture = "";

## Ferdig! ##

}

Litt mer forståelig?

dorian - hører snorkelyder :ler:

Lenke til kommentar
Del på andre sider

Men, vi kan brekke den opp i enda mindre biter, vi! :sjarmor:

Hvis vi ser litt på tekstfilen igjen:

### Article for Publicator Lite start ###

## Id ##

|n|1030102513|/n|

## username ##

|u|knutm|/u|

## title ##

|t|En testartikkel|/t|

## picture name ##

|p|news_ourteam.jpg|/p|

## article text ##

|h|Jeg er en lang artikkeltekst! Jeg kan bli ganske lang, jah! Men det gjør ikke noe, for jeg ligger i en egen tekstfil på serveren.|/h|

### Article for Publicator Lite end ###

Det som er viktig her, er å legge inn noen tegn i tekstfilen før og etter hvert "felt", slik at vi greier å hente dem ut når de skal leses.

Alle feltene er jo markert med |en bokstav| før innholdet og |/en bokstav| etter innholdet.

Når man så bruker funksjonen explode(), vil den gjøre slik det er beskrevet i den kommenterte biten under:

## Først exploder vi HELE teksten ##

$barr2 = explode("|/n|", $atext);

/*

Nå sitter vi igjen med TO biter, en som inneholder alt som kommer FØR |/n| og en som inneholder alt som kommer etter |/n|

Disse bitene heter $barr2[0] og $barr2[1], siden vi begynner å telle fra venstre mot høyre. Det neste vi gjør er å ta $barr2[0] og splitte den i 2 deler igjen:

*/

$barr1 = explode("|n|", $barr2[0]);

/*

Nå har vi brukt |n| som splittepunkt, og da sitter vi igjen med $barr1[0], som er begynnelsen av filen (### Article for Publicator Lite start ###

## Id ## ), som ikke skal brukes til noe. Men vi sitter også igjen med $barr1[1], som jo er den lille biten vi er ute etter, og som er id på artikkelen

*/

## Så tar vi den biten som ble til overs fra den aller første splitten, og gjør det samme ##

$barr3 = explode("|/u|", $barr2[1]);

## Vi sitter igjen med en bit som skal splittes i to ##

$barr4 = explode("|u|", $barr3[0]);

## Nå har vi funnet teksten mellom |u| og |/u| som er $barr4[1] ##

$barr5 = explode("|/t|", $barr3[1]);

$barr6 = explode("|t|", $barr5[0]);

## Vi sitter igjen med teksten mellom |t| og |/t| ##

$barr7 = explode("|/p|", $barr5[1]);

$barr8 = explode("|p|", $barr7[0]);

## Vi sitter igjen med teksten mellom |p| og |/p| ##

$barr9 = explode("|/h|", $barr7[1]);

$barr10 = explode("|h|", $barr9[0]);

## Vi sitter igjen med teksten mellom |h| og |/h| ##

Vips, så er tekstfilen splittet opp og vi har hentet ut de delene som vi trenger...

doriansen - ere noen som sager ved i bakgrunnen her...? :ler:

Lenke til kommentar
Del på andre sider

Annonse

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...