De siteroot kan je ook gewoon in je template printen ipv in je links natuurlijkquote: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..
Daar zit wat inquote: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
In de OOP tutorial die ik gisteren ben begonnen doe ik ook alles volgens het MVC model: [Perl] OOP tutorial / case study: DataRow.pmquote:Op woensdag 23 januari 2008 15:36 schreef MuRKie het volgende:
[..]ik wist niet dat dat MVC daar voor stond
OOP is voor mij nog een stapje te ver ben ik bang..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.
Ow op die manierquote:Op woensdag 23 januari 2008 16:29 schreef Geqxon het volgende:
Ik heb mijn post weg-ge-edit. Want hij stond verkeerd.
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.quote:Op woensdag 23 januari 2008 16:18 schreef MuRKie het volgende:
[..]
OOP is voor mij nog een stapje te ver ben ik bang..
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?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.
1 2 3 | $output = array_merge($output, a_function_that_returns_an_array($input)); ?> |
zou wel moeten werken...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.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 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 zeggenquote: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?
1 |
1 |
1 |
1 |
1 2 | elseif(startmonth == 02){...} |
1 2 3 4 | $volgend_jaar = ???; if($opgehaalde_startjaar == $start_jaar){..} elseif($opgehaalde_startjaar == $volgend_jaar){...} |
1 |
Sorteren in de query op datum en vervolgens in het loopje kijken wanneer een nieuw jaar begint?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.
1 2 3 4 5 | { echo('nieuw jaar'); $current_year = $year; } |
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 queryquote:@ Farenji & CraZaay: Bedankt, ik heb het opgelost zoals Farenji aangaf en de benodigde delen eruit gehaald met:
Bedankt, deze had ik ook al bedachtquote: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.
Omdat ik geen andere manier wist waarmee ik de juiste gegevens kon verkrijgen...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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | - januari - februari - ... 2008 - januari - februari - ... 2009 - januari - februari - ... |
1 2 3 4 5 6 | 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] |
1 2 3 4 5 6 | 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] |
Hoe bedoel je dat?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
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 | $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> |
1 |
1 |
1 2 3 4 5 6 | $resultaat = mysql_query("SELECT email FROM gebruikers002"); while($rij = mysql_fetch_array($resultaat)){ $array[] = $rij['email'].','; } $adressenlijst = implode(",",$array); |
Moet die uitroepteken dan na de ^ daar staan? Want dat is toch NOT?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.
Die hoort er niet nee. Ik heb gewoon jouw code gecopy-pastequote:Op donderdag 24 januari 2008 18:36 schreef MuRKie het volgende:
[..]
Moet die uitroepteken dan na de ^ daar staan? Want dat is toch NOT?
OKquote:Op donderdag 24 januari 2008 18:48 schreef CraZaay het volgende:
[..]
Die hoort er niet nee. Ik heb gewoon jouw code gecopy-paste
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 | // 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()); } ?> |
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 | 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(); ?> |
Hehe, ik haal die 2 ook wel eens door elkaar jaquote:Op vrijdag 25 januari 2008 00:40 schreef Geqxon het volgende:
Oeps! Dat is geen PHP4 backwardscompatibility (Scrabble?), maar een Java trekje.
Dat dus.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.
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.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.
Ja klopt, maar was ook puur ter illustratie van wat ik bedoelde..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?
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?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.
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..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.
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.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?
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.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 dat is waar, dom van me..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.
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.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![]()
1 2 3 4 5 6 7 | function includeX($file, $_GET) { include($file); } includeX("test/somescript.php", array('id'=> 2, 'page' => 'test' )) ; ?> |
Leg eens uit waarom je dat zou willen?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![]()
Om pagina's te includen? index.php?page=bestel&product=stoel ?quote:Op zondag 27 januari 2008 04:37 schreef Farenji het volgende:
[..]
Leg eens uit waarom je dat zou willen?
get en post etc variabelen worden toch al doorgegeven aan de geincludeerde scripts?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:quote:Op zondag 27 januari 2008 10:32 schreef Flaccid het volgende:
[..]
Om pagina's te includen? index.php?page=bestel&product=stoel ?
1 2 3 4 5 | var $poep = "vies"; include("bar.php"); ?> |
1 2 3 | print $poep; ?> |
Behalve als je een bestand include via een urlquote:Op zondag 27 januari 2008 13:58 schreef Farenji het volgende:
De scope van variabelen loopt gewoon door, ook in geinclude bestanden. Bijv:
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // --- Pagina retourneren --- \\ function displayPage() { switch (fetchPage()) { case fetchPage(): require('includes/' . fetchPage() . '.php'); break; default: require('includes/content.php'); } return $result; } ?> |
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 | // 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(); ?> |
1 2 3 4 5 6 7 8 | $page = fetchPage(): if (!empty($page)) { require('includes/' . $page . '.php'); } else { require('includes/content.php'); } ?> |
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..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 ]
1 2 3 | require('includes/' . fetchPage() . '.php'; ?> |
Nee maar heb inmiddels al wel gevonden wat dat was..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?
1 2 3 | $page = displayPage(); ?> |
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 | // 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(); ?> |
Persoonlijk vind ik dingen als ditquote: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 ]
1 2 3 4 5 6 7 8 9 10 11 | function setDate($theDate) { $this->theDate = $theDate; } function fetchDate() { return $this->theDate; } ?> |
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..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
hoe bedoel je dat? zoals ik dat heb gedaan, in strings?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!
1 2 3 | .= "hier de rest " .= "hier nog meer "; |
Daarmee veeg je je argument om geen HTML in je PHP te stoppen aardig van tefelquote: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
Werkt dat? De punt (dus niet ".=") is immers genoeg?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!
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?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
oh, ik doe het altijd zoquote:Op zondag 27 januari 2008 23:19 schreef CraZaay het volgende:
Werkt dat? De punt (dus niet ".=") is immers genoeg?
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 nodigquote: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?
Ik wist niet eens dat het valide syntax was op deze manierquote: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 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..quote:Op zondag 27 januari 2008 23:31 schreef CraZaay het volgende:
[..]
Ik wist niet eens dat het valide syntax was op deze manierDacht altijd dat je ".=" alleen mocht gebruiken met een variabele ervoor.
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 | // 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.">««</span>".$split."<span ".$n_a.">« previous</span>".$split; } else { $prev = "<a href='".$url."/1' title='begin'>««</a>".$split."<a href='".$url."/".$prevPage."' title='previous page'>« 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 »</span>".$split."<span>»»</span>"; } else { $next = $split . "<a href='" . $url . "/" . $nextPage . "' title='next page'>next »</a>" . $split . "<a href='" . $url . "/" . $totalpages . "' title='end'>»»</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(); ?> |
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 | -- 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; |
Dat gevoel had ik al.. Ik was in ieder geval blij dat het werktequote: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.
Da's wel een beetje een achterhaalde versie...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
1 |
1 2 3 4 5 | FROM `shop_favorites` INNER JOIN `shop_products` ON `id` = shop_products.productID WHERE shop_favorites.UID = '.$_SESSION['uid'].' ORDER BY shop_products.name |
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
Waarom de complete tabel naam?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!.
1 2 3 | SELECT a.org, b.contact FROM org a, contact b ?> |
Bedankt! Het is gelukt, het is geworden: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!.
1 2 3 | LEFT JOIN shop_items ON shop_items.id = shop_favorites.productID WHERE shop_favorites.UID = '" . $_SESSION['UID'] . "' ORDER BY shop_items.name ASC |
Beter of handiger of duidelijer? tis maar net wat je zelf het makkelijkste vindquote: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 ]
?
Dit vind ik altijd hoogst onduidelijk....quote:Op maandag 28 januari 2008 22:03 schreef JortK het volgende:
Waarom de complete tabel naam?
Aliassen is toch een veel beter idee?
Door aliassen te maken worden er temporary tables aangemaakt, en wordt het een stuk trager van.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 ]
?
Dat wist ik ook nietquote: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.
Ja aliassen zijn ook smerig. Ik gebruik het alleen als het niet anders kan.quote:Op dinsdag 29 januari 2008 11:53 schreef Chandler het volgende:
[..]
Dat wist ik ook nietweer 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!
Voor jou misschienquote: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?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |