abonnement Unibet Coolblue Bitvavo
pi_56251911
quote:
Op woensdag 23 januari 2008 15:27 schreef MuRKie het volgende:
maar met de basetag had dat dus werk gescheeld. Wat wel het voordeel is van mijn oplossing is dat ik nog steeds alle instellingen (in dit geval de siteroot) in de config.php kan instellen ipv in dit geval in de template..
De siteroot kan je ook gewoon in je template printen ipv in je links natuurlijk
  woensdag 23 januari 2008 @ 15:41:26 #204
67938 MuRKie
..warm as butters..
pi_56252002
quote:
Op woensdag 23 januari 2008 15:37 schreef Xcalibur het volgende:

[..]

De siteroot kan je ook gewoon in je template printen ipv in je links natuurlijk
Daar zit wat in
pi_56252302
quote:
Op woensdag 23 januari 2008 15:36 schreef MuRKie het volgende:

[..]

ik wist niet dat dat MVC daar voor stond
In de OOP tutorial die ik gisteren ben begonnen doe ik ook alles volgens het MVC model: [Perl] OOP tutorial / case study: DataRow.pm
Is wel in perl maar MVC is taalonafhankelijk. Misschien leuk om te volgen. Vanavond de volgende aflevering.
  woensdag 23 januari 2008 @ 16:18:30 #206
67938 MuRKie
..warm as butters..
pi_56252880
quote:
Op woensdag 23 januari 2008 15:53 schreef Farenji het volgende:

[..]

In de OOP tutorial die ik gisteren ben begonnen doe ik ook alles volgens het MVC model: [Perl] OOP tutorial / case study: DataRow.pm
Is wel in perl maar MVC is taalonafhankelijk. Misschien leuk om te volgen. Vanavond de volgende aflevering.
OOP is voor mij nog een stapje te ver ben ik bang..
Ik heb wel al een boek voor OOP aangeschafd maar dat was helemaal op Java toegespitst. Er werd wel vermeld dat OOP taalonafhankelijk is, maar ik vind het toch prettiger als ik meteen uitleg krijg vanuit php en ook oefeningen kan doen in php.. Heb alleen geen boek kunnen vinden die OOP behandeld voor php

Ik had wel een tijdje lopen rommelen met OOP,
kon ook wel wat losse klassen schrijven enzo, ik kreeg het alleen niet voor elkaar om het ook daadwerkelijk tot een geheel te koppelen.. Ik kon nog niet OOP denken en dat schoot dus nog niet op.. Ik was dan ook nog superleek met php, ik begin net een beetje meer te leren en heb besloten eerst gewoon goed te kunnen php-en en daarna naar OOP te gaan kijken.. Leek mij het meest verstandig..

Heb wel het complete handboek php5 / MySQL waar ook een stuk OOP wordt behandeld, hier heb ik nog niet uitgebreid naar gekeken bedenk ik mij net.. Misschien dat ik daar tezijnertijd nog wat aan kan hebben..

[ Bericht 12% gewijzigd door MuRKie op 23-01-2008 16:23:41 ]
pi_56253094
-Verkeerd topic-
  woensdag 23 januari 2008 @ 16:28:30 #208
67938 MuRKie
..warm as butters..
pi_56253152
quote:
Op woensdag 23 januari 2008 16:26 schreef Geqxon het volgende:
-Verkeerd topic-
?
pi_56253170
Ik heb mijn post weg-ge-edit. Want hij stond verkeerd.
  woensdag 23 januari 2008 @ 16:30:04 #210
67938 MuRKie
..warm as butters..
pi_56253187
quote:
Op woensdag 23 januari 2008 16:29 schreef Geqxon het volgende:
Ik heb mijn post weg-ge-edit. Want hij stond verkeerd.
Ow op die manier
pi_56254190
quote:
Op woensdag 23 januari 2008 16:18 schreef MuRKie het volgende:

[..]

OOP is voor mij nog een stapje te ver ben ik bang..
Juist omdat er altijd gedacht wordt dat OOP moeilijk of complex is, heb ik die tutorial gemaakt. Dit is een misvatting, in wezen is het heel simpel en (zeker het eindproduct) is vaak veel intuitiever dan puur imperatief programmeren. Ik ga ook behandelen hoe overerving werkt, hoe je classes met elkaar combineert en er 1 geheel van smeedt. Dus doe een poging het te volgen zou ik zeggen.
  woensdag 23 januari 2008 @ 18:49:55 #212
67938 MuRKie
..warm as butters..
pi_56256259
quote:
Op woensdag 23 januari 2008 17:10 schreef Farenji het volgende:

[..]

Juist omdat er altijd gedacht wordt dat OOP moeilijk of complex is, heb ik die tutorial gemaakt. Dit is een misvatting, in wezen is het heel simpel en (zeker het eindproduct) is vaak veel intuitiever dan puur imperatief programmeren. Ik ga ook behandelen hoe overerving werkt, hoe je classes met elkaar combineert en er 1 geheel van smeedt. Dus doe een poging het te volgen zou ik zeggen.
Maar wat ik zag bij jouw les 1 was dat er wel redelijk verschil zit in OOP met Perl vergeleken met PHP, dus is het voor mij dan wel nuttig om OOP met Perl te gaan leren?
pi_56256911
Kan het kloppen dat deze combi niet gaat lukken?

1
2
3
<?php
$output 
array_merge($outputa_function_that_returns_an_array($input));
?>


Misschien omdat $output zowel de returnwaarde gaat bevatten maar ook een inputwaarde van de array_merge functie is?
  woensdag 23 januari 2008 @ 21:38:18 #214
85514 ralfie
!Yvan eht nioj
pi_56261396
quote:
Op woensdag 23 januari 2008 19:11 schreef Geqxon het volgende:
Kan het kloppen dat deze combi niet gaat lukken?
[ code verwijderd ]

Misschien omdat $output zowel de returnwaarde gaat bevatten maar ook een inputwaarde van de array_merge functie is?
zou wel moeten werken...
pi_56262772
Ik heb een tabel, met daarin 3 rijen. In een van die rijen staat een text met een link. Hoe kan ik eenvoudig die hele tabel uitlezen naar een list/menu item voor een form?
tabel met 50 entries, omdit handmatig te doen is irritant.
pi_56262959
quote:
Op woensdag 23 januari 2008 19:11 schreef Geqxon het volgende:
Kan het kloppen dat deze combi niet gaat lukken?
[ code verwijderd ]

Misschien omdat $output zowel de returnwaarde gaat bevatten maar ook een inputwaarde van de array_merge functie is?
Dat zou niet moeten uitmaken, check je functie nog maar eens na.
  woensdag 23 januari 2008 @ 22:42:54 #217
12880 CraZaay
prettig gestoord
pi_56263167
quote:
Op woensdag 23 januari 2008 19:11 schreef Geqxon het volgende:

Misschien omdat $output zowel de returnwaarde gaat bevatten maar ook een inputwaarde van de array_merge functie is?
Dat moet niet uitmaken (spuit 11, ik weet het). Even debuggen dus om te checken of $output en het resultaat van je functie beide een array bevatten zou ik zeggen De PHP error message wil ook wel helpen denk ik
pi_56264830
Ik haal een datum op uit mijn database:

1DATE_FORMAT(startdate, '%e/%m/%Y') AS startdate


Deze wil ik printen daarom request ik hem:

1$startdate = $request["startdate"];


Maar nu wil ik niet de gehele datum printen, maar alleen de dag. Natuurlijk had ik dan dat kunnen aangeven in het eerste stukje code, dat ik alleen de dag binnen krijg. Maar dan komt dit stukje code om de hoek kijken:

1ORDER BY startdate ASC, enddate ASC, subscribedate ASC


Hoe los ik dit netjes op?
Aan dit bericht kunnen geen rechten worden ontleend.
pi_56265163
Als je wil sorteren op datuim dan is het natuurlijk niet slim om hem te formatteren als dd/mm/yyyy. Je maakt er door je "AS startdate" een stringvergelijking van. Besef je je dan wel dat "10/12/2008" minder, dus *eerder* is dan "31/01/1978" ? YYYY-MM-DD is een betere volgorde, dat is ook de standaard DATE volgorde in mysql.

Hoe je het op kan lossen: in de sql gewoon als een mysql date of timestamp opvragen, dit in je code omzetten in een datumobject, of zelf de string opsplitsen op dag/maand/datum, en dan kun je het daarna formatteren zoals je wil.
  woensdag 23 januari 2008 @ 23:56:48 #220
12880 CraZaay
prettig gestoord
pi_56265317
1DATE_FORMAT(startdate, '%e') AS startday ORDER BY startdate ASC, enddate ASC, subscribedate ASC


En dan $request['startday']
pi_56273119
Voortborduren op mijn vorige post, wil ik nu graag de opgevraagde data tonen; groeperend op jaar en daarin per maand. Ik heb al een aantal dingen geprobeerd. Zo lukt het me wel om op maand te groeperen op de volgende manier tot en met de 12de maand:

1
2
if(startmonth == 01){...}
elseif(startmonth == 02){...}


Dit zijn er "maar" twaalf, dus zou het wel eventueel zo kunnen. Maar met het jaar lukt het me niet, in de zin dat ik wil dat de code zodanig wordt, dat elk jaar "zelf" wordt gegenereerd:

1
2
3
4
$start_jaar = 2008;
$volgend_jaar = ???;
if($opgehaalde_startjaar == $start_jaar){..}
elseif($opgehaalde_startjaar == $volgend_jaar){...}


Hebben jullie misschien een slimme en logische oplossing? Het volgende moet eigenlijk gebeuren:

Datums -> Automatisch gesorteerd, gegroepeerd en getoond op jaar -> Automatisch gesorteerd, gegroepeerd en getoond op maand.

@ Farenji & CraZaay: Bedankt, ik heb het opgelost zoals Farenji aangaf en de benodigde delen eruit gehaald met:

1$startday = date("d", strtotime($startdate));


-xxx-
Aan dit bericht kunnen geen rechten worden ontleend.
  donderdag 24 januari 2008 @ 12:58:58 #222
