/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Viderudvikling af ens php kunstskaber
Fra : Stig Sørensen


Dato : 20-11-08 05:49

Hej gruppe.

Min php viden er sådan ganske udemærket på begynder-niveau, hvis jeg
selv må sige det.
Jeg brænder dog efter at lære mere php, og bare det at scripte i php.
Jeg går dog hurtigt i stå hvis ikke der er noget formål med projektet..

Det jeg efterlyser, er måske et åbent php projekt hvor alle kan
bidrage? Findes sådanne noget?
Eller har I gode idéer til mindre php projekter som også kan bruges,
af andre, så det giver lidt mening i at sidde og lave det?


Håber I kan forstå mig

 
 
Dan Storm (20-11-2008)
Kommentar
Fra : Dan Storm


Dato : 20-11-08 14:27

Stig Sørensen skrev:
> Det jeg efterlyser, er måske et åbent php projekt hvor alle kan
> bidrage? Findes sådanne noget?

Du kan da lave komponenter eller moduler til mange slags forskellige
open source CMS'er? Joomla f.eks.

> Eller har I gode idéer til mindre php projekter som også kan bruges,
> af andre, så det giver lidt mening i at sidde og lave det?

Well, der er altid noget man kan bruge.
Jeg har eksempelvis just lige omskrevet mit databaselagsobjekt.
Og i øjeblikket er jeg igang med at forbedre min mailklasse, som jeg
bruger til at udsende HTML emails med embedde billeder og vedhæftede
filer med.

Er der ikke noget du mener du kan lave smartere? For hvis der er, så er
det bare med at komme igang med at gøre det smartere.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Stig Sørensen (20-11-2008)
Kommentar
Fra : Stig Sørensen


Dato : 20-11-08 06:35

On 20 Nov., 14:27, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:

> Well, der er altid noget man kan bruge.
> Jeg har eksempelvis just lige omskrevet mit databaselagsobjekt.
> Og i øjeblikket er jeg igang med at forbedre min mailklasse, som jeg
> bruger til at udsende HTML emails med embedde billeder og vedhæftede
> filer med.
>
> Er der ikke noget du mener du kan lave smartere? For hvis der er, så er
> det bare med at komme igang med at gøre det smartere.

Lyder som nogle gode idéer. Mener bestemt ikke jeg kan gøre noget
bedre, men ville blive glad hvis du kunne fortælle mig lidt om
konceptet bag dine databaselagsobjekt.

Dan Storm (20-11-2008)
Kommentar
Fra : Dan Storm


Dato : 20-11-08 14:57

Stig Sørensen skrev:
> Lyder som nogle gode idéer. Mener bestemt ikke jeg kan gøre noget
> bedre, men ville blive glad hvis du kunne fortælle mig lidt om
> konceptet bag dine databaselagsobjekt.

Konceptet er at jeg har et overordnet databaselag som egentlig står for
al behandling af mine databasekald.

Derudover har jeg så, eksempelvis, en klasse der hedder cUsers.

class cUsers extends cMysql
{
   /**********************************
   /* Start __construct() fra cMysql
   /* som forbinder til databasen
   /**********************************/
   public function __construct()
   {
      parent::__construct();
   }

   /**********************************
   /* Her henter jeg bruger info
   /* fra tabellen og returner
   /* resultatet i et associeret
   /* array (funktion fra cMysql)
   **********************************/
   public function getUserInfo($user_id)
   {
      $sql = "SELECT * FROM users WHERE user_id=".$user_id;
      $this->query($sql);
      return $this->result2array();
   }

   /**********************************
   /* Her henter jeg brugerens
   /* email adresse fra tabellen
   /* og returner resultatet som en
   /* streng hvis linies er fundet
   /* og eller returneres bool(false)
   **********************************/
   public function getUserEmail($user_id)
   {
      $sql = "SELECT mail FROM users WHERE user_id=".$user_id;
      return $this->queryItem($sql);
   }

}


Jeg ved så at cMysql::result2array() altid vil returnere et array til
mig med det jeg forventer at hente fra databasen.

cMysql::queryItem() bruger jeg til at hente et enkelt felt fra en given
kolonne. Meget rar at have nogen gange.

Fordelen i laget er så at du i dit databaselag altid ved hvilke
funktioner du har til rådighed og hvordan de skal bruges.
På den måde kan jeg nemt overføre mine funktionaliteter til en anden
type database. (der kan være forskellige i sql'en ,men de er vist så små
at man jo er glad for at man har samlet al sin sql i nyttige klasser og
ikke har noget sql i frontenden ;) )

Ligeledes er det nemt for mig at differenciere på om jeg kan bruge
cMysql objektet eller cMysqli objektet da de begge har de samme
funktioner, men cMysql kun bruges på servere hvor cMysqli ikke tilbydes,
uden at jeg skal rette i alle mine scripts kildekode. Jeg er også igang
med at lave et lag til PostgreSQL, da der jo er nogen der ynder at bruge
det istedet.

Håber det gav lidt klarhed?

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

N/A (20-11-2008)
Kommentar
Fra : N/A


Dato : 20-11-08 16:03



N/A (20-11-2008)
Kommentar
Fra : N/A


Dato : 20-11-08 14:57



Stig Sørensen (20-11-2008)
Kommentar
Fra : Stig Sørensen


Dato : 20-11-08 07:24

On 20 Nov., 14:56, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:

> Håber det gav lidt klarhed?

Jow, jeg siger i hvertfald tak for forklaringen

Men hvis du nu ville lave en gæstebog, som et særskilt nyt projekt,
ville du så bruge dine databaselayer dertil? Altså bare inkludere
filen indeholdende databaselayerne og så fortsætte derfra?

Noget som jeg ikke helt forstår, trods jeg har læst flere engelske
artikler, så forstår jeg ikke helt meningen med class.
Synes jeg ville kunne lave det samme som dit uden class, bare ved at
lave funktionerne som de er, uden i et class.
Kan du henvise til en god artikel omkring class? Eller hvis du selv
har tålmodighed, må du meget gerne prøve at forklare mig formålet med
det

En sidste ting:
$sql = "SELECT mail FROM users WHERE user_id=".
$user_id;
return $this->queryItem($sql);

$this er en variabel, men hvad gør -> ved queryitem($sql) ? (antager
at queryitem() er en anden hjemmelavet funktion du ikke har vist med).


Mvh
Stig

Dan Storm (20-11-2008)
Kommentar
Fra : Dan Storm


Dato : 20-11-08 16:03

Stig Sørensen skrev:
> Men hvis du nu ville lave en gæstebog, som et særskilt nyt projekt,
> ville du så bruge dine databaselayer dertil? Altså bare inkludere
> filen indeholdende databaselayerne og så fortsætte derfra?

Ja, det ville jeg. Det giver mig det samme grundlag at lave løsningen på
som jeg er vant til. Objektet er ikke særlig stort, men for mig er det
et værdifuldt værktøj.

> Noget som jeg ikke helt forstår, trods jeg har læst flere engelske
> artikler, så forstår jeg ikke helt meningen med class.
> Synes jeg ville kunne lave det samme som dit uden class, bare ved at
> lave funktionerne som de er, uden i et class.

Det kan du bestem også, men for mig er det noget værre rod.
Din klasse/class/objekt har sit eget scope.
F.eks.:

function addition($a, $b)
{
   $c = $a + $b;
   return $c;
}

Variabler $a, $b og $c ligger i funktionens scope og kan derfor ikke
bruges uden for funktion - medmindre du bruger globale variabler eller
henvisninger (som nok er et helt andet emne).

Med dit objekt danner du ramme for et område i din kode der består af
sit eget scope, som kan tilgås fra en instans.

Simpel klasse:

class Simple
{
   public $message;

   public function setMessage($string)
   {
      $this->message = $string;
   }

   public function getMessage()
   {
      return $this->message;
   }

}

Eksempel på brugen:

// instansier klassen
$simple = new Simple;

// brug funktion setMessage() i klassen
$simple->setMessage("Hello, World");

//brug funktion getMessage() i klassen

echo $simple->getMessage(); //returnerer Hello, World

// echo variablen $message fra klassen.
echo $simple->message; //returnerer også Hello, World

Hvorfor er det smart? Jo, ser du:
Din kode er mere overskuelig og giver mening når du skal rode i dem.
Objekterne kan udvide hinanden og give dig mere funktionalitet.
Du kan have flere instanser af samme objekt og behøver ikke tænke på om
adskillige funktioner er afhængige af at du er færdig med det første du
havde gang i.

> Kan du henvise til en god artikel omkring class? Eller hvis du selv
> har tålmodighed, må du meget gerne prøve at forklare mig formålet med
> det

Ikke andet end <url: http://php.net/oop>

Jeg tror det er noget man skal eksperimentere lidt med for at få
forståelse og idéen for det.

> En sidste ting:
> $sql = "SELECT mail FROM users WHERE user_id=".
> $user_id;
> return $this->queryItem($sql);
>
> $this er en variabel, men hvad gør -> ved queryitem($sql) ? (antager
> at queryitem() er en anden hjemmelavet funktion du ikke har vist med).

Ja, queryItem() er en funktion jeg har fra mit cMysql objekt.
Men idet at jeg extendede min cUsers klasse med cMysql klassen, var alle
funktionerne fra cMysql klassen jo med i cUsers.

$this referer til objektet selv.
Som du kan se i eksemplet ovenfor referer jeg til variablen $message
gennem $this->message.

Havde jeg ikke udvidet cUsers med cMysql ville jeg skulle gøre således
istedet:

$db = new cMysql();
$sql = "SELECT mail FROM users WHERE user_id=".$user_id;
return $db->queryItem($sql);

Du spørger bare løs hvis der er noget...


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

N/A (20-11-2008)
Kommentar
Fra : N/A


Dato : 20-11-08 18:07



Stig Sørensen (20-11-2008)
Kommentar
Fra : Stig Sørensen


Dato : 20-11-08 08:34

On 20 Nov., 16:03, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:

(snipper lige alt væk)

Jeg tror jeg forstår lidt bedre nu, Dan. Mange tak skal du have!
Jeg vil bestemt gå igang med at kigge nærmere på classes.

Jeg var gået lidt igang med at lave mine egne funktioner som jeg så
altid kunne bruge i mine projekter, og det vil jeg helt klart også
gøre færdigt.
Feks en simpelt mysql_query, fik jeg lavet dette:


---------------------------------------------------------------------------------
function sql_query($from, $what="*") {

   global $row;
   $result = mysql_query("SELECT $what from $from");
   if (!$result) {
die('Invalid query: ' . mysql_error());
   }

   while ($row = mysql_fetch_assoc($result)) {
   return $row;
   }
}
---------------------------------------------------------------------------------

Det virker så fint ved:

sql_query("info");
echo $row['navn'];

Dét som jeg så bare ikke lige tog højde for, var at hvis der er flere
rækker der skal returneres, ja det er bare surt, fordi den returnere
jo kun det allerførste - ergo får kun ét enkelt navn ud af databasen,
selvom der er flere.

Synes ellers lige det var så godt lavet


Nå, men lige tage læsebrillerne på, og vil forsøge at gøre mig klog på
OOP.

Venlige hilsner
Stig

Martin (20-11-2008)
Kommentar
Fra : Martin


Dato : 20-11-08 18:07

Stig Sørensen wrote:
> On 20 Nov., 16:03, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:
>
> (snipper lige alt væk)
>
> Jeg tror jeg forstår lidt bedre nu, Dan. Mange tak skal du have!
> Jeg vil bestemt gå igang med at kigge nærmere på classes.
>
> Jeg var gået lidt igang med at lave mine egne funktioner som jeg så
> altid kunne bruge i mine projekter, og det vil jeg helt klart også
> gøre færdigt.
> Feks en simpelt mysql_query, fik jeg lavet dette:

OOP, det er altid det næste step
Genbrug, genbrug og genbrug

Jeg har rigtig mange ting som jeg genbruger til alle mine projekter.

Dette være sig
Mit database lag, som ligger imellem min kode og PDO_MySQL eller
PEAR::DB2, alt efter hvad jeg vil bruge :)

Bruger login system, samt bruger rettigheder.

også er der en helt masse services - SOAP, XML osv osv.

Dog er jeg ved at migrere alt over til Zend Framework, så ca. fra nu af
og til de næste projekter, vil Zend Framework blive mit hoved framework.

Jeg valgte iøvrigt ZF til fordel fremfor CakePHP og Symfony, da ZF kan
bruges som enkeltstående klasser, og man derfor ikke behøver at bruge
MVC strukturen.


>
>
> ---------------------------------------------------------------------------------
> function sql_query($from, $what="*") {
>
>    global $row;
>    $result = mysql_query("SELECT $what from $from");
>    if (!$result) {
> die('Invalid query: ' . mysql_error());
>    }
>
>    while ($row = mysql_fetch_assoc($result)) {
>    return $row;
>    }
> }
> ---------------------------------------------------------------------------------
>
> Det virker så fint ved:
>
> sql_query("info");
> echo $row['navn'];
>
> Dét som jeg så bare ikke lige tog højde for, var at hvis der er flere
> rækker der skal returneres, ja det er bare surt, fordi den returnere
> jo kun det allerførste - ergo får kun ét enkelt navn ud af databasen,
> selvom der er flere.

class SQL {

private $link;
private $query;

function __construct() {
$this->db_link = mysql_connect( ... ) OR die(mysql_error());
mysql_select_db(..., $this->db_link) OR die(mysql_error());
}

function query($query) {
$this->query = mysql_query($query);
}

function fetch_array() {
return mysql_fetch_array($this->query);
}

function fetch_row() {
return mysql_fetch_row($this->query);
}
}

$db = SQL;
while ( $r = $db->fetch_array() ) {
...
}

fx.

Selvfølgelig kan det laves meget bedre, og pas iøvrigt på med at bruge
mysql_ funktionerne, eller rettere bruge dem i din hoved klasse (mysql
skulle gerne være en klasse som extender din hoved sql klasse), for så
er det også lige pludseligt muligt at skifte til andre database typer,
såsom PostgreSQL eller MSSQL - man kan aldrig vide hvad man egentlig
lige for lyst til at arbejde med.

Jeg har selv været glad for at jeg netop inkluderet PostgreSQL i min
klasse, da jeg skulle til at lege med transaktioner, og ja bevares det
virker i MySQL, men i PostgreSQL er det ikke muligt IKKE at vælge
transaktions tabeller.

Anyways, i min klasse har jeg fx. en statisk funktion hvor man så for et
pænt array ud

$output = SQL::fetch('SELECT ....');
foreach ($output AS $o) {
echo $o['id'];
}

Desuden så kan $output sendes direkte til template motoren.

Første version af min DB ting, ligger forresten her
<http://www.phpclasses.org/browse/package/3821.html>
BEMÆRK at jeg lige nu bruger version 6-7 stykker, da den er omskrevet en
hel del gange hehe

Template engines er også en god ting at lære, hvis man ikke vil benytte
MVC strukturen.

(smarty og templatelite kan anbefales, eller templatelite)

>
> Synes ellers lige det var så godt lavet
>
>
> Nå, men lige tage læsebrillerne på, og vil forsøge at gøre mig klog på
> OOP.

OOP handler meget om at få struktureret koden på en lidt og læsevenlig
måde, så den næste/med udvikler kan arbejde videre med det uden at kigge
hele sitet igennem for at se hvad det egentlig er der menes.

Desuden så handler det også om imo at få fjernet HTML/PHP/Javascript
osv. kode fra hinanden, så den ene udvikler kan arbejde med det han er
bedst til osv. Altså ligesom man har gjort med CSS og HTML, kan vel sige
på en måde :)

PS
Det kan tage LANG (for nogle år...) at bare kunne se meningen med OOP,
også bagefter tager det også langtid at arbejde med det.

Det er faktisk som at lære PHP fra bunden af...

Jeg vil anbefale dig, hvis du vil bruge det seriøst, at finde enten
nogle webinars, eller nogle decideret kurser til dette. Zend holder
begge dele.

Martin (20-11-2008)
Kommentar
Fra : Martin


Dato : 20-11-08 19:24

Martin wrote:
> function fetch_array() {
> return mysql_fetch_array($this->query);

skal være
return mysql_fetch_array($this->query, $this->link);


> }
>
> function fetch_row() {
> return mysql_fetch_row($this->query);

skal være
return mysql_fetch_array($this->query, $this->link);

Stig Sørensen (20-11-2008)
Kommentar
Fra : Stig Sørensen


Dato : 20-11-08 09:58

Kan jeg få dig til at vise hvordan din result2array() funktion virker?
Og evt. få et glims af den? :)


Vil meget gerne lave noget ligende, men det halter lige med det sidste.

Dan Storm (20-11-2008)
Kommentar
Fra : Dan Storm


Dato : 20-11-08 21:57

Stig Sørensen skrev:
> Kan jeg få dig til at vise hvordan din result2array() funktion virker?
> Og evt. få et glims af den? :)

Ja, det må du da :)



public function result2array($type = MYSQLI_BOTH)
{

   switch (strtolower($type))
   {
      case "assoc":
         $type = MYSQL_ASSOC;
         break;
      case "num":
         $type = MYSQL_NUM;
         break;
      default:
         $type = MYSQL_BOTH;
   }

   $resArray = array();
   
   $i = 0;
   while($row = $this->result->fetch_array($type))
   {
      while(list($key, $value)=each($row))
         $resArray[$i][$key] = $value;

         $i++;
   }

   return $resArray;

}

$this->result er så resultatet af min mysql query... :)
Den skal nok lige omskrives til mysql istedet for mysqli, men nu har du
idéen. :)

> Vil meget gerne lave noget ligende, men det halter lige med det sidste.

Det der er smart ved den her gruppe er at når du har forsøgt dig og går
i stå eller gerne vil have optimeret/kommenteret din kode, så er vi
allesammen herinde til at kaste 'sten' efter dig :)

Bare husk på at vi allesammen har hver vores måde at skrive tingene på -
meget af det at scripte handler også om smag og behag.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

David Konrad (20-11-2008)
Kommentar
Fra : David Konrad


Dato : 20-11-08 22:41

Dan Storm wrote:
> Stig Sørensen skrev:
>> Kan jeg få dig til at vise hvordan din result2array() funktion
>> virker? Og evt. få et glims af den? :)
>
> Ja, det må du da :)
>
>
>
> public function result2array($type = MYSQLI_BOTH)
> {
>
> switch (strtolower($type))
> {
> case "assoc":
> $type = MYSQL_ASSOC;
> break;
> case "num":
> $type = MYSQL_NUM;
> break;
> default:
> $type = MYSQL_BOTH;
> }

*Den* fatter jeg ikke helt

Hvorfor dog ligefrem øge fejlspektret, ved at lade $type være en variabel,
der så forsøges mappet over til en eksisterende konstant - OG endda, hvis
typen ikke matcher de 2 muligheder der er, sættes $type til at være noget
andet end det, som $type er per default? Default value er MYSQLI_BOTH, men
hvis $type overføres som f.eks "andersfoght", bliver den sat til MYSQL_BOTH,
ja den bliver ved ''/MYSQLI_BOTH sat til MYSQL_BOTH?

Det virker unødvendigt gnidret og risikobetonet (som om det har været en
bunden opgave)

hvorfor ikke (pseudo)

$MYSQL_array_type = array (MYSQL_ASSOC, MYSQL_BOTH, MYSQL_NUM);

public function result2array($type) {
if (!(in_array($type, $MYSQL_array_type)) {
$type=MYSQL_BOTH;
}

....

}

synes ikke det er en skam, at kalde en funktion med de konstanter der
allerede findes, i stedet for at øge risikoen ved at opfinde egne
kryptokonstanter, der så skal up eller lowercases, og derefter mappes over
til den rigtige konstant ved at sammenligne én for én.




Dan Storm (20-11-2008)
Kommentar
Fra : Dan Storm


Dato : 20-11-08 23:02

David Konrad skrev:
> Hvorfor dog ligefrem øge fejlspektret, ved at lade $type være en variabel,
> der så forsøges mappet over til en eksisterende konstant - OG endda, hvis
> typen ikke matcher de 2 muligheder der er, sættes $type til at være noget
> andet end det, som $type er per default? Default value er MYSQLI_BOTH, men
> hvis $type overføres som f.eks "andersfoght", bliver den sat til MYSQL_BOTH,
> ja den bliver ved ''/MYSQLI_BOTH sat til MYSQL_BOTH?

Nu du påpeger det, så kunne jeg lige så godt få det rettet. :)
Til at starte med havde jeg slet ikke switchen og idéen var jo så at jeg
skulle sende enten MYSQLI_NUM eller MYSQLI_BOTH med. Men i min fart har
jeg helt overset at jeg bruger konstanter fra både mysqli og mysql.

Det er selvfølgelig rettet nu, og min standard $type er "assoc", hvilket
var hele idéen. Så nu ser det sådan ud (hvilket oprindeligt var idéen
indtil jeg fik travlt med en anden funktion):

public function result2array($type = "")
{

   switch (strtolower($type))
   {
      case "both":
         $type = MYSQLI_BOTH;
         break;
      case "num":
         $type = MYSQLI_NUM;
         break;
      default:
         $type = MYSQLI_ASSOC;
   }

   $resArray = array();
   $i = 0;
   while($row = $this->result->fetch_array($type))
   {
      while(list($key, $value)=each($row))
         $resArray[$i][$key] = $value;

      $i++;
   }

   return $resArray;
}

Tak for påpegelsen ;)

>
> Det virker unødvendigt gnidret og risikobetonet (som om det har været en
> bunden opgave)

Jeg er ikke sikker på jeg forstår hvorfor du synes det er risikobetonet?

> hvorfor ikke (pseudo)
>
> $MYSQL_array_type = array (MYSQL_ASSOC, MYSQL_BOTH, MYSQL_NUM);
>
> public function result2array($type) {
> if (!(in_array($type, $MYSQL_array_type)) {
> $type=MYSQL_BOTH;
> }
>
> ....
>
> }

Fordi jeg er glad for min switch?
Din løsning fungerer lige så godt som min (efter jeg fik mit rettet)?

> synes ikke det er en skam, at kalde en funktion med de konstanter der
> allerede findes, i stedet for at øge risikoen ved at opfinde egne
> kryptokonstanter, der så skal up eller lowercases, og derefter mappes over
> til den rigtige konstant ved at sammenligne én for én.

Det er da også okay at du ikke synes det. Men nu er det også en klasse
jeg bruger selv og har fundet det behageligt at benytte mig af
'kryptokonstanterne'. Smag og behag.



--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

David Konrad (20-11-2008)
Kommentar
Fra : David Konrad


Dato : 20-11-08 23:31

Dan Storm wrote:

> Nu du påpeger det, så kunne jeg lige så godt få det rettet. :)
> Til at starte med havde jeg slet ikke switchen og idéen var jo så at
> jeg skulle sende enten MYSQLI_NUM eller MYSQLI_BOTH med. Men i min
> fart har jeg helt overset at jeg bruger konstanter fra både mysqli og
> mysql.
> Det er selvfølgelig rettet nu, og min standard $type er "assoc",
> hvilket var hele idéen. Så nu ser det sådan ud (hvilket oprindeligt
> var idéen indtil jeg fik travlt med en anden funktion):

Det kender jeg godt! Man starter ét sted, med funktionen / klassen, den skal
bare et eller andet simpelt, og så bliver der langsomt hældt mere og mere
på, og tilsidst står man med et uhyre.

>> Det virker unødvendigt gnidret og risikobetonet (som om det har
>> været en bunden opgave)
>
> Jeg er ikke sikker på jeg forstår hvorfor du synes det er
> risikobetonet?

Fordi du laver det ekstra "lag". Hvad er problemet med

$this->result2array(MYSQL_ASSOC)

ift

$this->result2array('assoc')

hvad er den bagvedliggende pointe med at skulle kalde med "assoc", og ikke
bare MYSQL_ASSOC? Det kan godt være jeg har misforstået det, men det eneste
du opnår er da ret beset kun en fejlkilde yderligere - det er ikke sværere
at skrive assoc, Assoc, ASSOC (mv, du lowercaser) end MYSQL_ASSOC??

