Runar0 Skrevet 22. september 2007 Del Skrevet 22. september 2007 Litt vanskelig å si kva som er feil, men du trenger det $i greiene PHP <?php $key="Produksjon: Aktørar CSV"; $aktorar = get_post_meta($post->ID, $key, true); $aktorar = trim($aktorar); $aktorar = explode(" ", $aktorar); // Deler opp til enkeltaktører foreach( $aktorar as $aktor ) { $aktor = explode(";", $aktor); // Deler opp infoen om en enkelt aktør ?> <tr class="aktor <? if(($i++ %2) == 0) {echo "even";}?>"> <th scope="row"><?php echo $aktor[0]; ?></th> <td><?php if ( $aktor[2] != null ) { ?> <a href="<?php echo $aktor[2]; // URL ?>" title="<?php echo $aktor[2]; // URL ?>"><?php } ?> <?php echo $aktor[1]; /* Navn */ if ( $aktor[2] != null ) { ?></a><?php } ?></td> </tr> <?php } ?> Lenke til kommentar
Haraldson Skrevet 23. september 2007 Del Skrevet 23. september 2007 PT hjalp meg og jeg har funnet en løsning, og jeg sitter og jobber som en annen arbeidsnarkoman. Deadlines suger. Takk til de som hjalp meg med dette uansett! Lenke til kommentar
qualbeen Skrevet 24. september 2007 Del Skrevet 24. september 2007 kjapt smp.: hva er beste måten å validere data fra et skjema (form)? Tenker ikke på reg-exp, men på å sikre seg mot at folk skriver inn data i formen som kan kjøres..: Ser ulike løsninger rundt om kring, som f.eks PHP $input = htmlspecialchars ( strip_tags ($_POST["felt"])); mens andre bare en av de to funksjonene over.Også blir jeg forvirra av de som drar inn stripslashes() o.l. Må også nevne at jeg pleier å teste om data "er satt" før jeg henter ut variablene: PHP if(isset($_GET["name"])){ /* ... */ } Hva er enkleste og greieste måte å være sikker på at man har "gyldig" input på? Lenke til kommentar
loathsome Skrevet 24. september 2007 Del Skrevet 24. september 2007 htmlspecialchars/htmlentities er mer en nok for å forsikre seg om at bruker ikke kan poste kjørbar kode. Dessuten er det umulig å vite hva du legger i "gyldig input" Lenke til kommentar
MC2 Skrevet 24. september 2007 Del Skrevet 24. september 2007 Dagens tips: autoloading objects Kort fortalt er autoloading objects akkurat hva navnet antyder. Om du kjører PHP5 kan du deklarere funksjonen __autoload som da vil bli kjørt om du prøver å kalle en klasse som ikke er deklarert. Med dette slipper du å skrive lange lister over filer som må inkluderes. Lenke til kommentar
PHPdude Skrevet 24. september 2007 Del Skrevet 24. september 2007 Selve __autoload-funksjonen ble vurdert fjernet fra PHP6 til fordel for SPL-metoden som er mer komplett. Uansett en veldig praktisk mulighet php.net/spl Lenke til kommentar
loathsome Skrevet 24. september 2007 Del Skrevet 24. september 2007 Her er også litt interessant lesning: 7 reasons I switched back to PHP after 2 years on Rails Sakset rett fra The Café Lenke til kommentar
MC2 Skrevet 29. september 2007 Del Skrevet 29. september 2007 Jeg forstår ikke helt applikasjonen til interfaces. Kunne noen forklare det og muligens gi noen eksempler? Lenke til kommentar
Ernie Skrevet 29. september 2007 Del Skrevet 29. september 2007 (endret) Tja, interface har vel egentlig ikke så mye hensikt i PHP siden det er så typesvakt, men uannsett. Et interface beskriver noe abstrakt som f.eks database og en rekke funksjoner og parametere enhver klasse av denne typen må ha. I forhold til database kan dette være åpne, lukke, kjøre en SQL-spørring osv. Poenget med det hele er at man skal kunne implementere dette i andre klasser slik at man f.eks har en klasse for mysql, postgresql, mssql osv. Det store poenget så er at man kan referere til det hele som en database uten å bry seg om det er mysql, postgresql eller noe annet, du har kort og greit en database og den veit du har de og de funksjonene. I typesterke språk gir dette veldig mening da du f.eks kan lage deg en array med database-klasser, noe man ellers ikke kan siden man må vite hva det skal være en array av. Endret 29. september 2007 av Ernie Lenke til kommentar
qualbeen Skrevet 29. september 2007 Del Skrevet 29. september 2007 et inteface garanterer at noen gitte funksjoner skal være til stede. Om man ikke selv har 100% kontroll på alt som skal kodes, kan det vært lurt å først skrive et interface med alle public funksjoner som trengs. Etter det er gjort kan man sette seg ned og programmere selve klassen, og den vil ikke "validere" før samtlige funksjoner fra interfacet er på plass. Kjekt om man driver med objekt-orientert programmering med andre ord Lenke til kommentar
PHPdude Skrevet 29. september 2007 Del Skrevet 29. september 2007 (endret) Kan jo komme med noen eksempler: Basert på hvilke interfaces objektet implementerer kan man se hvordan datasettet kan leses. function outputProducts($data) { if($data instanceof Zend_Db_Statement_Interface { while($product = $data->fetch()) { echo $product['name'] . "\n"; } } elseif($data instanceof Iterator) { foreach($data as $product) { echo $product['name']; } } } Mer aktuelt er kanskje å lage en universell måte å loope gjennom mange forskjellige datasett på. I PHP har vi "Iterator"-interfacen som er innebygd og er enklest i bruk da den er integrert med foreach function outputData(Iterator $data) { foreach($data as $key => $value) { echo "$key => $value\n"; } } $xmlData = new SimpleXMLIterator(new SimpleXMLElement('test.xml')); $arrayData = new ArrayObject($someArray); $filesData = new DirectoryIterator(dirname(__FILE__)); $newsData = new ArrayObject($db->fetchPairs('SELECT date, title FROM news')); /* * Alle disse data-variablene implementerer "Iterator" og outputData() kan * forstå og skrive ut innholdet av alle sammen. */ Et annet eksempel på hvordan en interface kan skille ut spesifikk funksjonalitet. // Først oppretter vi en en egen interface med funksjoner interface Storage { public function __construct($id); public function save(); public function load(); public funciton getId(); } // Så lager vi en klasse som implementer interfacen med de påkrevde funksjonene class Storage_Session implements Storage { protected $_id; protected $_data; public function __construct($id, &$data) { $this->_id = $id; $this->_data = $data; } public function save() { $_SESSION[$this->getId()] = serialize($this->_data); } public function load() { if(!isset($_SESSION[$this->getId()])) { return null; } return unserialize($_SESSION[$this->getId()]); } } // Andre klasser vi kunne ha lagd er f.eks Storage_Db, Storage_File og Storage_Memory // Så lager vi en klasse som faktisk bruker funksjonaliteten: class Shoppingcart { protected $_products; protected $_storage; public function __construct() { // Oppretter $storage og sjekker om det er lagret data fra tidligere $storage = new Storage_Session('shoppingcart', $this->_products); $this->setStorage($storage); $storedData = $storage->load(); if($storedData !== null) { $this->_products = $storedData; } } public function __destruct() { $this->_storage->save(); } /** * Her kommer vi til et nøkkelpunkt. Det er det samme om $storage er * Storage_Session, Storage_Db, Storage_Memory eller Storage_File * eller noe annet. Det eneste som teller * er at den implementerer de funksjonene definert i "Storage", * for så lenge den gjør det vet "Shoppingcart" hvordan * lagringen og lastingen skal utføres. * Merk at det er unødvendig å foreta noen ekstra sjekk av innholdet * fordi funksjonsdefinisjonen her krever at $storage er et * objekt som implementerer "Storage" */ public function setStorage(Storage $storage) { $this->_storage = $storage; } } Koden er helt utestet og ikke ment som noe annet enn en skisse. Objekter som har noe funksjonalitet til felles kan knyttes sammen ved hjelp en interface og når man da skal bruke denne funksjonaliteten trenger man ikke å forholde seg til alle de forskjellige objektene, men kun til interfacen.Aldri nødvendig å bruke interfaces, men det kan ofte være lurt. http://no2.php.net/manual/en/ref.spl.php http://no.php.net/manual/en/language.oop5.php Endret 29. september 2007 av PHPdude Lenke til kommentar
Rabbid Skrevet 29. september 2007 Del Skrevet 29. september 2007 Hva bruker dere for å lage flerspråklige sider? Kom selv nettop over gettext, og synes dette er funker mye bedre enn å bruke strings opp og ned i mente. :-) Lenke til kommentar
dabear Skrevet 29. september 2007 Del Skrevet 29. september 2007 gettext krever vel støtte for det på serveren, samt korrekt locale installert? Og du må kompilere til .po-filer? Lenke til kommentar
Martin A. Skrevet 29. september 2007 Del Skrevet 29. september 2007 Array? Lag en språkfil for hver side du har, og inkluderer den på siden. $lang = array ( 'something' => 'Noe rart', 'something_else' => 'Noe helt annet', ); include( 'dennesiden.lang.php' ); echo $lang['something']; Lenke til kommentar
Rabbid Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 gettext krever vel støtte for det på serveren, samt korrekt locale installert? Og du må kompilere til .po-filer? 9602089[/snapback] Serveren min støttet gettext, men hvordan sjekker jeg hvilke locale som er installert på serveren? Lenke til kommentar
Ernie Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 (endret) Bare å bruke det da isåfall. "Alle" locales støttes, det er bare å bruke setlocale(...) hvis det tilfeldigvis skulle være "feil" locale som er valgt. Red.: Riktignok verdt å merke seg teksten nederst i manualen ang. setlocale. The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server api like IIS or Apache on Windows you may experience sudden changes of locale settings while a script is running although the script itself never called setlocale() itself. This happens due to other scripts running in different threads of the same process at the same time changing the processwide locale using setlocale(). Endret 1. oktober 2007 av Ernie Lenke til kommentar
Stian Jacobsen Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 (endret) Klikk for å se/fjerne innholdet nedenfor Array?Lag en språkfil for hver side du har, og inkluderer den på siden. $lang = array ( 'something' => 'Noe rart', 'something_else' => 'Noe helt annet', ); include( 'dennesiden.lang.php' ); echo $lang['something']; 9602428[/snapback] Dette er akkurat det samme, men lettere å holde oversikten på <?php $lng['something'] = "noe"; $lng['something']['else'] = "noe annet"; $lng['month'] = "Måned"; $lng['month']['january'] = "Januar"; ?> <?php require_once('language/'.$valgt_spraak.'.inc.php'); echo $lng['something']['else']; ?> Endret 1. oktober 2007 av MrNeeon Lenke til kommentar
Gjest Slettet+142 Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 (endret) Klikk for å se/fjerne innholdet nedenfor Array?Lag en språkfil for hver side du har, og inkluderer den på siden. $lang = array ( 'something' => 'Noe rart', 'something_else' => 'Noe helt annet', ); include( 'dennesiden.lang.php' ); echo $lang['something']; 9602428[/snapback] Dette er akkurat det samme, men lettere å holde oversikten på <?php $lng['something'] = "noe"; $lng['something']['else'] = "noe annet"; $lng['month'] = "Måned"; $lng['month']['january'] = "Januar"; ?> <?php require_once('language/'.$valgt_spraak.'.inc.php'); echo $lng['something']['else']; ?> 9611412[/snapback] Den koden vil da ikke helt funke. <?php $lng['something'] = "noe"; $lng['something']['else'] = "noe annet"; $lng['month']['name'] = "Måned"; $lng['month']['january'] = "Januar"; ?> <?php require_once('language/'.$valgt_spraak.'.inc.php'); echo $lng['something']['else']; ?> En verdi i et array kan ikke være både et nytt array og en string Endret 1. oktober 2007 av Slettet+142 Lenke til kommentar
Runar0 Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 (endret) Dette er akkurat det samme, men lettere å holde oversikten på <?php $lng['something'] = "noe"; $lng['something']['else'] = "noe annet"; $lng['month'] = "Måned"; $lng['month']['january'] = "Januar"; ?> <?php require_once('language/'.$valgt_spraak.'.inc.php'); echo $lng['something']['else']; ?> 9611412[/snapback] Den der var vel litt ulogisk, $lng['something'] og $lng['month'] blir jo overskereve rimelig fort. Edit: Litt for sein der ja.. Endret 1. oktober 2007 av Runar0 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå