Viderudvikling af ens php kunstskaber

This is a discussion on Viderudvikling af ens php kunstskaber within the Produktion af websider ved brug af php (dk.edb.internet.webdesign.serverside.php) forum.

Re: Viderudvikling af ens php kunstskaber

Postby =?iso-8859-1?Q?Stig_S=F8rensen?= on Fri Nov 21, 2008 12:35 am

(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:


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
=?iso-8859-1?Q?Stig_S=F8rensen?=
 
Posts: 88
Joined: Mon Oct 11, 2004 9:26 am

Re: Viderudvikling af ens php kunstskaber

Postby Dan Storm on Fri Nov 21, 2008 12:53 am

Stig Sørensen skrev:
> > 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
 
Posts: 587
Joined: Sun Sep 12, 2004 10:47 am

Re: Viderudvikling af ens php kunstskaber

Postby =?iso-8859-1?Q?Stig_S=F8rensen?= on Fri Nov 21, 2008 1:10 am

On 21 Nov., 08:53, Dan Storm 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 "
\n";
}

Så vil det feks give output:

Stig

Dan

Kim

Peter


- 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 ;)
=?iso-8859-1?Q?Stig_S=F8rensen?=
 
Posts: 88
Joined: Mon Oct 11, 2004 9:26 am

Re: Viderudvikling af ens php kunstskaber

Postby Dan Storm on Fri Nov 21, 2008 1:12 am

Du kan prøve at kigge på det jeg har redigeret ud fra din kildekode:
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!
Dan Storm
 
Posts: 587
Joined: Sun Sep 12, 2004 10:47 am

Re: Viderudvikling af ens php kunstskaber

Postby Dan Storm on Fri Nov 21, 2008 1:21 am

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 "
\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"]."
";
}

--
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
 
Posts: 587
Joined: Sun Sep 12, 2004 10:47 am

Re: Viderudvikling af ens php kunstskaber

Postby Martin on Fri Nov 21, 2008 2:04 am

Stig Sørensen wrote:
> On 21 Nov., 08:53, Dan Storm 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 :)
Martin
 
Posts: 1124
Joined: Wed Jul 16, 2003 10:57 pm

Re: Viderudvikling af ens php kunstskaber

Postby =?iso-8859-1?Q?Stig_S=F8rensen?= on Fri Nov 21, 2008 5:35 am

On Nov 21, 9:21 am, Dan Storm 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"]."
";
>
> }

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']."
";
}


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
=?iso-8859-1?Q?Stig_S=F8rensen?=
 
Posts: 88
Joined: Mon Oct 11, 2004 9:26 am

Re: Viderudvikling af ens php kunstskaber

Postby Dan Storm on Fri Nov 21, 2008 6:09 am

Stig Sørensen skrev:
> On Nov 21, 9:21 am, Dan Storm 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']."
";
> }

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!
Dan Storm
 
Posts: 587
Joined: Sun Sep 12, 2004 10:47 am

Re: Viderudvikling af ens php kunstskaber

Postby =?iso-8859-1?Q?Stig_S=F8rensen?= on Sat Nov 22, 2008 1:53 am

On Nov 21, 2:09 pm, Dan Storm 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
=?iso-8859-1?Q?Stig_S=F8rensen?=
 
Posts: 88
Joined: Mon Oct 11, 2004 9:26 am

Re: Viderudvikling af ens php kunstskaber

Postby Martin Ploug on Sun Nov 23, 2008 10:00 am


"Dan Storm" 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:
> 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

Martin Ploug
 
Posts: 170
Joined: Tue May 25, 2004 6:50 am

Previous

Return to Produktion af websider ved brug af php (dk.edb.internet.webdesign.serverside.php)

Who is online

Users browsing this forum: No registered users and 0 guests