>> hvorfor ikke (pseudo)
>>
>> $MYSQL_array_type = array (MYSQL_ASSOC, MYSQL_BOTH, MYSQL_NUM);
>>
>> public function result2array($type) {
>> if (!(in_array($type, $MYSQL_array_type)) {
>> $type=MYSQL_BOTH;
>> }
>>
>> ....
>>
>> }
>
> Fordi jeg er glad for min switch?

Det er et godt argument! Helt ærligt. Man skal naturligvis bruge det, man er
glad for - så er det også nemmere at overskue og rette i koden.

> Det er da også okay at du ikke synes det. Men nu er det også en klasse
> jeg bruger selv og har fundet det behageligt at benytte mig af
> 'kryptokonstanterne'. Smag og behag.

selvfølgelig.



Dan Storm (20-11-2008)
Kommentar
Fra : Dan Storm


Dato : 20-11-08 23:38

David Konrad skrev:
> Fordi du laver det ekstra "lag". Hvad er problemet med
>
> $this->result2array(MYSQL_ASSOC)
>
> ift
>
> $this->result2array('assoc')

Det er der heller ikke noget problem med. Nu var det bare lige sådan jeg
fik idéen :) Hvis den nu skulle distrubieres med et eller andet, kunne
det klar være en fordel at gøre det mere gennemskueligt, men igen, det
er kun mig der bruger den.

> hvad er den bagvedliggende pointe med at skulle kalde med "assoc", og ikke
> bare MYSQL_ASSOC? Det kan godt være jeg har misforstået det, men det eneste
> du opnår er da ret beset kun en fejlkilde yderligere - det er ikke sværere
> at skrive assoc, Assoc, ASSOC (mv, du lowercaser) end MYSQL_ASSOC??

Tja, den vil jo, som beset, altid defaulte til MYSQLI_ASSOC hvis man
ikke skriver det rigtige - om det så er "assoc", "num", "both" eller om
det er MYSQLI_ASSOC, MYSQLI_NUM eller MYSQLI_BOTH kan jeg reelt ikke se
forskellen i, som du selv udpeger. Og som jeg sagde før kan jeg godt se
idéen i det, hvis andre skulle bruge klassen, men nu fungerer den jo
sådan for mig :)

> Det er et godt argument! Helt ærligt. Man skal naturligvis bruge det, man er
> glad for - så er det også nemmere at overskue og rette i koden.

Lige præcis :)


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

ScooterGrisen (20-11-2008)
Kommentar
Fra : ScooterGrisen


Dato : 20-11-08 13:26

Jeg kunne godt tænke mig og lave et PHP julelys som passer sig selv og
brænder et tal ned hver dag og det skulle gerne være en animeret
flamme.
Det kunne f.eks være et stykke flash som altså er lavet fra PHP.

Eller en julekalender i PHP hvor man kan åbne en låge hver dag...
eventuelt kan de selv åbne sig sådan at brugeren ikke skal trykke på
noget.

Og hvis du har lyst så må du da gerne komme til nogen foreslag til
hvodan jeg kan forbedre min PHP kode... den er lidt rodet nogen
steder.
http://mentos.wep.dk/scooterhjemmeside/php/viskode.php?phpfunktioner.php

Dan Storm (20-11-2008)
Kommentar
Fra : Dan Storm


Dato : 20-11-08 22:26

ScooterGrisen skrev:
> Jeg kunne godt tænke mig og lave et PHP julelys som passer sig selv og
> brænder et tal ned hver dag og det skulle gerne være en animeret
> flamme.
> Det kunne f.eks være et stykke flash som altså er lavet fra PHP.
Hvad for noget sludder?
Du kunne måske lave en flash der tjekker på serveren hvilken dato det
er, så du ikke er afhængig af klientens tid, så folk ikke kan snyde.

> Eller en julekalender i PHP hvor man kan åbne en låge hver dag...
> eventuelt kan de selv åbne sig sådan at brugeren ikke skal trykke på
> noget.

Det er jo bare at tjekke hvilken dag det er, og så skifte et billede ud.
Men det kunne jo være du også tænkte på noget flash?

> Og hvis du har lyst så må du da gerne komme til nogen foreslag til
> hvodan jeg kan forbedre min PHP kode... den er lidt rodet nogen
> steder.
> http://mentos.wep.dk/scooterhjemmeside/php/viskode.php?phpfunktioner.php

På linie 73 påbegynder du en funktion inde i en funktion - hvad er
formålet med det?

Næsten alle dine funktioner udskriver HTML. Det begrænser dig, så du
skal lave funktionen om for hver gang du skal bruge den i en anden
sammenhæng.

På linie 7 starter du funktionen visrandomlink()
Du har et array du kalder $database. Er det fordi du ikke har adgang til
mysql?

Din struktur mangler struktur... tilfældig indrykning og linieskift.

Og dine switch i lavthumbnail() indeholder logisk behandling - det kunne
lige så godt være gjort af en funktion.

Del dine funktioner op i flere filer, så der kommer overblik.
Lad dine funktioner der behandler filer ligge i en fil, og dem der
skaber noget til outputtet i en anden... det giver meget mere konsistens
og overblik.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

David Konrad (20-11-2008)
Kommentar
Fra : David Konrad


Dato : 20-11-08 22:47

Dan Storm wrote:
> ScooterGrisen skrev:
>> Jeg kunne godt tænke mig og lave et PHP julelys som passer sig selv
>> og brænder et tal ned hver dag og det skulle gerne være en animeret
>> flamme.
>> Det kunne f.eks være et stykke flash som altså er lavet fra PHP.

> Hvad for noget sludder?
> Du kunne måske lave en flash der tjekker på serveren hvilken dato det
> er, så du ikke er afhængig af klientens tid, så folk ikke kan snyde.

http://www.ibm.com/developerworks/opensource/library/os-php-flash/?S_TACT=105AGX52&S_CMP=cn-a-os

Lav et lys med en flamme i flash, og sæt den til at blive kortere og kortere
i PHP, afhængig af datoen.




Dan Storm (20-11-2008)
Kommentar
Fra : Dan Storm


Dato : 20-11-08 23:04