12880 CraZaay
prettig gestoord
pi_56273411
quote:
Op donderdag 24 januari 2008 12:45 schreef poepeneesje het volgende:

Hebben jullie misschien een slimme en logische oplossing? Het volgende moet eigenlijk gebeuren:

Datums -> Automatisch gesorteerd, gegroepeerd en getoond op jaar -> Automatisch gesorteerd, gegroepeerd en getoond op maand.
Sorteren in de query op datum en vervolgens in het loopje kijken wanneer een nieuw jaar begint?

1
2
3
4
5
if ($year != $current_year)
{
    echo('nieuw jaar');
    $current_year = $year;
}


Dan heb je geen tig if's nodig iig.
quote:
@ Farenji & CraZaay: Bedankt, ik heb het opgelost zoals Farenji aangaf en de benodigde delen eruit gehaald met:
Waarom nou de PHP date functions aanroepen om van de datum een timestamp te maken, en daar weer een dag van te maken? Waarom niet meteen in de query
pi_56273862
quote:
Op donderdag 24 januari 2008 12:58 schreef CraZaay het volgende:

[..]

Sorteren in de query op datum en vervolgens in het loopje kijken wanneer een nieuw jaar begint?
[ code verwijderd ]

Dan heb je geen tig if's nodig iig.
Bedankt, deze had ik ook al bedacht .
quote:
[..]

Waarom nou de PHP date functions aanroepen om van de datum een timestamp te maken, en daar weer een dag van te maken? Waarom niet meteen in de query
Omdat ik geen andere manier wist waarmee ik de juiste gegevens kon verkrijgen...

Dit is mijn code, klik. Het volgende wil ik eigelijk bereiken, volgens mij is het hier voor een beetje omslachtig omschreven :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
2007
- januari
- februari
- ...

2008
- januari
- februari
- ...

2009
- januari
- februari
- ...


Op bovenstaande manier zou ik graag mijn agenda willen tonen, de moeilijkheid zit hem -bij mij dan- in het feit dat ze op de goede volgorde gegroepeerd (op jaar en maand) en apart van elkaar worden getoond .
Aan dit bericht kunnen geen rechten worden ontleend.
  donderdag 24 januari 2008 @ 13:31:58 #224
12880 CraZaay
prettig gestoord
pi_56274081
Ik zou persoonlijk al die strtotime() de deur uit doen en dit in de query oplossen (zie mijn eerdere post hierover). Zo niet, gebruik dan iig niet 3 keer dezelfde "strtotime($startdate)"

Ik snap niet zo goed waarom je "$id = $request["id"];" etc etc doet. Waarom gebruik je niet gewoon die $request['id'] direct als je er verder niets mee doet?
  donderdag 24 januari 2008 @ 15:40:13 #225
67938 MuRKie
..warm as butters..
pi_56276986
kan iemand mij helpen met de volgende mod_rewrite regels?
De regels zijn voor de frontend van mijn cms, maar deze moeten niet werken wanneer in in de map cbs wil voor de backend..
Nu ziet hij cbs als de eerste get variabele ipv een echte map..

1
2
3
4
5
6
RewriteEngine On

RewriteRule ^!(.*)/(.*)/(.*)/$ index.php?component=$1&type=$2&id=$3 [L]
RewriteRule ^!(.*)/(.*)/(.*)$ index.php?component=$1&type=$2&id=$3 [L]
RewriteRule ^!(.*)/(.*)/$ index.php?component=$1&type=$2 [L]
RewriteRule ^!(.*)/(.*)$ index.php?component=$1&type=$2 [L]


ik had het zelf al geprobeerd op deze manier:
1
2
3
4
5
6
RewriteEngine On

RewriteRule ^!(cbs)/(.*)/(.*)/$ index.php?component=$1&type=$2&id=$3 [L]
RewriteRule ^!(cbs)/(.*)/(.*)$ index.php?component=$1&type=$2&id=$3 [L]
RewriteRule ^!(cbs)/(.*)/$ index.php?component=$1&type=$2 [L]
RewriteRule ^!(cbs)/(.*)$ index.php?component=$1&type=$2 [L]
  donderdag 24 januari 2008 @ 16:36:48 #226
12880 CraZaay
prettig gestoord
pi_56278089
Geen idee, maar die eerste 4 regels kunnen prima op 1 regel, moet je alleen even in PHP checken of sommige variabelen leeg zijn
  donderdag 24 januari 2008 @ 17:15:39 #227
67938 MuRKie
..warm as butters..
pi_56278947
quote:
Op donderdag 24 januari 2008 16:36 schreef CraZaay het volgende:
Geen idee, maar die eerste 4 regels kunnen prima op 1 regel, moet je alleen even in PHP checken of sommige variabelen leeg zijn
Hoe bedoel je dat?
  donderdag 24 januari 2008 @ 17:19:25 #228
12880 CraZaay
prettig gestoord
pi_56279031
RewriteRule ^!(.*)?/?(.*)?/?(.*)?/?$ index.php?component=$1&type=$2&id=$3 [L]

Misschien niet helemaal correcte syntax, maar zo kan het op 1 regel. Afhankelijk van het aantal componenten zijn 1 of meer variabelen (component, type en/of id) dan leeg.
  donderdag 24 januari 2008 @ 17:31:13 #229
67938 MuRKie
..warm as butters..
pi_56279255
Ik ben nog al vers met PHP hoor maar ik zit met een probleem waar ik niet uitkom..
Ik ben bezig met een formulier waarin ik ook foutmeldingen wil verwerken als er iets niet goed gaat.
Ik wil dat die foutmelding in het formulier zelf wordt weergegeven met de data die de gebruiker voor het versturen had ingevuld. Ik krijg dit niet mooi voor elkaar.. Ik heb het formulier in zijn geheel in functies geschreven.

Ik heb er nu een beetje een zooi van gemaakt om tot een oplossing te komen wat dus nog steeds niet gelukt is.


Heeft iemand een voorbeeld script voor me hoe ik mooi een formulier kan opbouwen met een invoer validatie en foutafhandeling?
Ik kom er echt niet meer uit vandaag...
pi_56280019
Voor school (PHP vak) moet ik een webapplicatie maken waar mensen zich op kunnen registreren, vervolgens een adresboek moeten kunnen maken en bijhouden/wijzigen, en in de applicatie zelf een nieuwsbrief moeten kunnen opstellen die verzonden kan worden naar iedereen uit het adresboek.

Nu heb ik het registratiegedeelte bijna af, het adresboek zo goed als af, maar nu nog het nieuwsbrief gedeelte. (Vanavond moeten het adresboek+nieuwsbrief gedeelte worden ingeleverd!)

Ik heb het volgende script meegekregen van m'n leraar, die ik (denk ik..) moet gebruiken:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
    
    $IsPostback   = false;
    $onderwerp    = "";
    $bericht      = "";
    $success      = false;
    
    if(isset($_POST['Submit']))
    {
        $IsPostback     = true;
        $adressenlijst     = "persoon1@adres1.nl, persoon2@adres2.nl"; // vul deze met adressen uit de database!

        $onderwerp         = $_POST['onderwerp'];
        $bericht           = $_POST['bericht'];
        
        // werkt alleen met anonymous smtp, HRO: alleen als je op school netwerk zit!, zie anders evt PEAR::Mail
            $success = @mail($adressenlijst, $onderwerp, $bericht, "From: mailinglist@adres.nl");        
        // let op dat sommige SMTP servers geen niet bestaande adressen toestaan als afzender
    }
    
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>mail versturen</title>
</head>

<body>

 <?php if($IsPostback)
 {
    if ($success) echo '<p class="success">mail succesvol verstuurd. </p>';
    else echo '<p class="error">Er is een fout opgetreden bij het versturen van de mail</p>';
 }
 else 
 {
 ?>
<h2>Mail:</h2>
    <form action="simple_mail.php" Method="Post">
        <label>Onderwerp:</label><input type="text" name="onderwerp"  /> <br />
        <label>Bericht:</label><textarea name="bericht" > </textarea> <br />
        <input type="Submit" name="Submit" value="Versturen" />
    </form>

 <?php 
 }
 ?>
</body>
</html>



Kan iemand mij dit scriptje uitleggen, en vooral de volgende dingen:

Dit stukje commentaar:
1// werkt alleen met anonymous smtp, HRO: alleen als je op school netwerk zit!, zie anders evt PEAR::Mail

Wat bedoelt de desbetreffende leraar hiermee? Ik heb een beetje lopen zoeken naar anonymous smtp maar ik kan niks interessants of bruikbaars vinden. (Zit op de Hogeschool Rotterdam, maar daar heb ik niks aan als ik thuis zit)

1$adressenlijst     = "persoon1@adres1.nl, persoon2@adres2.nl"; // vul deze met adressen uit de database!


Ik heb een database van het adresboek (voor elke geregistreerde gebruiker een eigen tabel met daarin de fields Naam en Email)
Hoe roep ik die correct op zodat ze daar naar verzonden worden?
Een vriend van mij typte het volgende:
1
2
3
4
5
6
   mysql_connect("localhost","root","speelgoed");
$resultaat = mysql_query("SELECT email FROM gebruikers002");
while($rij = mysql_fetch_array($resultaat)){
$array[] = $rij['email'].',';
}
$adressenlijst = implode(",",$array);

Klopt dat?

Wat ik tot nu toe heb begrepen is dat ik smtp erbij nodig heb. Hoe ga ik dat doen? Waar haal ik zo'n server vandaan (dus niet die schoolserver) en is dit te testen op localhost?
  donderdag 24 januari 2008 @ 18:36:04 #231
67938 MuRKie
..warm as butters..
pi_56280494
quote:
Op donderdag 24 januari 2008 17:19 schreef CraZaay het volgende:
RewriteRule ^!(.*)?/?(.*)?/?(.*)?/?$ index.php?component=$1&type=$2&id=$3 [L]