David Konrad skrev:
> Dan Storm wrote:
>> Hvad for noget sludder?
>> Du kunne måske lave en flash der tjekker på serveren hvilken dato det
>> er, så du ikke er afhængig af klientens tid, så folk ikke kan snyde.
>
> http://www.ibm.com/developerworks/opensource/library/os-php-flash/?S_TACT=105AGX52&S_CMP=cn-a-os
>
> Lav et lys med en flamme i flash, og sæt den til at blive kortere og kortere
> i PHP, afhængig af datoen.

Var det i bund og grund ikke også det jeg skrev? Er det ikke lidt
overkill at bruge PHP til at genere flashen til en så simpel ting?

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

David Konrad (21-11-2008)
Kommentar
Fra : David Konrad


Dato : 21-11-08 02:19

Dan Storm wrote:

>> Lav et lys med en flamme i flash, og sæt den til at blive kortere og
>> kortere i PHP, afhængig af datoen.
>
> Var det i bund og grund ikke også det jeg skrev? Er det ikke lidt
> overkill at bruge PHP til at genere flashen til en så simpel ting?

Fuldkommen enig. Det kan gøres med javascript.



Stig Sørensen (21-11-2008)
Kommentar
Fra : Stig Sørensen


Dato : 21-11-08 00:36

(svarer på hele tråden).


Tak for de mange svar og forklaringer. Brugte aftenen i går på at
finde gratisse video tutorials der viste mig "the basics" inden for
OOP PHP.
Jeg har selvfølgelig efterfølgende prøvet at lave mine egne classes,
som jeg vil bruge i mine projekter.

I må meget gerne kommentere om jeg har fattet bare en smule af det
hele.
- Jeg må sige, at det føles som om at lære PHP forfra, det er virkelig
en hel ny måde at tænke på.

myclass.php:
http://pastebin.com/f177a5139

Og så kalder jeg dem således feks:


<?php
include("class_db.php");


$con = new database;
$con->db_connect("localhost", "slk", "5555", "test");

$test_query = new sql_query;
$test_query->insert("info", "navn, adresse, tlf", "'Stig', 'Minvej
12', '12345678'");

?>


Min db_connect synes jeg fungere udemærket. (Har altid kun brug for at
vælge én og samme database, derfor har jeg smædet dem sammen).
Min insert() fungere også fint, selvom jeg må indrømme det nok vil
være uoverskueligt hvis nu der er 25 kolonner der skulle indsættes
data i.
Jeg vil arbejde hen på at kunne stille det sådanne op i stedet for:
("table"=>"info", "navn"=>"Stig", "adresse"=>"Minvej 12",
"tlf"=>"12345678");
- Ville det ikke være en bedre løsning? Andre forslag?

Min query fungere også fint, og har endda delt den op som i kan se i
class.php - én der tager imod den specifikke query, og én der udfører
den og tjekker for fejl.
Jeg har dog voldsomme problemer med at få det vil at virke med
mysql_fetch_assoc, i en while-løkke. Kan simpelthen ikke se hvordan
det skulle kunne fungere i praksis.
Men det er måske også lige avanceret for mig endnu.


Mange flere dumme spørgsmål, skal I nok forvente ;)

Mvh
Stig

Dan Storm (21-11-2008)
Kommentar
Fra : Dan Storm


Dato : 21-11-08 08:54

Stig Sørensen skrev:
> <?php
> include("class_db.php");
>
>
> $con = new database;
> $con->db_connect("localhost", "slk", "5555", "test");
>
> $test_query = new sql_query;
> $test_query->insert("info", "navn, adresse, tlf", "'Stig', 'Minvej
> 12', '12345678'");
>
> ?>
>
>
> Min db_connect synes jeg fungere udemærket. (Har altid kun brug for at
> vælge én og samme database, derfor har jeg smædet dem sammen).

Jeg forstår ikke helt hvorfor du deler de to ting op?
Det ville da være bedre at samle det, så du i instansieringen af
sql_query etablerer databaseforbindel og holder den inde i dit scope.

> Min insert() fungere også fint, selvom jeg må indrømme det nok vil
> være uoverskueligt hvis nu der er 25 kolonner der skulle indsættes
> data i.

while(list($name, $email)=each($emailArray))
{
   $test_query->insert("mails", "name, email", $name.", ".$email)
}

Det synes jeg da er ret overskueligt?

> Jeg vil arbejde hen på at kunne stille det sådanne op i stedet for:
> ("table"=>"info", "navn"=>"Stig", "adresse"=>"Minvej 12",
> "tlf"=>"12345678");
> - Ville det ikke være en bedre løsning? Andre forslag?

Det kommer an på dit behov og hvor fleksibelt det skal være.
Jeg ville foreslå at du lavede en klasse der klarede lige præcis det
kald for dig sammen med dit databaselag istedet.

> Min query fungere også fint, og har endda delt den op som i kan se i
> class.php - én der tager imod den specifikke query, og én der udfører
> den og tjekker for fejl.

Jaeh, tjekker og tjekker... Dit script dør hvis der er fejl og fortæller
brugeren om det.

> Jeg har dog voldsomme problemer med at få det vil at virke med
> mysql_fetch_assoc, i en while-løkke. Kan simpelthen ikke se hvordan
> det skulle kunne fungere i praksis.

Absolut ikke, du skal jo bare gøre ligesom du plejer.
Dit problem er bare at du ikke gemmer resultatet af din query i en
variabel du kan arbejde med - ligesom du plejer.

> Men det er måske også lige avanceret for mig endnu.

Det tror jeg ikke det er; det er ret simpelt det du har gang i.

> Mange flere dumme spørgsmål, skal I nok forvente ;)

Tja, hellere det end at sidde og fumle i blinde, ikke? ;)


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Dan Storm (21-11-2008)
Kommentar
Fra : Dan Storm


Dato : 21-11-08 09:12

Du kan prøve at kigge på det jeg har redigeret ud fra din kildekode:
<url: http://pastebin.com/d1c1ebae>

Nu har du tingene samlet.
For at bruge det jeg har skrevet skal du gøre således:

$db = new database("server", "user", "pass", "database");

$db->insert("users", "username, password", $username.", ".$password);
$db->getQuery("email", "users");

Jeg har ikke lige testet den, men idéen er der.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Martin Ploug (23-11-2008)
Kommentar
Fra : Martin Ploug


Dato : 23-11-08 18:00


"Dan Storm" <shadyz_REMOVETHIS_@err0r.dk> skrev i meddelelsen
news:49266d57$0$15881$edfadb0f@dtext01.news.tele.dk...
> Du kan prøve at kigge på det jeg har redigeret ud fra din kildekode:
> <url: http://pastebin.com/d1c1ebae>
>
> Nu har du tingene samlet.
> For at bruge det jeg har skrevet skal du gøre således:
>
> $db = new database("server", "user", "pass", "database");
>
> $db->insert("users", "username, password", $username.", ".$password);
> $db->getQuery("email", "users");
>
> Jeg har ikke lige testet den, men idéen er der.
>
>
> --
> Dan Storm - storm at err0r dot dk / http://err0r.dk
>
> Tro ikke brugerne vil gøre noget for at undgå dit killfilter
> - Så vigtig er du heller ikke!

Hej Stig

Hvis du fortsat mangler et åbent projekt, er du velkommen
til at deltage i udviklingen af en ny version af musiklokaler.dk.

Mvh. Martin
E-mail: mploug@pc.dk


Stig Sørensen (21-11-2008)
Kommentar
Fra : Stig Sørensen


Dato : 21-11-08 01:10

On 21 Nov., 08:53, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:

> Jeg forstår ikke helt hvorfor du deler de to ting op?
> Det ville da være bedre at samle det, så du i instansieringen af
> sql_query etablerer databaseforbindel og holder den inde i dit scope.

Noteret, det vil jeg gøre ;)



> while(list($name, $email)=each($emailArray))
> {
>         $test_query->insert("mails", "name, email", $name.", ".$email)
>
> }
>
> Det synes jeg da er ret overskueligt?

Er det også, det smarte ved det her er jo at jeg kan lave flere
funktionen i mit class der alle inserter til database, så kan man jo
vælge hvilken een man lige har brug for - dét er da smart, tænkte jeg
lige ;)

Har lavet den lidt om:

   function insert($what, $column_data) {

      $sql = "INSERT INTO $what SET $column_data";
      $this->query($sql);
   }

$test_query->insert("info", "navn='Stig', adresse='Minvej'");



> > Min query fungere også fint, og har endda delt den op som i kan se i
> > class.php - én der tager imod den specifikke query, og én der udfører
> > den og tjekker for fejl.
>
> Jaeh, tjekker og tjekker... Dit script dør hvis der er fejl og fortæller
> brugeren om det.

Er det ikke også hvad der skal ske? Sådan har jeg altid lavet querys
nemlig. Dø - hvis noget er galt, og fortæl hvorfor ;)
Man praktisere måske en anden måde ved brug af classes? Fortæl
fortæl ;)


> Absolut ikke, du skal jo bare gøre ligesom du plejer.
> Dit problem er bare at du ikke gemmer resultatet af din query i en
> variabel du kan arbejde med - ligesom du plejer.

Så langt har jeg også tænkt. Men jeg vil mene at while-løkkens
(mysql_fetch_assoc) { } -klemmer skal være i view-dokumentet? (altså
ikke inde i classet?).

Normalt når jeg laver querys og bruger mysql_fetch_assoc:

while ($row = mysql_fetch_assoc($result)) {
echo $row["navn"];
echo "<br />\n";
}

Så vil det feks give output:

Stig<br />
Dan<br />
Kim<br />
Peter<br />

- Altsammen inden for de to { } -klemmer.
Så når jeg vil echo indholdet ud af min query skal jeg vel have de to
klemmer med for at fortælle hvad der skal while-loopes?

Ved godt det er et meget rodet eksempel, men det er lidt svært at
forklare ;)

Det jeg mener er, at det kan vel ikke være nok med, feks:

echo $minquery->query(blaba);

Men nærmere:

$minquery->query(blaba) {

echo $row['navn'];

}


Håber det giver mening ;)


> > Mange flere dumme spørgsmål, skal I nok forvente ;)
>
> Tja, hellere det end at sidde og fumle i blinde, ikke? ;)


Korrekt, og mange tak for din tid+hjælp so far ;)

Dan Storm (21-11-2008)
Kommentar
Fra : Dan Storm


Dato : 21-11-08 09:21

Stig Sørensen skrev:
> Har lavet den lidt om:
>
>    function insert($what, $column_data) {
>
>       $sql = "INSERT INTO $what SET $column_data";
>       $this->query($sql);
>    }
>
> $test_query->insert("info", "navn='Stig', adresse='Minvej'");

Altså, jeg bryder mig jo ikke synderligt om den måde du vil bruge din
insert på(), men det er nok smag og behag.

> Er det ikke også hvad der skal ske? Sådan har jeg altid lavet querys
> nemlig. Dø - hvis noget er galt, og fortæl hvorfor ;)
> Man praktisere måske en anden måde ved brug af classes? Fortæl
> fortæl ;)

Praksissen består nu i at man ikke fortæller brugeren hvad fejlen er
eller hvor den ligger. :)
Det har egentlig ikke noget med klasser at gøre.

personligt gør jeg det at jeg logger alle mine fejl ned i en tekst fil,
som jeg så modtager en kopi af en gang i døgnet - såfremt der er indhold
i den (loggen roterer for hver dag). Mine brugere får så en pæn besked
om at websitet har noteret en fejl og at der vil blive taget hånd om det.


> Så langt har jeg også tænkt. Men jeg vil mene at while-løkkens
> (mysql_fetch_assoc) { } -klemmer skal være i view-dokumentet? (altså
> ikke inde i classet?).
>
> Normalt når jeg laver querys og bruger mysql_fetch_assoc:
>
> while ($row = mysql_fetch_assoc($result)) {
> echo $row["navn"];
> echo "<br />\n";
> }
>

Hvis du vil integrere den funktionalitet i din klasse, skal du kigge på
mysql_fetch_assoc() og se hvad det egentlig er den gør. :)