Misschien niet helemaal correcte syntax, maar zo kan het op 1 regel. Afhankelijk van het aantal componenten zijn 1 of meer variabelen (component, type en/of id) dan leeg.
Moet die uitroepteken dan na de ^ daar staan? Want dat is toch NOT?
  donderdag 24 januari 2008 @ 18:48:37 #232
12880 CraZaay
prettig gestoord
pi_56280759
quote:
Op donderdag 24 januari 2008 18:36 schreef MuRKie het volgende:

[..]

Moet die uitroepteken dan na de ^ daar staan? Want dat is toch NOT?
Die hoort er niet nee. Ik heb gewoon jouw code gecopy-paste
  donderdag 24 januari 2008 @ 18:50:37 #233
67938 MuRKie
..warm as butters..
pi_56280813
quote:
Op donderdag 24 januari 2008 18:48 schreef CraZaay het volgende:

[..]

Die hoort er niet nee. Ik heb gewoon jouw code gecopy-paste
OK

[edit]Die regel werkt niet. Hij returned dan de bestandsnaam. In dit geval index.php[/edit]

[ Bericht 9% gewijzigd door MuRKie op 24-01-2008 19:06:43 ]
  donderdag 24 januari 2008 @ 18:52:51 #234
67938 MuRKie
..warm as butters..
pi_56280856
ik heb mijn formulier nu alsvolgt gemaakt maar ik heb het idee dat ik dit niet echt efficient doe zo..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<?php
// no direct access
defined('_ALLOW_ACCESS')
    or die(
'Restricted access');


// --- formulier verwerken --- \\
function processForm()
{
    if(
$_POST['title'] != "" && $_POST['itemID'] != "")
    {
        if(
$_POST['ID'] != "" && fetchType() == "edit")
        {
            
$varQuery    "UPDATE menuitem ";
            
$varSubQuery "WHERE ID = '" mysql_real_escape_string(htmlentities($_POST['ID'])) . "'";
        }
        else if(
$_POST['ID'] == "" && fetchType() == "new")
        {
            
$varQuery    "INSERT INTO menuitem";
            
$varSubQuery "";
        }
        else
        {
            
$varComponentResult .= displayComponentResult(retryForm());
            exit;
        }
        
$varQuery .= " SET title = '" mysql_real_escape_string(htmlentities($_POST['title'])) . "'";
        
$varQuery .= ", component = '" mysql_real_escape_string(htmlentities("content")) . "'"//frontend components moeten nog in de database verwerkt worden. Daarna zal deze functie gemaakt kunnen worden!
        
$varQuery .= ", itemID = '" mysql_real_escape_string(htmlentities($_POST['itemID'])) . "'";
        
$varQuery .= ", publish = '" mysql_real_escape_string(htmlentities($_POST['publish'])) . "'";
        
$varQuery .= $varSubQuery;
        
$varRun mysql_query($varQuery)
            or die(
_DATABASE_QUERY_ERROR " " mysql_error());
    
        
redirect(cmsConfig_siteRoot 'cbs/?component=menuitem&type=list');
    }
    else
    {
        
$varComponentResult .= displayComponentResult(retryForm());
        
        return 
$varComponentResult;
    }
}


// --- lijst maken van beschikbare paginas --- \\
function listPages($pageID)
{
    
$varQuery  "SELECT ID, title";
    
$varQuery .= " FROM content";
    
$varRun    mysql_query($varQuery)
            or die(
_DATABASE_QUERY_ERROR " " mysql_error());
    
$intRecords   mysql_affected_rows();
    
$varHtml   "\t\t\t\t" _CMN_PAGES ":<br />\n";
    
$varHtml  .= "\t\t\t\t<select name=\"itemID\" size= \"" $intRecords "\">\n";
    
    while(
$arrResult mysql_fetch_assoc($varRun))
    {
        
$varHtml .= "\t\t\t\t\t<option value=\"" $arrResult['ID'] . "\"";
        if(
$arrResult['ID'] == $pageID)
        {
            
$varHtml .= " selected";
        }
        
$varHtml .= ">";
        
$varHtml .= $arrResult['title'];
        
$varHtml .= "</option>\n";
    }
    
    
$varHtml .= "\t\t\t\t</select><br />\n";
    
    return 
$varHtml;
}


// --- velden voor nieuw formulier aanmaken --- \\
function newForm()
{
    
$arrForm['type']    = "new";
    
$arrForm['ID']      = "";
    
$arrForm['title']   = "";
    
$arrForm['itemID']  = "";
    
$arrForm['page']    = listPages($arrForm['itemID']);
    
$arrForm['publish'] = "";
    
$arrForm['submit']  = _CMN_CREATE;
    
    return 
$arrForm;
}


// --- velden aanmaken voor onvolledig ingevuld formulier --- \\
function retryForm()
{
    
$arrForm['type']    = mysql_real_escape_string(htmlentities($_GET['type']));
    
$arrForm['ID']      = mysql_real_escape_string(htmlentities($_POST['ID']));
    
$arrForm['title']   = mysql_real_escape_string(htmlentities($_POST['title']));
    
$arrForm['itemID']  = mysql_real_escape_string(htmlentities($_POST['itemID']));
    
$arrForm['page']    = listPages($_POST['itemID']);
    
$arrForm['publish'] = mysql_real_escape_string(htmlentities($_POST['publish']));
    
$arrForm['submit']  = mysql_real_escape_string(htmlentities($_POST['submit']));
    
    return 
$arrForm;
}


// --- velden voor wijzigings formulier aanmaken --- \\
function editForm()
{
    
$intID fetchID();
    
$varQuery  "SELECT ID, 
                  title, 
                  itemID, 
                  publish"
;
    
$varQuery .= " FROM menuitem";
    
$varQuery .= " WHERE ID = '" $intID "'";
    
$varRun    mysql_query($varQuery)
        or die(
_DATABASE_QUERY_ERROR " " mysql_error());
    
$arrResult mysql_fetch_assoc($varRun);
    
    
$arrForm['type']    = "edit";
    
$arrForm['ID']      = $arrResult['ID'];
    
$arrForm['title']   = $arrResult['title'];
    
$arrForm['itemID']  = $arrResult['itemID'];
    
$arrForm['page']    = listPages($arrForm['itemID']);
    
$arrForm['publish'] = $arrResult['publish'];
    
$arrForm['submit']  = _CMN_EDIT;
    
    return 
$arrForm;
}


// --- formulier opbouwen --- \\
function displayComponentResult($arrForm)
{
    
$varHtml  "<form action=\"" cmsConfig_siteRoot "cbs/?component=menuitem&type=" $arrForm['type'];
    if(
$arrForm['ID'] != "")
    {
        
$varHtml .= "&id=" $arrForm['ID'];
    }
    
$varHtml .= "\" method=\"post\" name=\"menuitem\">\n";
    
$varHtml .= "\t\t\t\t<input name=\"ID\" type=\"hidden\" value=\"" $arrForm['ID'] . "\" />\n";
    
$varHtml .= "\t\t\t\t" _CMN_TITLE ":<br />\n";
    
$varHtml .= "\t\t\t\t<input name=\"title\" type=\"text\" size=\"25\" maxlength=\"50\" value=\""
    
$varHtml .= $arrForm['title'];
    
$varHtml .= "\" /><br />\n";
    
$varHtml .= $arrForm['page'];
    
$varHtml .= "\t\t\t\t" _CMN_PUBLISH ":<br />\n";
    
$varHtml .= "\t\t\t\t<select name=\"publish\">\n";
    
$varHtml .= "\t\t\t\t\t<option value=\"yes\"";
    if(
$arrForm['publish'] == "yes")
    { 
        
$varHtml .= " selected";
    }
    
$varHtml .= ">" _CMN_YES "</option>\n";
    
$varHtml .= "\t\t\t\t\t<option value=\"no\"";
    if(
$arrForm['publish'] == "no")
    { 
        
$varHtml .= " selected";
    }
    
$varHtml .= ">" _CMN_NO "</option>\n";
    
$varHtml .= "\t\t\t\t</select><br />\n";
    
$varHtml .= "\t\t\t\t<input name=\"submit\" type=\"submit\" value=\"" $arrForm['submit'] . "\" />\n";
    
$varHtml .= "\t\t\t</form>\n";
    
    return 
$varHtml;
}


// --- functie bepalen --- \\
if(isset($_POST['submit']) && $_POST['submit'] == _CMN_CREATE || $_POST['submit'] == _CMN_EDIT)
{
    
$varComponentResult processForm();
}
else if(
fetchType() == "edit" && !fetchID())
{
    
redirect(cmsConfig_siteRoot 'cbs/?component=menuitem&type=list&msg=' _MSG_NO_ID);
}
else if(
fetchType() == "new")
{
    
$varComponentResult displayComponentResult(newForm());    
}
else if(
fetchType() == "edit")
{
    
$varComponentResult displayComponentResult(editForm());
}
?>


kan iemand mij wegwijs maken in een betere methode?

[ Bericht 16% gewijzigd door MuRKie op 24-01-2008 19:52:44 ]
  donderdag 24 januari 2008 @ 23:46:14 #235
67938 MuRKie
..warm as butters..
pi_56289579
Misbruik ik met de volgende toepassing van OOP het OOP principe of "mag" deze methode gewoon?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
class MenuItem
{
    
protected $ID;
    
protected $title;
    
    function
__construct()
    {
        
    }
    
    function
setID($ID)
    {
        
$this->ID = $ID;
    }
    
    function
getID()
    {
        return
$this->ID;
    }
    
    function
setTitle($title)
    {
        
$this->title = $title;
    }
    
    function
getTitle()
    {
        return
$this->title;
    }
    
    
    
    function
Display()
    {
        
$this->setID('7');
        
$this->setTitle('Test met OOP?');
        
$html  = "ID    = " . $this->getID() . "\n";
        
$html .= "Title = " . $this->getTitle() . "\n";
        
        return
$html;
    }

}

$test = new MenuItem;
$varComponentResult = $test->Display();
?>
Dit dient puur als voorbeeld..

Maar is OOP zo ook goed te gebruiken? Dus 1 functie (Display()) die al het nodige binnen een class uitvoerd en het eind resultaat terug geeft? Dus dat je niet van buiten de class variabelen invoert en/of wijzigt? In mijn situatie haalt hij namelijk alle waarden uit een database en komt daar geen handeling van de gebruiker aan te pas..
Dat is namelijk de reden waardoor ik twijfel of ik OOP wel gebruik zoals het hoort..
pi_56290382
Ziet er keurig uit! Wat ik alleen persoonlijk als constructor zou doen:

1
2
3
4
5
6
7
8
<?php
    
function MenuItem($ID$title)
    {
        
$this->setID($ID);
        
$this->setTitle($title);
    }
  
?>


Zodat je bij het aanmaken van het object direct het ID en de Title meegeeft.
pi_56290599
ik zou alleen de constructor schrijven als __constructor in plaats van de naam van de class, dat kan alleen nog maar ivm backwardcompability met PHP4.
pi_56290618
Oeps! Dat is geen PHP4 backwardscompatibility (Scrabble?), maar een Java trekje.
pi_56292376
quote:
Op vrijdag 25 januari 2008 00:40 schreef Geqxon het volgende:
Oeps! Dat is geen PHP4 backwardscompatibility (Scrabble?), maar een Java trekje.
Hehe, ik haal die 2 ook wel eens door elkaar ja

Java
pi_56292504
En overigens, het is __construct. (zonder de 'or') op het einde.

In Java moet ik me nog een keer echt gaan verdiepen. Heb hier wel een boek liggen, maar daar staat weinig nuttigs in.
pi_56292733
quote:
Op vrijdag 25 januari 2008 00:27 schreef Geqxon het volgende:
Ziet er keurig uit! Wat ik alleen persoonlijk als constructor zou doen:
Zodat je bij het aanmaken van het object direct het ID en de Title meegeeft.
Dat dus.
Het nut van (de mogelijkheid tot) het zetten van een ID ontgaat me ook een beetje, aangezien je deze nu op een vaste waarde zet ín je class. Het is natuurlijk juist de bedoeling dat je dat vanuit je script doet lijkt me?
pi_56292932
Ik zie trouwens niet in waarom je $Id en $Title niet public maakt. Die Get en Set methods zijn overbodig omdat je toch geen controle of iets uitvoert.
pi_56293111
quote:
Op vrijdag 25 januari 2008 09:15 schreef super-muffin het volgende:
Ik zie trouwens niet in waarom je $Id en $Title niet public maakt. Die Get en Set methods zijn overbodig omdat je toch geen controle of iets uitvoert.
Wat nou als de interne werking van het instellen van de titel opeens anders wordt? Stel je voor dat het instellen van de titel naar een database weggeschreven moet worden. Dan mag je dus overal je source-code aan gaan zitten te passen, in plaats van dat je enkel de setTitle method aan hoeft te passen.
  vrijdag 25 januari 2008 @ 10:22:08 #244
67938 MuRKie
..warm as butters..
pi_56294043
quote:
Op vrijdag 25 januari 2008 08:59 schreef Xcalibur het volgende:

[..]

Dat dus.
Het nut van (de mogelijkheid tot) het zetten van een ID ontgaat me ook een beetje, aangezien je deze nu op een vaste waarde zet ín je class. Het is natuurlijk juist de bedoeling dat je dat vanuit je script doet lijkt me?
Ja klopt, maar was ook puur ter illustratie van wat ik bedoelde..
  vrijdag 25 januari 2008 @ 10:23:50 #245
67938 MuRKie
..warm as butters..
pi_56294097
quote:
Op vrijdag 25 januari 2008 09:15 schreef super-muffin het volgende:
Ik zie trouwens niet in waarom je $Id en $Title niet public maakt. Die Get en Set methods zijn overbodig omdat je toch geen controle of iets uitvoert.
Controle komt er nog (als je bedoelt qua gebruikers invoer) en die set en get functies daarover had ik ooit gelezen dat het beter was om de variabelen te setten via een functie en niet direct?

[ Bericht 5% gewijzigd door MuRKie op 25-01-2008 11:06:00 ]
  vrijdag 25 januari 2008 @ 11:58:04 #246
67938 MuRKie
..warm as butters..
pi_56296309
quote:
Op vrijdag 25 januari 2008 00:27 schreef Geqxon het volgende:
Ziet er keurig uit! Wat ik alleen persoonlijk als constructor zou doen:
[ code verwijderd ]

Zodat je bij het aanmaken van het object direct het ID en de Title meegeeft.
In de uiteindelijke situatie worden de ID en title uit een database gehaald.. Dit wilde ik dan binnen de class regelen. Of is dat raar? En wanneer de gegevens niet uit een database worden gehaald, dan worden ze ingevoerd via een formulier, welke ik ook in de class wilde verwerken.. vandaar dat ik de constructor leeg had gelaten..
pi_56297803
quote:
Op vrijdag 25 januari 2008 10:23 schreef MuRKie het volgende:

[..]

Controle komt er nog (als je bedoelt qua gebruikers invoer) en die set en get functies daarover had ik ooit gelezen dat het beter was om de variabelen te setten via een functie en niet direct?
Je hebt gelijk, je kan ze best direct getten/setten zonder aparte functies, maar een voordeel van getters en setters gebruiken is dat je dan ook nog andere dingen kan doen - zoals bijv een property "isModified" oid op true zetten als je een veld aanpast. Dat kun je dan weer op andere plekken gebruiken, zoals in een save functie: als er niks gewijzigd is hoef je ook niet op te slaan. Verder is het ook makkeliijk mocht je ooit nog besluiten om de structuur van je object (ingrijpend) aan te passen; met getters en setters hoef je dan alleen die functies aan te passen; als je overal objectvariabelen direct benadert moet je het overal in je code gaan aanpassen.
pi_56297867
quote:
Op vrijdag 25 januari 2008 11:58 schreef MuRKie het volgende:

[..]

In de uiteindelijke situatie worden de ID en title uit een database gehaald.. Dit wilde ik dan binnen de class regelen. Of is dat raar?
Ja, eigenlijk wel. Lijkt me dat je op basis van het ID het record in de database opzoekt. Dus die kan beter wel gezet worden in de constructor.
  vrijdag 25 januari 2008 @ 13:38:21 #249
67938 MuRKie
..warm as butters..
pi_56298590
quote:
Op vrijdag 25 januari 2008 13:03 schreef Farenji het volgende:

[..]

Ja, eigenlijk wel. Lijkt me dat je op basis van het ID het record in de database opzoekt. Dus die kan beter wel gezet worden in de constructor.
Ja dat is waar, dom van me..
De ID wordt natuurlijk niet uit de DB gehaald want aan de hand van de ID haal je het record juist op..
ID kan dus wel in de __construct want die wordt via de $_GET variabele bepaald..
pi_56328026
Is het mogelijk om bij het includen van bestand (include_once etc..) een $_GET parameter mee te geven?
Edit: laat maar, nee dus

[ Bericht 18% gewijzigd door kamustra op 26-01-2008 21:51:28 ]
pi_56331250
quote:
Op zaterdag 26 januari 2008 21:38 schreef kamustra het volgende:
Is het mogelijk om bij het includen van bestand (include_once etc..) een $_GET parameter mee te geven?
Edit: laat maar, nee dus
Afhankelijk van je php instellingen mag je ook een url gebruiken als include. Daar zou je denk ik wel een get parameter aan mee kunnen geven. Maar las het kan dan is het zeker geen manier die ik zou aanraden.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  zondag 27 januari 2008 @ 00:31:03 #252
85514 ralfie
!Yvan eht nioj
pi_56331821
include het bestand in een functie waarin je de get variabele set:

1
2
3
4
5
6
7
<?php
function includeX($file$_GET) {
      include(
$file);
}

includeX("test/somescript.php", array('id'=> 2'page' => 'test' )) ;
?>
oid

edit: moet je die supervariabelen natuurlijk wel eerst unsetten, anders heeft dit nog geen nut.

[ Bericht 7% gewijzigd door ralfie op 27-01-2008 00:36:16 ]
pi_56334272
quote:
Op zaterdag 26 januari 2008 21:38 schreef kamustra het volgende:
Is het mogelijk om bij het includen van bestand (include_once etc..) een $_GET parameter mee te geven?
Edit: laat maar, nee dus
Leg eens uit waarom je dat zou willen?
pi_56335407
quote:
Op zondag 27 januari 2008 04:37 schreef Farenji het volgende:

[..]

Leg eens uit waarom je dat zou willen?
Om pagina's te includen? index.php?page=bestel&product=stoel ?
  zondag 27 januari 2008 @ 10:37:39 #255
85514 ralfie
!Yvan eht nioj
pi_56335463
quote:
Op zondag 27 januari 2008 10:32 schreef Flaccid het volgende:

[..]

Om pagina's te includen? index.php?page=bestel&product=stoel ?
get en post etc variabelen worden toch al doorgegeven aan de geincludeerde scripts?
pi_56339307
quote:
Op zondag 27 januari 2008 10:32 schreef Flaccid het volgende:

[..]

Om pagina's te includen? index.php?page=bestel&product=stoel ?
De scope van variabelen loopt gewoon door, ook in geinclude bestanden. Bijv:

foo.php:
1
2
3
4
5
<?php
var $poep "vies";

include(
"bar.php");
?>


bar.php:
1
2
3
<?php
print $poep;
?>


Dit geeft als output gewoon "vies".
Zelfde werkt het voor $_GET en $_POST variabelen.
pi_56341346
quote:
Op zondag 27 januari 2008 13:58 schreef Farenji het volgende:
De scope van variabelen loopt gewoon door, ook in geinclude bestanden. Bijv:
Behalve als je een bestand include via een url (Wat af te raden is)
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  zondag 27 januari 2008 @ 16:39:15 #258
67938 MuRKie
..warm as butters..
pi_56342844
ik ben bezig met een website voor de 50ste verjaardag van mijn schoonmoeder. Ik include daarin een pagina waarin ik een class declareer maar ik krijg de melding
1Fatal error: Cannot redeclare class GuestBook in C:\xampp\htdocs\maria\includes\guestbook.php on line 10
(hieronder dan regel 7 maar in Dreamweaver staat hij gewoon op 10)
Dat houdt toch in dat hij al eerder gedeclareerd zou moeten zijn want dat is namelijk niet het geval..

Hier de code hoe ik het bestand include:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// --- Pagina retourneren --- \\
function displayPage()
{
    switch (
fetchPage())
    {
        case 
fetchPage():
            require(
'includes/' fetchPage() . '.php');
            break;
        default:
            require(
'includes/content.php');
    }
    
    return 
$result;        
}
?>


en hier de code met de class:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
// no direct access
defined('_ALLOW_ACCESS')
    or die(
'Restricted access');


class 
GuestBook
{
    
protected $ID;
    
protected $message;
    
protected $name;
    
    
protected $fullItem = array();
    
    function 
__construct()
    {
        
    }
    
    function 
fetchMessages()
    {
        
$query  "SELECT ID, message, name ";
        
$query .= "FROM guestbook";
        
$run    mysql_query($query)
            or die(
'Bericht is niet opgehaald');
        while(
$result mysql_fetch_assoc($run))
        {
            
$this->storeMessage($result['ID'], $result['message'], $result['name']);
        }
    }
    
    function 
storeMessage($ID$message$name)
    {
        
$html "<div>#" $ID " - geschreven door: " $name;
        
$html .= "<br />";
        
$html .= $message;
        
$html .= "<br />";
        
$html .= "<br />";
        
        
$this->fullItem[] = $html;
    }
    
    function 
displayGuestBook()
    {
        
$html "";
        foreach(
$this->fullItem as $item)
        {
            
$html .= $item;
        }
        return 
$html;
    }
}

$guestBook = new GuestBook;
$guestBook->fetchMessages();
$result $guestBook->displayGuestBook();
?>


Iemand enig idee hoe dit komen kan?
pi_56343472
Door mijn HTML-output van tabs en newlines te strippen kan ik mijn sourcode van 9,69 naar 8,21 kilobyte verkleinen. Maar hoe zwaar is het voor mijn server als ik via str_replace alle tabs en newlines strip? Ik neem aan dat hij in een for-lus alle chars af gaat, op zoek naar een \t, en deze vervangt voor een blanke char?
  zondag 27 januari 2008 @ 17:15:24 #260
39436 Dreammaster
Dat zei je moeder vannacht ook
pi_56343528
de class wordt waarschijnlijk in de functie fetchPage() gedeclareerd. deze functie roep je al aan bij de switch en dan bij case weer... ik snap trouwens ook niet waarom je een switch statement gebruikt is de onderstaande code niet veel simpeler? Je switch statement zal trouwens ook nooit de content.php requiren.

1
2
3
4
5
6
7
8
<?php
$page 
fetchPage():
if (!empty(
$page)) {
    require(
'includes/' $page '.php');
} else {
    require(
'includes/content.php');
}
?>
  zondag 27 januari 2008 @ 17:19:24 #261
67938 MuRKie
..warm as butters..
pi_56343604
quote:
Op zondag 27 januari 2008 17:15 schreef Dreammaster het volgende:
de class wordt waarschijnlijk in de functie fetchPage() gedeclareerd. deze functie roep je al aan bij de switch en dan bij case weer... ik snap trouwens ook niet waarom je een switch statement gebruikt is de onderstaande code niet veel simpeler? Je switch statement zal trouwens ook nooit de content.php requiren.
[ code verwijderd ]
Ja had ik net ook naar gekeken maar dat haalt opzich niet veel uit.. FetchPage() geeft altijd wat terug.. als $_GET['page'] niet gedeclareerd is geeft hij "content" terug als page..
Dus het resultaat blijft hetzelfde.. Maar scheelt idd wel paar regels.. Dan kan ik het ook nog alsvolgt doen:
1
2
3
<?php
require('includes/' fetchPage() . '.php';
?>

volgens mij das nog veel korter ook

Enne zelfde methode gebruik ik ook in een CMS waar ik mee bezig ben en daar werkt het wel gewoon prima..
  zondag 27 januari 2008 @ 17:22:46 #262
39436 Dreammaster
Dat zei je moeder vannacht ook
pi_56343667
als de functie altijd iets returned dan kan dat inderdaad... maar is je fatal-error hiermee opgelost?
  zondag 27 januari 2008 @ 17:31:01 #263
67938 MuRKie
..warm as butters..
pi_56343823
quote:
Op zondag 27 januari 2008 17:22 schreef Dreammaster het volgende:
als de functie altijd iets returned dan kan dat inderdaad... maar is je fatal-error hiermee opgelost?
Nee maar heb inmiddels al wel gevonden wat dat was..
Er stond in de index.php nog het volgende:
1
2
3
<?php
$page
= displayPage();
?>

terwijl ik die al niet meer gebruikte.. Dus daar werd hij al eerder aangeroepen dan dat eigenlijk moest..
Heb dus beide nu aangepast..

Ik ben nu alsvolgt bezig met het gastenboek. Ik wilde alleen van jullie weten of dit correct OOP gebruik is, aangezien ik nog 0 ervaring met OOP heb.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
<?php
// no direct access
defined('_ALLOW_ACCESS')
    or die(
'Restricted access');


class
GuestBook
{
    
protected $ID;
    
protected $name;
    
protected $message;
    
protected $theDate;
    
protected $error;
    
    
protected $fullItem = array();
    
    
    
    function
__construct()
    {
        
$this->setError(false);
    }
    
    function
setID($ID)
    {
        
$this->ID = mysql_real_escape_string(htmlentities($ID));
    }
    
    function
fetchID()
    {
        return
$this->ID;
    }
    
    function
setName($name, $error)
    {
        
$this->name['value'] = mysql_real_escape_string(htmlentities($name));
        
$this->name['error'] = $error;
    }
    
    function
fetchName()
    {
        return
$this->name['value'];
    }
    
    function
fetchNameError()
    {
        return
$this->name['error'];
    }
    
    function
setMessage($message, $error)
    {
        
$this->message['value'] = mysql_real_escape_string(htmlentities($message));
        
$this->message['error'] = $error;
    }
    
    function
fetchMessage()
    {
        return
$this->message['value'];
    }
    
    function
fetchMessageError()
    {
        return
$this->message['error'];
    }
    
    function
setDate($theDate)
    {
        
$this->theDate = $theDate;
    }
    
    function
fetchDate()
    {
        return
$this->theDate;
    }
    
    function
setError($error)
    {
        
$this->error = $error;
    }
    
    function
fetchError()
    {
        return
$this->error;
    }
    
    function
listMessages()
    {
        
$query  = "SELECT ID, message, name, date ";
        
$query .= "FROM guestbook ";
        
$query .= "ORDER BY `ID` ASC ";
        
//$query .= "LIMIT 0 , 30";
        
$run    = mysql_query($query)
            or die(
'Berichten zijn niet opgehaald!<br /><i>' . mysql_error() . '</i>');
        
$numb = 1;
        while(
$result = mysql_fetch_assoc($run))
        {
            
$this->storeMessage($numb, $result['message'], $result['name'], $result['date']);
            
$numb++;
        }
    }
    
    function
storeMessage($ID, $message, $name, $date)
    {
        
$html = "<div>#" . $ID . " - geschreven door: " . $name . " op " . $date;
        
$html .= "<br />";
        
$html .= $message;
        
$html .= "<br />";
        
$html .= "<br />";
        
        
$this->fullItem[] = $html;
    }
    
    function
processForm()
    {
        
$this->setDate(date('l, d F Y - H:i:s'));
        
        if(
$_POST['name'] != "")
        {
            
$this->setName($_POST['name'], '');
        }
        else
        {
            
$this->setName($_POST['name'], 'Vergeten je naam in te vullen!');
            
$this->setError(true);
        }
        
        if(
$_POST['message'] != "")
        {
            
$this->setMessage($_POST['message'], '');
        }
        else
        {
            
$this->setMessage($_POST['message'], 'Vergeten een berichtje in te vullen!');
            
$this->setError(true);
        }
        
        if(
$this->fetchError() == false)
        {
            
$query  = "INSERT INTO guestbook ";
            
$query .= "SET message = '" . $this->fetchMessage() . "', name = '" . $this->fetchName() . "', date = '" . $this->fetchDate() . "'";
            
$run    = mysql_query($query)
                or die(
'Invoeren niet gelukt!<br /><i>' . mysql_error() . '</i>');
            
header('Location: ' . cmsConfig_siteRoot . 'page/guestbook/view');
        }
    }
    
    function
displayWrite()
    {
        
$html .= "<form action=\"" . cmsConfig_siteRoot . "page/guestbook/add\" method=\"post\" name=\"sendMessage\">";
        
$html .= "<table>\n";
        
$html .= "<tr>\n";
        
$html .= "<td>Naam: <input name=\"name\" type=\"text\" size=\"10\" value=\"" . $this->fetchName() . "\" maxlength=\"50\" />" . $this->fetchNameError() . "</td>\n";
        
$html .= "</tr>";
        
$html .= "<tr>";
        
$html .= "<td>Bericht: <textarea name=\"message\" cols=\"20\" rows=\"5\">" . $this->fetchMessage() . "</textarea>" . $this->fetchMessageError() . "</td>";
        
$html .= "</tr>";
        
$html .= "<tr>";
        
$html .= "<td><input name=\"submit\" type=\"submit\" value=\"Versturen!\"></td>";
        
$html .= "</tr>";
        
$html .= "</table>";
        
$html .= "</form>";
        
        return
$html;
    }
    
    function
displayGuestBook()
    {
        
$this->listMessages();
        
$html = "";
        foreach(
$this->fullItem as $item)
        {
            
$html .= $item;
        }
        
$html .= $this->displayWrite();
        return
$html;
    }
}

$guestBook = new GuestBook();

if(
fetchType() == "add")
{
    if(isset(
$_POST['submit']))
    {
        
$guestBook->processForm();
    }
}

$result = $guestBook->displayGuestBook();
?>


[ Bericht 92% gewijzigd door MuRKie op 27-01-2008 18:27:50 ]
pi_56346324
ik code vaag

[ Bericht 90% gewijzigd door Flaccid op 27-01-2008 20:26:33 ]
  zondag 27 januari 2008 @ 21:20:28 #265
67938 MuRKie
..warm as butters..
pi_56348687
quote:
Op zondag 27 januari 2008 19:36 schreef Flaccid het volgende:
ik code vaag
?
pi_56349419
quote:
Op zondag 27 januari 2008 17:31 schreef MuRKie het volgende:

[..]

Nee maar heb inmiddels al wel gevonden wat dat was..
Er stond in de index.php nog het volgende:
[ code verwijderd ]

terwijl ik die al niet meer gebruikte.. Dus daar werd hij al eerder aangeroepen dan dat eigenlijk moest..
Heb dus beide nu aangepast..

Ik ben nu alsvolgt bezig met het gastenboek. Ik wilde alleen van jullie weten of dit correct OOP gebruik is, aangezien ik nog 0 ervaring met OOP heb.
[ code verwijderd ]
Persoonlijk vind ik dingen als dit
1
2
3
4
5
6
7
8
9
10
11
<?php
    
function setDate($theDate)
    {
        
$this->theDate $theDate;
    }
    
    function 
fetchDate()
    {
        return 
$this->theDate;
    }
?>

vrij nutteloos, als je de variabelenaam gewoon een heldere naam geeft dan zijn die get/set methoden echt niet nodig
  zondag 27 januari 2008 @ 22:58:48 #267
67938 MuRKie
..warm as butters..
pi_56351535
quote:
Op zondag 27 januari 2008 21:49 schreef Thomass het volgende:

[..]

Persoonlijk vind ik dingen als dit
[ code verwijderd ]

vrij nutteloos, als je de variabelenaam gewoon een heldere naam geeft dan zijn die get/set methoden echt niet nodig
alleen nutteloze extra regels code..? dat vond ik ook steeds meer.. ik had dit ooit ergens gezien en las dat het zo het beste was. ikzelf ben steeds meer gaan vinden dat het overbodige code is..

maarja ik had gelezen dat het goed zou zijn op deze manier ofzo
pi_56351628
ik vind getters en setters op zich wel netter, maar vooral in de code waarin je ze gebruikt

Het gebruik van HTML in je PHP (en dan nog in een class ook) vind ik ranzig trouwens!
  zondag 27 januari 2008 @ 23:10:19 #269
67938 MuRKie
..warm as butters..
pi_56351825
quote:
Op zondag 27 januari 2008 23:02 schreef Xcalibur het volgende:
ik vind getters en setters op zich wel netter, maar vooral in de code waarin je ze gebruikt

Het gebruik van HTML in je PHP (en dan nog in een class ook) vind ik ranzig trouwens!
hoe bedoel je dat? zoals ik dat heb gedaan, in strings?

hoe doe jij dat normaal dan? ik leer graag nieuwe dingen..
pi_56351915
de PHP in de phpbestanden, de HTML in de template bestanden, strict gescheiden dus
En alle opmaak in CSS bestanden natuurlijk.

Ik gebruik zelf Smarty als template engine, werkt erg prettig vind ik. Er zijn een heleboel alternatieven in omloop, inclusief het nodige zelfbouw wat ik hier voorbij zie komen ...

Het punt van html in je PHP is dat je al je code na kan gaan lopen als je je lay-out wilt veranderen. En eigenlijk wil je dan alleen je CSS aanpassen, want daar is het voor
pi_56351984
trouwens, het gebruik van de strings zoals jij doet is wat mij betreft niks mis mee, hoewel het wel wat efficienter kan:

1
2
3
$html  = "hier de tekst "
      .= "hier de rest " 
      .= "hier nog meer ";


Dan hoef je niet steeds de variabele-naam te herhalen, vind ik wel zo overzichtelijk
Let op de puntkomma die alleen aan het einde staat!
  zondag 27 januari 2008 @ 23:18:35 #272
12880 CraZaay
prettig gestoord
pi_56351996
quote:
Op zondag 27 januari 2008 23:15 schreef Xcalibur het volgende:

Het punt van html in je PHP is dat je al je code na kan gaan lopen als je je lay-out wilt veranderen. En eigenlijk wil je dan alleen je CSS aanpassen, want daar is het voor
Daarmee veeg je je argument om geen HTML in je PHP te stoppen aardig van tefel Als je je lay-out aan wilt passen doe je dat door de CSS aan te passen, en maakt het dus niet uit of je HTML in een template staat of tussen de PHP

Ik ben het overigens met je eens dat je het wél gescheiden zou moeten houden (ik roep maar weer eens "MVC" ).
  zondag 27 januari 2008 @ 23:19:38 #273
12880 CraZaay
prettig gestoord
pi_56352016
quote:
Op zondag 27 januari 2008 23:18 schreef Xcalibur het volgende:
trouwens, het gebruik van de strings zoals jij doet is wat mij betreft niks mis mee, hoewel het wel wat efficienter kan:
[ code verwijderd ]

Dan hoef je niet steeds de variabele-naam te herhalen, vind ik wel zo overzichtelijk
Let op de puntkomma die alleen aan het einde staat!
Werkt dat? De punt (dus niet ".=") is immers genoeg?
pi_56352033
Daar heb je wel een punt

Maar als er HTML in de PHP staat, staat er vaak ook inline CSS in de HTML, en dan wordt het echt een bende....
  zondag 27 januari 2008 @ 23:21:45 #275
67938 MuRKie
..warm as butters..
pi_56352072
quote:
Op zondag 27 januari 2008 23:15 schreef Xcalibur het volgende:
de PHP in de phpbestanden, de HTML in de template bestanden, strict gescheiden dus
En alle opmaak in CSS bestanden natuurlijk.

Ik gebruik zelf Smarty als template engine, werkt erg prettig vind ik. Er zijn een heleboel alternatieven in omloop, inclusief het nodige zelfbouw wat ik hier voorbij zie komen ...

Het punt van html in je PHP is dat je al je code na kan gaan lopen als je je lay-out wilt veranderen. En eigenlijk wil je dan alleen je CSS aanpassen, want daar is het voor
maar je zal toch altijd wat html in je php houden? ik heb nu meer html gebruikt dan ik uiteindelijk nodig heb maar das puur voor tijdens het ontwikkelen.. uiteindelijk bepaal i alle opmaak in een template en een css. maar in de php zal je dan toch altijd nog je menu in een ul moeten stoppen of je tekst in een div? of zie ik dat nu verkeerd?

[edit]
ik kan trouwens niet zien hoeveel posts er geplaatst zijn, ik zit namelijk op mijn pda.. dus kan dan ook geen nieuw vervolg topic openen..
[/edit]
pi_56352077
quote:
Op zondag 27 januari 2008 23:19 schreef CraZaay het volgende:
Werkt dat? De punt (dus niet ".=") is immers genoeg?
oh, ik doe het altijd zo
alleen een punt zou ook wel moeten werken inderdaad, ik vind zelf de = erbij wel prettig, gewoon visueel
pi_56352128
quote:
Op zondag 27 januari 2008 23:21 schreef MuRKie het volgende:
maar in de php zal je dan toch altijd nog je menu in een ul moeten stoppen of je tekst in een div? of zie ik dat nu verkeerd?
Neehoor, dat hoeft niet. Je kunt al je informatie in variabelen / arrays stoppen, en die in de template weer uitlezen. In de template ontkom je natuurlijk niet aan wat if's en loopjes, maar veel spannenders is daar verder niet nodig
pi_56352139
Ik ga naar bed trouwens, morgen weer verder
  zondag 27 januari 2008 @ 23:30:50 #279
67938 MuRKie
..warm as butters..
pi_56352306
ik gebruik geen inline css in de html die ik in de php stop.. alle opmaak regel ik uiteindelijk vanuit de css. misschien ligt het aan de mate van ervaring dat ik html enp hp nog niet 100% gescheiden hou. die tip over die strings is trouwens handig, thx!
  zondag 27 januari 2008 @ 23:31:42 #280
12880 CraZaay
prettig gestoord
pi_56352332
quote:
Op zondag 27 januari 2008 23:21 schreef Xcalibur het volgende:

[..]

oh, ik doe het altijd zo
alleen een punt zou ook wel moeten werken inderdaad, ik vind zelf de = erbij wel prettig, gewoon visueel
Ik wist niet eens dat het valide syntax was op deze manier Dacht altijd dat je ".=" alleen mocht gebruiken met een variabele ervoor.
  zondag 27 januari 2008 @ 23:40:18 #281
67938 MuRKie
..warm as butters..
pi_56352502
quote:
Op zondag 27 januari 2008 23:31 schreef CraZaay het volgende:

[..]

Ik wist niet eens dat het valide syntax was op deze manier Dacht altijd dat je ".=" alleen mocht gebruiken met een variabele ervoor.
ik wist dat inderdaad ook niet, variabelen plak ik normaal ook aan elkaar met . en niet met .= wanneer ik ze op 1 regel plaats, maar wanneer ik het op meerdere regels schrijf dan doe ik het weer met .= en de variabelenaam ervoor.. maar dit gaat weer code schelen
  maandag 28 januari 2008 @ 11:50:49 #282
67938 MuRKie
..warm as butters..
pi_56358848
Ik heb er nu echt een zooitje van gemaakt, maar het werkt iig..
Nu maar op gaan schonen enzo :)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
<?php
// no direct access
defined('_ALLOW_ACCESS')
    or die(
'Restricted access');


class 
GuestBook
{
    var 
$ID;
    var 
$name;
    var 
$message;
    var 
$theDate;
    var 
$error;
    
    var 
$fullItem = array();
    
    var 
$currentPage;
    var 
$limit;
    var 
$totalRows;
    var 
$totalPages;
    var 
$number;
    var 
$first;
    var 
$last;
    
    
    
    function 
__construct()
    {
        
$this->error false;
        
$this->limit 5;
    }
    
    
    
    function 
listMessages()
    {
        if(isset(
$_GET['itemID']))
        {
            
$this->currentPage $_GET['itemID'];
        }
        else
        {
            
$this->currentPage 1;
        }
        
        
$query        "SELECT ID, message, name, date "
                    
"FROM guestbook "
                    
"ORDER BY `ID` DESC";
        
$subQuery    " LIMIT " . (($this->currentPage 1) * $this->limit) . " , " $this->limit "";
        
$fullQuery    $query $subQuery;
        
$run        mysql_query($fullQuery)
            or die(
'Berichten zijn niet opgehaald!<br /><i>' mysql_error() . '</i>');
        
$this->totalRows    mysql_num_rows(mysql_query($query));
        
$this->totalPages    ceil($this->totalRows $this->limit);
        if(
$this->currentPage != 1)
        {
            
$this->number    = (($this->currentPage 1) * $this->limit);
            
$this->number    $this->number+1;
        }
        else
        {
            
$this->number    1;
        }
        
//$this->number = $this->number+1;
        
while($result mysql_fetch_assoc($run))
        {
            
$this->storeMessage($this->number$result['message'], $result['name'], $result['date']);
            
$this->number++;
        }
    }


    
// the actual function 
    
function pageNav($cpage,$totalrows,$totalpages) { 
        
// configuration 
        
$split_begin    "[ ";     $split " ] [ ";     $split_end " ]"// begin-, split- , end-signs
        
$url            cmsConfig_siteRoot "page/guestbook/view"// change, always end $url with a '?' or '&', url will be followed by cpage=<pagenumber> 
    
        // DON'T CHANGE ANYTHING ELSE BELOW THIS LINE!!! 
    
        // previous generator 
        
if($totalpages != 1) { 
            
$prevPage    $cpage 1
            if(
$prevPage 1) { 
                
$prev    "<span ".$n_a.">&laquo;&laquo;</span>".$split."<span ".$n_a.">&laquo; previous</span>".$split
            } else { 
                
$prev    "<a href='".$url."/1' title='begin'>&laquo;&laquo;</a>".$split."<a href='".$url."/".$prevPage."' title='previous page'>&laquo; previous</a>".$split
            } 
        }
        
        
$start    1
    
        
// page numbers generator 
        
$pages    ""// preventing an error notice! 
        
for($i 0$i $totalpages$i++) { 
            if(
$start != $cpage) { 
                
$pages    .= "<a href='".$url."/".$start."'>".$start."</a>"
            } else { 
                
$pages    .= "<b>".$start."</b>"
            } 
            if(
$i < ($totalpages 1)) { 
                
$pages    .= $split
            } else { 
                break; 
            } 
            
$start++; 
        } 
    
        
// next generator 
        
if($totalpages != 1) { 
            
$nextPage    $cpage 1
            if(
$nextPage $totalpages)
            {
                
$next    $split "<span>next &raquo;</span>".$split."<span>&raquo;&raquo;</span>"
            }
            else
            {
                
$next    $split "<a href='" $url "/" $nextPage "' title='next page'>next &raquo;</a>" $split "<a href='" $url "/" $totalpages "' title='end'>&raquo;&raquo;</a>"
            } 
        } 
        
        return 
$split_begin $prev $pages $next $split_end
    }


    
    function 
storeMessage($ID$message$name$date)
    {
        
$html     "<div>#" $ID " - geschreven door: " $name " op " $date
                
"<br />"
                
$message
                
"<br />"
                
"<br />";
        
        
$this->fullItem[] = $html;
    }
    
    function 
processForm()
    {
        
$this->theDate    date('l, d F Y - H:i:s');
        
        if(
$_POST['name'] != "")
        {
            
$this->name['value']    = mysql_real_escape_string(htmlentities($_POST['name']));
            
$this->name['error']    = '';
        }
        else
        {
            
$this->name['value']    = mysql_real_escape_string(htmlentities($_POST['name']));
            
$this->name['error']    = 'Vergeten je naam in te vullen!';
            
$this->error true;
        }
        
        if(
$_POST['message'] != "")
        {
            
$this->message['value']    = mysql_real_escape_string(htmlentities($_POST['message']));
            
$this->message['error']    = '';
        }
        else
        {
            
$this->message['value']    = mysql_real_escape_string(htmlentities($_POST['message']));
            
$this->message['error']    = 'Vergeten een berichtje in te vullen!';
            
$this->error            true;
        }
        
        if(
$this->error == false)
        {
            
$query     "INSERT INTO guestbook "
                    
"SET message = '" $this->message['value'] . "', name = '" $this->name['value'] . "', date = '" $this->theDate "'";
            
$run    mysql_query($query)
                or die(
'Invoeren niet gelukt!<br /><i>' mysql_error() . '</i>');
            
header('Location: ' cmsConfig_siteRoot 'page/guestbook/view/');
        }
    }
    
    function 
displayWrite()
    {
        
$html    "<form action=\"" cmsConfig_siteRoot "page/guestbook/add\" method=\"post\" name=\"sendMessage\">"
                
"<table>\n"
                
"<tr>\n"
                
"<td>Naam: <input name=\"name\" type=\"text\" size=\"10\" value=\""
                
$this->name['value']
                . 
"\" maxlength=\"50\" />"
                
$this->name['error']
                . 
"</td>\n"
                
"</tr>"
                
"<tr>"
                
"<td>Bericht: <textarea name=\"message\" cols=\"20\" rows=\"5\">" $this->message['value'] . "</textarea>" $this->message['error'] . "</td>"
                
"</tr>"
                
"<tr>"
                
"<td><input name=\"submit\" type=\"submit\" value=\"Versturen!\"></td>"
                
"</tr>"
                
"</table>"
                
"</form>";
        
        return 
$html;
    }
    
    function 
displayGuestBook()
    {
        
$this->listMessages();
        
$html "";
        foreach(
$this->fullItem as $item)
        {
            
$html .= $item;
        }
        
$html .= $this->pageNav($this->currentPage$this->totalRows$this->totalPages);
        
$html .= $this->displayWrite();
        return 
$html;
    }
}

$guestBook = new GuestBook();

if(
fetchType() == "add")
{
    if(isset(
$_POST['submit']))
    {
        
$guestBook->processForm();
    }
}

$result $guestBook->displayGuestBook();
?>
pi_56368908
Dit is niet heel erg OOP. Meer losse functies verzamelen in een klasse. Je hebt nu de verwerking en presentatie in de zelfde klasse zitten wat niet hoort imho.
pi_56369023
Ik heb een vraag over mijn database structuur van mijn statistieken script

de database
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
-- phpMyAdmin SQL Dump
-- version 2.6.4-pl1
-- http://www.phpmyadmin.net
-- 
-- Host: localhost
-- Generatie Tijd: 28 Jan 2008 om 19:51
-- Server versie: 5.0.45
-- PHP Versie: 4.2.3
-- 
-- Database: `stat`
-- 

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `stat`
-- 

CREATE TABLE `stat` (
  `id` int(4) NOT NULL auto_increment,
  `name` varchar(32) NOT NULL default '',
  `user_id` int(11) NOT NULL default '0',
  `title` varchar(75) NOT NULL default '',
  `referer` varchar(75) NOT NULL default '',
  `active` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `stat_user`
-- 

CREATE TABLE `stat_user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(32) NOT NULL default '',
  `password` varchar(64) NOT NULL default '',
  `user_level` tinyint(1) NOT NULL default '0',
  `last_login` datetime NOT NULL default '0000-00-00 00:00:00',
  KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `statcounts`
-- 

CREATE TABLE `statcounts` (
  `id` int(4) NOT NULL auto_increment,
  `sid` int(4) NOT NULL default '0',
  `pid` int(4) NOT NULL default '0',
  `year` varchar(4) NOT NULL default '',
  `value` varchar(75) NOT NULL default '',
  `count` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `sid` (`sid`,`pid`,`year`)
) ENGINE=MyISAM AUTO_INCREMENT=28648 DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `statdate`
-- 

CREATE TABLE `statdate` (
  `id` int(4) NOT NULL auto_increment,
  `sid` int(4) NOT NULL default '0',
  `day` char(2) NOT NULL default '',
  `weekday` char(2) NOT NULL default '',
  `week` char(2) NOT NULL default '',
  `month` char(2) NOT NULL default '',
  `year` varchar(4) NOT NULL default '',
  `count` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `sid` (`sid`,`month`,`year`)
) ENGINE=MyISAM AUTO_INCREMENT=634 DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `statip`
-- 

CREATE TABLE `statip` (
  `id` int(4) NOT NULL auto_increment,
  `sid` int(4) NOT NULL default '0',
  `value` varchar(75) NOT NULL default '',
  `lastdate` varchar(10) default NULL,
  `count` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `value` (`value`)
) ENGINE=MyISAM AUTO_INCREMENT=27411 DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `statkeywords`
-- 

CREATE TABLE `statkeywords` (
  `sid` tinyint(4) NOT NULL default '0',
  `search_id` int(11) NOT NULL default '0',
  `year` varchar(4) NOT NULL default '',
  `lastupdate` datetime NOT NULL default '0000-00-00 00:00:00',
  `keyword` varchar(25) NOT NULL default '',
  `count` bigint(20) NOT NULL default '0',
  KEY `sid` (`sid`,`search_id`,`year`,`keyword`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `statlast`
-- 

CREATE TABLE `statlast` (
  `id` bigint(20) NOT NULL auto_increment,
  `sid` tinyint(4) NOT NULL default '0',
  `lasttime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  `ip` varchar(15) NOT NULL default '',
  `host` varchar(255) NOT NULL default '',
  `referer` varchar(255) NOT NULL default '',
  `os` varchar(75) NOT NULL default '',
  `browser` varchar(75) NOT NULL default '',
  `country` varchar(75) NOT NULL default '',
  `color` varchar(75) NOT NULL default '',
  `resolution` varchar(75) NOT NULL default '',
  KEY `id` (`id`,`sid`)
) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `statreferer`
-- 

CREATE TABLE `statreferer` (
  `sid` int(4) NOT NULL default '0',
  `lastvisit` datetime NOT NULL default '0000-00-00 00:00:00',
  `value` varchar(255) NOT NULL default '',
  `count` bigint(20) NOT NULL default '0',
  `type` enum('I','E') NOT NULL default 'I',
  KEY `sid` (`sid`,`value`,`type`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `statsearchengine`
-- 

CREATE TABLE `statsearchengine` (
  `id` int(11) NOT NULL auto_increment,
  `year` varchar(4) NOT NULL default '',
  `title` varchar(64) NOT NULL default '',
  KEY `id` (`id`),
  KEY `year` (`year`,`title`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;


Nu gebruik ik het tabel statcounts voor algemene gegevens zoals dag, maand, jaar, IP, hostname, kleuren, brouwser, javascript, plugins, etc etc etc maar is dit wel een juiste manier? en verder zou ik graag willen weten of de indexes etc goed zijn :) iemand die mij hier info over kan geven? :D
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  maandag 28 januari 2008 @ 19:56:12 #285
67938 MuRKie
..warm as butters..
pi_56369095
quote:
Op maandag 28 januari 2008 19:47 schreef super-muffin het volgende:
Dit is niet heel erg OOP. Meer losse functies verzamelen in een klasse. Je hebt nu de verwerking en presentatie in de zelfde klasse zitten wat niet hoort imho.
Dat gevoel had ik al.. Ik was in ieder geval blij dat het werkte
Heb inmiddels de pagina navigatie in een aparte class gestopt nu en mijn code wat opgeschoont enzo..
Ben al blij dat ik zover ben gekomen, heb al redelijk wat dingen bijgeleerd..
Nu kijken of ik het nog een stap verder kan doen..
Is in dit geval niet heel erg noodzakelijk aangezien het een website wordt voor voor, tijdens en na de 50ste verjaardag van mijn schoonmoeder.. daarna heb ik de site niet meer nodig.. zolang hij het die tijd maar ff uithoudt..

Maar hoe dan ook kan ik met het maken van deze site mooi oefenen..

[ Bericht 0% gewijzigd door MuRKie op 28-01-2008 20:06:05 ]
pi_56369775
Ik zou graag willen leren hoe je flash widgets kunt maken die gebruik maken van informatie die in een MySQL database opgeslagen zijn en waarvan de invoer dmv PHP verwerkt wordt.

Kan iemand mij een goed flash-boek aanbevelen dat zich vooral hierop richt?

[ Bericht 0% gewijzigd door schwa78 op 28-01-2008 20:29:31 ]
pi_56369941
quote:
Op maandag 28 januari 2008 19:52 schreef Chandler het volgende:
Ik heb een vraag over mijn database structuur van mijn statistieken script

-- PHP Versie: 4.2.3
Da's wel een beetje een achterhaalde versie...
  maandag 28 januari 2008 @ 20:30:41 #288
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_56369987
Ik heb een tabel met favorieten van gebruikers
Een favoriet product wordt herkend door middel van de productID.
De query ziet er dus als volgt uit :

1 "SELECT productID AS id FROM shop_favorites WHERE UID = '".$_SESSION['UID']."'";  


in de producten tabel staan dus ook de namen van de producten, maar deze wil ik ASCsorteren.
De tabelnaam is shop_products ...

Hoe doe ik dat met een JOIN ?
pi_56370486
1
2
3
4
5
SELECT shop_favorites.productID as `id`, shop_products.name
FROM `shop_favorites`
INNER JOIN `shop_products` ON `id` = shop_products.productID
WHERE shop_favorites.UID = '.$_SESSION['uid'].'
ORDER BY shop_products.name


aangenomen dat je naam kolom `name` heet en productID in beide tabellen het zelfde heten..

[ Bericht 1% gewijzigd door Arjan321 op 28-01-2008 21:02:17 ]
pi_56370578
1 tip voordat je gaat werken met meerdere tabellen!

- Geef alle namen in een Select indien je met meerdere tabellen gaat werken ook de naam van de tabel (over noemer daar van) mee oftewel shop_favorites.productID

een voorbeeld

1
2
3
4
5
6
7
8
9
10
11
12
SELECT shop_favorites.productID,
 shop_products.id,
 shop_products.name,
 shop_products.group,
 shop_products.title,
 shop_products.short_desc,
 shop_products.etcetcetc,
FROM shop_favorites
LEFT JOIN shop_products ON shop_products.id = shop_favorites.productID
WHERE shop_favorites.userID = '" . $_SESSION['UID'] . "
GROUP BY shop_favorites.userID
ORDER BY shop_favorites.date_created ASC


Het is een voorbeeld waarin ik een tabel JOIN naarna groepeer je bij een ID veld in een van de 2 tabellen en sorteer je de uitkomst middels ook een van de 2 tabellen en daar een veld van

naja ik hoop dat je het snapt ik iig wel maar goed...

succes!.

[ Bericht 14% gewijzigd door Chandler op 28-01-2008 20:58:45 (-edit- extra ASC en slimies aanzetten! =P-) ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  maandag 28 januari 2008 @ 22:03:43 #291
107951 JortK
Immer kwaliteitsposts
pi_56372153
quote:
Op maandag 28 januari 2008 20:57 schreef Chandler het volgende:
1 tip voordat je gaat werken met meerdere tabellen!

- Geef alle namen in een Select indien je met meerdere tabellen gaat werken ook de naam van de tabel (over noemer daar van) mee oftewel shop_favorites.productID ;)

een voorbeeld
[ code verwijderd ]

Het is een voorbeeld waarin ik een tabel JOIN naarna groepeer je bij een ID veld in een van de 2 tabellen en sorteer je de uitkomst middels ook een van de 2 tabellen en daar een veld van :)

naja ik hoop dat je het snapt ;) ik iig wel :P maar goed...

succes!.
Waarom de complete tabel naam?

Aliassen is toch een veel beter idee?

Like:

1
2
3
<?php
SELECT a
.org, b.contact FROM org a, contact b
?>


?
  maandag 28 januari 2008 @ 22:27:29 #292
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_56372838
quote:
Op maandag 28 januari 2008 20:57 schreef Chandler het volgende:
1 tip voordat je gaat werken met meerdere tabellen!

- Geef alle namen in een Select indien je met meerdere tabellen gaat werken ook de naam van de tabel (over noemer daar van) mee oftewel shop_favorites.productID ;)

een voorbeeld
[ code verwijderd ]

Het is een voorbeeld waarin ik een tabel JOIN naarna groepeer je bij een ID veld in een van de 2 tabellen en sorteer je de uitkomst middels ook een van de 2 tabellen en daar een veld van :)

naja ik hoop dat je het snapt ;) ik iig wel :P maar goed...

succes!.
Bedankt! Het is gelukt, het is geworden:

1
2
3
SELECT shop_items.id FROM shop_favorites 
LEFT JOIN shop_items ON shop_items.id = shop_favorites.productID 
WHERE shop_favorites.UID = '" . $_SESSION['UID'] . "' ORDER BY shop_items.name ASC
pi_56373634
tvp
pi_56378787
quote:
Op maandag 28 januari 2008 22:03 schreef JortK het volgende:

[..]

Waarom de complete tabel naam?

Aliassen is toch een veel beter idee?

Like:
[ code verwijderd ]

?
Beter of handiger of duidelijer? tis maar net wat je zelf het makkelijkste vind
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_56380124
quote:
Op maandag 28 januari 2008 22:03 schreef JortK het volgende:
Waarom de complete tabel naam?
Aliassen is toch een veel beter idee?
Dit vind ik altijd hoogst onduidelijk....
  dinsdag 29 januari 2008 @ 11:21:34 #296
39436 Dreammaster
Dat zei je moeder vannacht ook
pi_56381105
quote:
Op maandag 28 januari 2008 22:03 schreef JortK het volgende:

[..]

Waarom de complete tabel naam?

Aliassen is toch een veel beter idee?

Like:
[ code verwijderd ]

?
Door aliassen te maken worden er temporary tables aangemaakt, en wordt het een stuk trager van.
pi_56381872
quote:
Op dinsdag 29 januari 2008 11:21 schreef Dreammaster het volgende:

[..]

Door aliassen te maken worden er temporary tables aangemaakt, en wordt het een stuk trager van.
Dat wist ik ook niet weer wat geleerd, vind zo ie zo dat aliassen vies zijn, het is imho duidelijker om gewoon de gehele tabelnaam te gebruiken, weet je gelijk wat waar voor dient!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  dinsdag 29 januari 2008 @ 12:13:51 #298
39436 Dreammaster
Dat zei je moeder vannacht ook
pi_56382389
quote:
Op dinsdag 29 januari 2008 11:53 schreef Chandler het volgende:

[..]

Dat wist ik ook niet weer wat geleerd, vind zo ie zo dat aliassen vies zijn, het is imho duidelijker om gewoon de gehele tabelnaam te gebruiken, weet je gelijk wat waar voor dient!
Ja aliassen zijn ook smerig. Ik gebruik het alleen als het niet anders kan.
pi_56383008
Mwa.

"SELECT c.Name AS CompanyName, e.Name AS EmployeeName FROM company AS c LEFT JOIN employee AS e WHERE e.CompanyID = c.ID"

Is toch wel duidelijk?
  dinsdag 29 januari 2008 @ 12:48:47 #300
39436 Dreammaster
Dat zei je moeder vannacht ook
pi_56383241
quote:
Op dinsdag 29 januari 2008 12:38 schreef Geqxon het volgende:
Mwa.

"SELECT c.Name AS CompanyName, e.Name AS EmployeeName FROM company AS c LEFT JOIN employee AS e WHERE e.CompanyID = c.ID"

Is toch wel duidelijk?
Voor jou misschien maar ik vind het erg onoverzichtelijk (en tevens trager)
  dinsdag 29 januari 2008 @ 12:51:40 #301
107951 JortK
Immer kwaliteitsposts
pi_56383324
Hoeveel trager dan?

Ik werk op echt grote omgevingen (MSSQL) maar daar merk ik het echt niet

Wat ik wel merk in performance is of je je joins left in de WHERE of in de FROM
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')