Hint?
while($row = $test_query->getRows())
{
   echo $row["navn"]."<br />";
}

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Martin (21-11-2008)
Kommentar
Fra : Martin


Dato : 21-11-08 10:04

Stig Sørensen wrote:
> On 21 Nov., 08:53, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:
> Har lavet den lidt om:
>
>    function insert($what, $column_data) {
>
>       $sql = "INSERT INTO $what SET $column_data";
>       $this->query($sql);
>    }
>
> $test_query->insert("info", "navn='Stig', adresse='Minvej'");

Jeg ville nok gøre således

function insert($what, $column_data) {
$insert = array();
foreach ($column_data AS $k => $v) {
$insert[] = $k . ' = ' . mysql_real_escape_string($v);
}

$sql = "INSERT INTO $what SET implode(',', $insert);
$this->query($sql);
}

$test_query->insert("info", array('navn' => 'Stig', 'adresse' = =>
'Minvej'"));

Hele foreach tingen, kan jo så laves i en funktion for sig selv, da den
samme jo skal bruges til UPDATE - så slipper man for at lave det 2 gange :)

N/A (21-11-2008)
Kommentar
Fra : N/A


Dato : 21-11-08 14:10



N/A (21-11-2008)
Kommentar
Fra : N/A


Dato : 21-11-08 09:21



N/A (21-11-2008)
Kommentar
Fra : N/A


Dato : 21-11-08 09:21



Stig Sørensen (21-11-2008)
Kommentar
Fra : Stig Sørensen


Dato : 21-11-08 05:35

On Nov 21, 9:21 am, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:


> personligt gør jeg det at jeg logger alle mine fejl ned i en tekst fil,
> som jeg så modtager en kopi af en gang i døgnet - såfremt der er indhold
> i den (loggen roterer for hver dag). Mine brugere får så en pæn besked
> om at websitet har noteret en fejl og at der vil blive taget hånd om det.

Smart, dét ender jeg nok med at tyvhugge fra dig. :)


> Hvis du vil integrere den funktionalitet i din klasse, skal du kigge på
> mysql_fetch_assoc() og se hvad det egentlig er den gør. :)
>
> Hint?
> while($row = $test_query->getRows())
> {
>         echo $row["navn"]."<br />";
>
> }

Jamen Dan, du er min læremester jo :)

Det fungere jo bare, lykkedes mig selv at stable funktionen på benene
getRows:

   function getRows() {
      return mysql_fetch_assoc($this->result);
   }

Det virker fornemt med:

$con->getQuery("info");

while($row = $con->getRows())
{
echo $row['navn'] . " - " . $row['adresse']."<br />";
}


Dét fandme smart! Kan godt se det smarte med OO-programmering, men
hold op jeg skal lige lære at tænke anderledes!

Mange tak for hjælpen indtil videre.

Mvh
Stig

Dan Storm (21-11-2008)
Kommentar
Fra : Dan Storm


Dato : 21-11-08 14:10

Stig Sørensen skrev:
> On Nov 21, 9:21 am, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:
>
>
>> personligt gør jeg det at jeg logger alle mine fejl ned i en tekst fil,
>> som jeg så modtager en kopi af en gang i døgnet - såfremt der er indhold
>> i den (loggen roterer for hver dag). Mine brugere får så en pæn besked
>> om at websitet har noteret en fejl og at der vil blive taget hånd om det.
>
> Smart, dét ender jeg nok med at tyvhugge fra dig. :)

Husk lige at tage den opdaterede version som David lige spottede for mig
;) Hvis man ikke kan stå ved sine fejl lærer man jo aldrig noget... :p

> Det fungere jo bare, lykkedes mig selv at stable funktionen på benene
> getRows:
>
>    function getRows() {
>       return mysql_fetch_assoc($this->result);
>    }
>
> Det virker fornemt med:
>
> $con->getQuery("info");
>
> while($row = $con->getRows())
> {
> echo $row['navn'] . " - " . $row['adresse']."<br />";
> }

Super :D
Du kommer til at lære meget mere og får nok også lyst til at udbygge
dine klasser og håndtere fejl fremfor at vise dem for brugerne.

Måske vil det også være rart at logge visse events for øge sikkerheden
af dine applikationer - eller håndtere brugerinformationer og så videre...

> Dét fandme smart! Kan godt se det smarte med OO-programmering, men
> hold op jeg skal lige lære at tænke anderledes!

Du skal ihvertfald lære at være mere opmærksom på dit scope for at kunne
drage fuld udnyttelse af det.

Samtidig vil jeg nok anbefale dig at gå over og bruge OOP'en som
anbefalet i PHP5. At erklære tilgængeligheden af dine variabler. Bruge
__construct() og __destruct().

> Mange tak for hjælpen indtil videre.

Så lidt.
Når du er kommet et stykke videre med dit databaselag, vil jeg da gerne
se hvad du er kommet frem til :)

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Stig Sørensen (22-11-2008)
Kommentar
Fra : Stig Sørensen


Dato : 22-11-08 01:54

On Nov 21, 2:09 pm, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:

> Samtidig vil jeg nok anbefale dig at gå over og bruge OOP'en som
> anbefalet i PHP5. At erklære tilgængeligheden af dine variabler. Bruge
> __construct() og __destruct().

Har bla. ønsket mig en PHP 5 lærebog i Jul, så den håber jeg da at jeg
får ;)

> > Mange tak for hjælpen indtil videre.
>
> Så lidt.
> Når du er kommet et stykke videre med dit databaselag, vil jeg da gerne
> se hvad du er kommet frem til :)


Jamen jeg synes jeg er kommet et godt stykke videre. Min kode kan
sikkert optimeres, men jeg kan finde ud af at bruge det, og hold hvor
kan jeg spare en del kode nu her, hvis jeg skulle stable en gæstebog
på benene, feks. Netop fordi en del af arbejdet jo er lavet i mine
layers ;) - Smart, smart smart!

Nå men her er hvad jeg er kommet frem til indtil videre:
http://pastebin.com/f26e2a311


Enhver kommentar er naturligvis velkommen.

Mvh
Stig

Michael Rasmussen (22-11-2008)
Kommentar
Fra : Michael Rasmussen


Dato : 22-11-08 10:10



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste