mschol | vrijdag 20 juli 2007 @ 17:30 |
 cd niet bijgeleverd
Als je vragen hebt over PHP/MySQL, dan zit je hier goed met een vaste kliek guru's en een groot aantal regelmatige bezoekers. Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten wát er niet lukt en wélke foutmelding je precies krijgt 
Vorige delen: 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
Zie ook: PHP Dataverwerking Officiële PHP website PHP Documentatie MySQL Reference Manual Yet Another PHP Faq PHP Cheat Sheet PHP5 Power Programming - boek met uitleg over OOP, Pear, XML, etc
Tutorials: W3Schools PHP W3Schools SQL
Deze OP en instructies voor nieuw topic: http://wiki.fok.nl/index.php/OP/PHP |
WyriHaximus | vrijdag 20 juli 2007 @ 17:31 |
quote: Nee die is uiteraard zwart .quote: Verkapte ik sluit topic post?  |
mschol | vrijdag 20 juli 2007 @ 17:32 |
quote: als je het zo wilt noemen :p |
Thomass | vrijdag 20 juli 2007 @ 17:35 |
Is het mogelijk een datastructuur die je in php opbouwt te serializen? En dan bedoel ik niet met de serialize() methode, want die bouwt n stringetje en dat inlezen duurt alleen maar langer dan opnieuw opbouwen (en hij crapt hem als ik mijn structuur serialize omdat het te groot is). Het is een vrij complexe structuur van, als ik php mag geloven rond de 2 mb, dus nogmaals mijn vraag: kan ik dit echt 'snel' serializen?  |
qu63 | vrijdag 20 juli 2007 @ 17:37 |
quote: Verkapte tvp  |
WyriHaximus | vrijdag 20 juli 2007 @ 17:42 |
quote: Dat van mij is ergens ook een verkapte tvp .
Iemand hier heel toevallig ervaring met Oracle + Stored Procedures + PHP? Zit nu met een stored procedure in oracle die ik in php moet aanroepen. Daar hoort een result uit te komen maar dan moet ik wel een argument mee geven aan de stored procedure. Alleen heb geen idee hoe. Wat ik ook opgeef krijg altijd maffe errors .quote: Zie hier boven . Moet jij trouwens nodig zeggen .quote:Op vrijdag 20 juli 2007 17:35 schreef Thomass het volgende:Is het mogelijk een datastructuur die je in php opbouwt te serializen? En dan bedoel ik niet met de serialize() methode, want die bouwt n stringetje en dat inlezen duurt alleen maar langer dan opnieuw opbouwen (en hij crapt hem als ik mijn structuur serialize omdat het te groot is). Het is een vrij complexe structuur van, als ik php mag geloven rond de 2 mb, dus nogmaals mijn vraag: kan ik dit echt 'snel' serializen?  Is JSON niet iets dan? |
qu63 | vrijdag 20 juli 2007 @ 17:46 |
quote: Ah! Jij dacht dat dat van mij een vraag was  |
WyriHaximus | vrijdag 20 juli 2007 @ 17:50 |
quote: Stom vraagtekentje in die smilie |
JeRa | vrijdag 20 juli 2007 @ 18:01 |
quote:Op vrijdag 20 juli 2007 17:35 schreef Thomass het volgende:Is het mogelijk een datastructuur die je in php opbouwt te serializen? En dan bedoel ik niet met de serialize() methode, want die bouwt n stringetje en dat inlezen duurt alleen maar langer dan opnieuw opbouwen (en hij crapt hem als ik mijn structuur serialize omdat het te groot is). Het is een vrij complexe structuur van, als ik php mag geloven rond de 2 mb, dus nogmaals mijn vraag: kan ik dit echt 'snel' serializen?  Niet sneller dan via serialize() het geheugen injagen nee JSON zoals hierboven genoemd is een andere optie, maar aangezien dat niet veel anders is dan het outputformaat van serialize() schiet je er niet veel mee op.
Een derde optie is zelf bepalen welke onderdelen van je complexe structuur je gaat opslaan en voor elke class een soort serialize() functie te maken, maar of dat sneller is? Zou je kunnen toelichten waar het over gaat? |
WyriHaximus | vrijdag 20 juli 2007 @ 18:29 |
quote:Op vrijdag 20 juli 2007 18:01 schreef JeRa het volgende:[..] Niet sneller dan via serialize() het geheugen injagen nee  JSON zoals hierboven genoemd is een andere optie, maar aangezien dat niet veel anders is dan het outputformaat van serialize() schiet je er niet veel mee op. JSON zal ook niet 1 van de snelse manieren zijn trouwens.quote:Op vrijdag 20 juli 2007 18:01 schreef JeRa het volgende:Een derde optie is zelf bepalen welke onderdelen van je complexe structuur je gaat opslaan en voor elke class een soort serialize() functie te maken, maar of dat sneller is? Zou je kunnen toelichten waar het over gaat? 4e optie is het misschien in een idee om het in een cache bestand te zetten of in een tabel of desnoods in een phpsessie.
Zoals JeRa ook zegt het klinkt vrij complex en groot, misschien een idee om ff wat grove details te vertellen hoe het in elkaar zit en wat je precies wilt opslaan . |
Thomass | vrijdag 20 juli 2007 @ 18:45 |
quote:Op vrijdag 20 juli 2007 18:01 schreef JeRa het volgende:[..] Niet sneller dan via serialize() het geheugen injagen nee  JSON zoals hierboven genoemd is een andere optie, maar aangezien dat niet veel anders is dan het outputformaat van serialize() schiet je er niet veel mee op. Een derde optie is zelf bepalen welke onderdelen van je complexe structuur je gaat opslaan en voor elke class een soort serialize() functie te maken, maar of dat sneller is? Zou je kunnen toelichten waar het over gaat? Een linked structure van 3241 nodes, in een soort 'vierkante' matrix structuur gelinkt. Een x aantal horizontale circulairly linked lists en die zitten weer aan elkaar geknoopt met verticaal circulair gelinkte lijsten.

Opbouwen ervan kost niet echt noemenswaardig veel tijd, maar het is een beetje onnodig - vandaar dat ik me afvroeg of je het niet gewoon 'binary' kan opslaan zegmaar
edit: voor de goede orde - het is iets waar ik een beetje mee zit te spelen (een sudoku maker/oplosser ). oorspronkelijk heb ik het in C gemaakt wat natuurlijk vele malen sneller is. kortgeleden met php5 was het appeltje eitje om het even te porten (webbased is natuurlijk leuker), nu wil ik er een snelheidsmonster van maken vandaar mijn vraag of binary opslaan van structuren mogelijk is |
JeRa | vrijdag 20 juli 2007 @ 19:04 |
quote: Dat is toch precies wat ik zeg met 'daar schiet je niet veel mee op' (hij wil het sneller krijgen)?  quote:[..]
4e optie is het misschien in een idee om het in een cache bestand te zetten of in een tabel of desnoods in een phpsessie. Dat is het medium, het gaat om de inhoud de manier waarop je de gegevens omzet naar een abitrair formaat. |
JeRa | vrijdag 20 juli 2007 @ 19:05 |
quote:Op vrijdag 20 juli 2007 18:45 schreef Thomass het volgende:[..] Een linked structure van 3241 nodes, in een soort 'vierkante' matrix structuur gelinkt. Een x aantal horizontale circulairly linked lists en die zitten weer aan elkaar geknoopt met verticaal circulair gelinkte lijsten.  Opbouwen ervan kost niet echt noemenswaardig veel tijd, maar het is een beetje onnodig - vandaar dat ik me afvroeg of je het niet gewoon 'binary' kan opslaan zegmaar edit: voor de goede orde - het is iets waar ik een beetje mee zit te spelen (een sudoku maker/oplosser  [ afbeelding]). oorspronkelijk heb ik het in C gemaakt wat natuurlijk vele malen sneller is. kortgeleden met php5 was het appeltje eitje om het even te porten (webbased is natuurlijk leuker), nu wil ik er een snelheidsmonster van maken  vandaar mijn vraag of binary opslaan van structuren mogelijk is Heb je dit object oriented gemaakt of sla je de boel op in arrays? Met die eerste manier is PHP namelijk erg traag vanwege de constructoren en destructoren die aangeroepen worden. Maar als ik het goed begrijp is het dus het serialize() gedeelte waar het het traagst gaat? |
Thomass | vrijdag 20 juli 2007 @ 19:12 |
quote:Op vrijdag 20 juli 2007 19:05 schreef JeRa het volgende:[..] Heb je dit object oriented gemaakt of sla je de boel op in arrays? Met die eerste manier is PHP namelijk erg traag vanwege de constructoren en destructoren die aangeroepen worden. Maar als ik het goed begrijp is het dus het serialize() gedeelte waar het het traagst gaat? Het zijn objects ja. Serialize heb ik geprobeerd maar vanaf gezien omdat het trager was (from scratch iedere keer opbouwen is dus sneller dan een GIGANTISCHE string inlezen), ik vroeg me dus af of het mogelijk is het als het ware te 'hard-coden' / serializen zodat het op een efficiente manier in het geheugen gezet kan worden. Als het niet kan, jammer maar helaas |
JeRa | vrijdag 20 juli 2007 @ 19:15 |
quote:Op vrijdag 20 juli 2007 19:12 schreef Thomass het volgende:[..] Het zijn objects ja. Serialize heb ik geprobeerd maar vanaf gezien omdat het trager was (from scratch iedere keer opbouwen is dus sneller dan een GIGANTISCHE string inlezen), ik vroeg me dus af of het mogelijk is het als het ware te 'hard-coden' / serializen zodat het op een efficiente manier in het geheugen gezet kan worden. Als het niet kan, jammer maar helaas Ah, dus het gaat niet zozeer om serialize() maar om unserialize()? Want dan kijk je waarschijnlijk toch echt aan tegen de vele constructoren die aangeroepen moeten worden plus de bewerkingstijden op de gigantische string. Ik denk niet dat je daar gemakkelijk efficiënt omheen kunt werken. |
Thomass | vrijdag 20 juli 2007 @ 19:16 |
quote:Op vrijdag 20 juli 2007 19:15 schreef JeRa het volgende:[..] Ah, dus het gaat niet zozeer om serialize() maar om unserialize()? Want dan kijk je waarschijnlijk toch echt aan tegen de vele constructoren die aangeroepen moeten worden plus de bewerkingstijden op de gigantische string. Ik denk niet dat je daar gemakkelijk efficiënt omheen kunt werken. Jagoed ik gebruik php nu eigenlijk ook voor iets waar het helemaal niet voor gemaakt is, toch is het verrassend snel vind ik. |
WyriHaximus | vrijdag 20 juli 2007 @ 19:16 |
quote:Op vrijdag 20 juli 2007 19:04 schreef JeRa het volgende:[..] Dat is toch precies wat ik zeg met 'daar schiet je niet veel mee op' (hij wil het sneller krijgen)?  Dacht dat je er mee bedoelde dat de manier van output niet boeiend veel anders was .quote:Op vrijdag 20 juli 2007 19:04 schreef JeRa het volgende:[..] Dat is het medium, het gaat om de inhoud  de manier waarop je de gegevens omzet naar een abitrair formaat. Erhm true ja .
Ow is var_export($bla,true) en dan direct een bestand in niet iets? Dat is volgens mij redelijk rap en met OO werkt dat ook . Of anders bouw je een benchmarker . Weet je precies welke er sneller is |
WyriHaximus | vrijdag 20 juli 2007 @ 19:21 |
quote:Op vrijdag 20 juli 2007 19:12 schreef Thomass het volgende:[..] Het zijn objects ja. Serialize heb ik geprobeerd maar vanaf gezien omdat het trager was (from scratch iedere keer opbouwen is dus sneller dan een GIGANTISCHE string inlezen), ik vroeg me dus af of het mogelijk is het als het ware te 'hard-coden' / serializen zodat het op een efficiente manier in het geheugen gezet kan worden. Als het niet kan, jammer maar helaas Met var_export kan je de code exporten/echoen om dat hardcoded te doen . |
Thomass | vrijdag 20 juli 2007 @ 19:22 |
quote:Op vrijdag 20 juli 2007 19:16 schreef WyriHaximus het volgende:[..] Dacht dat je er mee bedoelde dat de manier van output niet boeiend veel anders was  . [..] Erhm true ja  . Ow is var_export($bla,true) en dan direct een bestand in niet iets? Dat is volgens mij redelijk rap en met OO werkt dat ook  . Of anders bouw je een benchmarker  . Weet je precies welke er sneller is Haha, php trekt het niet meer denk ik Fatal error: Nesting level too deep - recursive dependency?
O_O |
WyriHaximus | vrijdag 20 juli 2007 @ 19:24 |
quote:Op vrijdag 20 juli 2007 19:22 schreef Thomass het volgende:[..] Haha, php trekt het niet meer denk ik Fatal error: Nesting level too deep - recursive dependency? O_O haha hoe diep gaat dat ding dan? Zit een beveiliging in tegen loops . Doe maar eens een var_export($GLOBALS) en anders kan je toch wel ff een loopje maken die het zelfde doet (de php code generere) . Maar goed nu pleite ff bij me broertje in ze nieuwe huisje kijken |
WyriHaximus | vrijdag 20 juli 2007 @ 19:36 |
Altijd leuk eerst gaan roepen dat je gaat en dan met een keyboard gaan klooien .
Anyway zat de manuel nog eens te lezen en kwam deze comment tegen http://nl3.php.net/manual/nl/function.var-export.php#75327 en deze http://nl3.php.net/manual/nl/function.var-export.php#36606 (onderste regel) misschien is dat wel interesant als ik het zo lees . Kan nu niet ff snel wat testen aangezien dit me ouders hun PC is . |
Geqxon | vrijdag 20 juli 2007 @ 21:43 |
Weet iemand hier wat de performance van arrays zijn? Ik stop tegenwoordig zo'n beetje alles in arrays, maar maakt het PHP traag? Tuurlijk, het is geen vreemd iets in PHP, maar ik vroeg het mij zeg maar af.  |
ralfie | vrijdag 20 juli 2007 @ 22:02 |
quote:Op vrijdag 20 juli 2007 21:43 schreef Geqxon het volgende:Weet iemand hier wat de performance van arrays zijn? Ik stop tegenwoordig zo'n beetje alles in arrays, maar maakt het PHP traag? Tuurlijk, het is geen vreemd iets in PHP, maar ik vroeg het mij zeg maar af.  Waar wil je ze mee vergelijken? losse variablen?
Verschilt nogal denk ik, maar een numerieke array ( 0=>"w" ,1=>"r", 2=>"rr", 3=>r, 5=> "g" ) is vele malen sneller als een associatieve array( "water" => "vies", "brood" => "spelen" ) en een numerieke array zonder opeenvolgende getallen zit daar dan weer tussenin array( 3 => "e", 2344 => 44). Het gaat hierbij dus alleen om de keys, de values zullen hetzelfde zijn als bij gewone variabelen.
Verschillen zijn voor kleine arrays ( < x*1000) verwaarloosbaar, daarboven gaat het steeds meer spelen. |
Geqxon | vrijdag 20 juli 2007 @ 22:14 |
Twee voorbeeldjes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php // ARRAY:
$pages = range(3,45);
foreach ($pages as $page){ echo "Page number: " . $page; }
// NORMAAL
for ($i = 3; $i <= 45; $i++){ echo "Page number: " . $i; } ?> |
In dit geval vind ik het voorbeeld met de array veel schoner. Ik kan begrijpen dat de bovenste manier trager is, maar ga je dat met 10000+ users per dag merken? Of zijn dat micro-optimalisaties?
Tweede voorbeeld:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php // DATA OPHALEN EN VERDERE PRE-HTML OUTPUT BEWERKINGEN
$result = mysql_query("SELECT * FROM user"); $users = array();
while ($row = mysql_fetch_assoc($result)){ $users[] = $row; }
// HTML OUTPUT:
foreach ($users as $user){ echo "Name: " . $user['Name']; echo "City: " . $user['City']; } ?> |
Ga netheid vind ik dit een perfecte methode, maar is dit nou sterk vertragend of not-done? Kan dit beter? |
Xcalibur | vrijdag 20 juli 2007 @ 22:21 |
quote:Op vrijdag 20 juli 2007 22:14 schreef Geqxon het volgende:In dit geval vind ik het voorbeeld met de array veel schoner. Ik kan begrijpen dat de bovenste manier trager is, maar ga je dat met 10000+ users per dag merken? Of zijn dat micro-optimalisaties? Ik weet niet of ik die mooier vind eigenlijk.... - je hebt meer regels nodig - je hebt een extra array ($pages) nodig
Ik ben altijd wel gecharmeerd van 'opgeruimde' code zeg maar, beknopt maar toch goed leesbaar  |
Geqxon | vrijdag 20 juli 2007 @ 22:22 |
Ik heb een array met pagina's, en die lees ik uit, pagina per pagina. Misschien komt het door mijn OO-fetish, ik ben door Java iets gehersenspoeld.
Ik hou van beknopte code, maar ik hou meer van code waar supersnel te lezen is wat het doet, en waarvan de gedachtengang zoals die van een mens is. |
mschol | vrijdag 20 juli 2007 @ 22:35 |
quote:Op vrijdag 20 juli 2007 22:22 schreef Geqxon het volgende:Ik heb een array met pagina's, en die lees ik uit, pagina per pagina. Misschien komt het door mijn OO-fetish, ik ben door Java iets gehersenspoeld. Ik hou van beknopte code, maar ik hou meer van code waar supersnel te lezen is wat het doet, en waarvan de gedachtengang zoals die van een mens is. same here, en daar vind ik OO niet onder vallen |
ursel | vrijdag 20 juli 2007 @ 22:53 |
quote: Toch is dat met OO wel duidelijk te lezen hoor..  |
mschol | vrijdag 20 juli 2007 @ 22:58 |
quote: in de tijd dat ik OO gezien heb en mee heb moeten scripten op school heb ik het helemaal uitgekotst... zo gruwelijk onlogisch vond ik het... |
Geqxon | vrijdag 20 juli 2007 @ 23:03 |
quote:Op vrijdag 20 juli 2007 22:58 schreef mschol het volgende:[..] in de tijd dat ik OO gezien heb en mee heb moeten scripten op school heb ik het helemaal uitgekotst... zo gruwelijk onlogisch vond ik het... Heb je het geprogrammeerd, of ook geleerd? Weet je, om maar wat te noemen, wat een Sequence-diagram is? Klassendiagram? Controllerklassen? UI-klassen?
Want eerlijk is eerlijk, als je het alleen gaat programmeren zul je het vast onzin vinden.  |
Xcalibur | vrijdag 20 juli 2007 @ 23:03 |
quote:Op vrijdag 20 juli 2007 22:22 schreef Geqxon het volgende:Ik hou van beknopte code, maar ik hou meer van code waar supersnel te lezen is wat het doet, en waarvan de gedachtengang zoals die van een mens is. Ik ook  Persoonlijk vind ik een statement van 1 regel waarin je van 3 tot 45 loopt overzichtelijker dan het eerst definieren van een range, en daarna door die range heen gaan loopen...
Maar goed, ik denk dat dit qua performance erg weinig uitmaakt... iemand zin om een benchmarkje te klussen?  |
Thomass | vrijdag 20 juli 2007 @ 23:08 |
1 2 3 4 | <?php foreach(range(3, 45) as $pagina) echo "pagina: $pagina<br />"; ?> |
Leesbaar, check Kort, check
Niks mis mee |
Geqxon | vrijdag 20 juli 2007 @ 23:13 |
Even in elkaar gefrutselt. Resultaat:
1 2 3 | Result #1: 8.39233398438E-05 seconds Result #2: 4.50611114502E-05 seconds Result #3: 4.29153442383E-05 seconds |
:o |
mschol | vrijdag 20 juli 2007 @ 23:16 |
quote:Op vrijdag 20 juli 2007 23:03 schreef Geqxon het volgende:[..] Heb je het geprogrammeerd, of ook geleerd? Weet je, om maar wat te noemen, wat een Sequence-diagram is? Klassendiagram? Controllerklassen? UI-klassen? Want eerlijk is eerlijk, als je het alleen gaat programmeren zul je het vast onzin vinden.  ik heb het ooit (was een ruwe 4 jaar geleden) moeten leren idd. en termen als sequence diagram. klassendiagram komen mij bekend voor die ander 2 zo snel niet... maar ik heb het nadat het mij is uitgelegd (dat snapte ik dan nog wel) nooit begrepen hoe ik het moest schrijven... (het werkelijke programmeren dus)
ik moest een functie schrijven om een functie aan te roepen in een 3de functie.. ik had echt iets zo van WTF!?!?! ik heb mij er op een gegeven moment bij neergelegd en iets gehad van: deze zooi raak ik niet meer aan |
ursel | vrijdag 20 juli 2007 @ 23:19 |
quote:Op vrijdag 20 juli 2007 23:13 schreef Geqxon het volgende:[ code verwijderd ] Even in elkaar gefrutselt. Resultaat: [ code verwijderd ]  Mja, duidelijk.. |
Geqxon | vrijdag 20 juli 2007 @ 23:31 |
quote:Op vrijdag 20 juli 2007 23:16 schreef mschol het volgende:[..] ik heb het ooit (was een ruwe 4 jaar geleden) moeten leren idd. en termen als sequence diagram. klassendiagram komen mij bekend voor die ander 2 zo snel niet... maar ik heb het nadat het mij is uitgelegd (dat snapte ik dan nog wel) nooit begrepen hoe ik het moest schrijven... (het werkelijke programmeren dus) ik moest een functie schrijven om een functie aan te roepen in een 3de functie.. ik had echt iets zo van WTF!?!?! ik heb mij er op een gegeven moment bij neergelegd en iets gehad van: deze zooi raak ik niet meer aan :') Its all about responsibility.:)
Voorbeeldje: Een leraar van een school wijzigt van afdeling. Dit doe ik als volgt:
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 | =========== Klasse Main
Afdeling fnt = new Afdeling("FNT","Oudenoord"); Afdeling fnj = new Afdeling("FNJ","Nijenoord"); Leraar jan = new Leraar("Jan",fnt);
jan.wijzigAfdeling(fnt,fnj);
=========== Klasse Leraar
public boolean wijzigAfdeling (Afdeling form, Afdeling to){
if (from.verwijderLeraar(this) && to.nieuweLeraar(this){ return true } return false; }
=========== Klasse Afdeling private Vector leraren;
public boolean verwijderLeraar(Leraar lr){ if (leraren.contains(lr) == true){ leraren.removeElement(lr); return true; } return false; }
public boolean nieuweLeraar(Leraar lr){ if (leraren.contains(lr) == false){ leraren.add(lr); return true; } return false; } =========== |
Een functie roept inderdaad een functie weer aan, maar dat heeft allemaal met verantwoordelijkheid te maken. Het zou pas een potje worden als ik de klasse Leraar alles zou laten doen. :) |
mschol | vrijdag 20 juli 2007 @ 23:34 |
quote:Op vrijdag 20 juli 2007 23:31 schreef Geqxon het volgende:[..] Its all about responsibility.:) Voorbeeldje: Een leraar van een school wijzigt van afdeling. Dit doe ik als volgt: [ code verwijderd ] Een functie roept inderdaad een functie weer aan, maar dat heeft allemaal met verantwoordelijkheid te maken. Het zou pas een potje worden als ik de klasse Leraar alles zou laten doen.  zoals ik al zei, wanneer het uitgelegd word snap ik het... (de theorie is dus opzich begrijpbaar voor mij) maar ik krijg het echt onmogelijk in een werkend iets verwerkt, ik vind het dan veels te on overzichtelijk.. |
Geqxon | vrijdag 20 juli 2007 @ 23:34 |
quote:Op vrijdag 20 juli 2007 23:34 schreef mschol het volgende:[..] zoals ik al zei, wanneer het uitgelegd word snap ik het... (de theorie is dus opzich begrijpbaar voor mij) maar ik krijg het echt onmogelijk in een werkend iets verwerkt, ik vind het dan veels te on overzichtelijk.. Dan heb je nog altijd UML naar Java convertortjes.  |
Thomass | vrijdag 20 juli 2007 @ 23:45 |
Al die nonsens , gewoon gaan zitten en typen. =) |
Geqxon | vrijdag 20 juli 2007 @ 23:51 |
Is het misschien eens tijd om de titel te veranderen naar "Discussietopic" ipv. " voor dummies " ?
Het is niet echt meer een topic waar kleine vraagjes gesteld worden.  |
Xcalibur | vrijdag 20 juli 2007 @ 23:54 |
quote:Op vrijdag 20 juli 2007 23:13 schreef Geqxon het volgende:[ code verwijderd ] Even in elkaar gefrutselt. Resultaat: [ code verwijderd ]  zo, dat scheelt meer dan ik gedacht had |
WyriHaximus | zaterdag 21 juli 2007 @ 00:37 |
quote: Kijk daar hou ik nou van . No fucking bullshit just code it ! |
Geqxon | zaterdag 21 juli 2007 @ 00:39 |
quote: Leuk voor een hobbyproject, niet voor een grootschalig commercieel project.  |
WyriHaximus | zaterdag 21 juli 2007 @ 00:43 |
quote:Op zaterdag 21 juli 2007 00:39 schreef Geqxon het volgende:[..] Leuk voor een hobbyproject, niet voor een grootschalig commercieel project.  True, maar dan zet ik het ook eerst op papier en ram ik dan alles in elkaar . (Op papier zetten is ergens ook 'fucking write it' .) Vind dingen uit denken en uitschrijven ook erg leuk om te doen. (It's atleast half the fun.) Maar niet dat gemiereneuk om kleine dingetjes .
* WyriHaximus houd niet van te veel bullshit er om heen |
Geqxon | zaterdag 21 juli 2007 @ 00:44 |
Vaak heb ik eerst een paar dagen een idee in mijn hoofd, ga ik de database schrijven, een technisch ontwerp in grote lijnen, welke bestanden ik aan ga maken, wat zo'n beetje in welk bestand komt, print ik een checklist en ga ik aan de slag.  |
Thomass | zaterdag 21 juli 2007 @ 01:03 |
Ja maar niet iedereen maakt commerciele dingen, ik zou het echt niet trekken . Van die standaard applicaties voor in bedrijven die medewerkers moeten bijhouden ofzo, booooring. |
Geqxon | zaterdag 21 juli 2007 @ 01:13 |
Mwa. Ik ben atm bezig een frontend voor een bestaande webshop te maken, en ik vind het toch echt wel een kick geven als ik weer een onderdeel weg kan strepen, en de webshop beetje bij beetje één geheel wordt.  |
JeRa | zaterdag 21 juli 2007 @ 04:57 |
quote:Op zaterdag 21 juli 2007 01:03 schreef Thomass het volgende:Ja maar niet iedereen maakt commerciele dingen, ik zou het echt niet trekken  . Van die standaard applicaties voor in bedrijven die medewerkers moeten bijhouden ofzo, booooring. Hobbyprojectjes aan mijn kant zijn inmiddels zo groot geworden dat dingen als UML-schema's en DFD-diagrammen toch echt om de hoek komen kijken. En dat heeft weinig met onvermogen van overzicht te maken, met 'just code it' kom je hoogstens op 20% van het gewenste resultaat bij zulke projecten. Als je vantevoren goed bedenkt hoe je applicatie in elkaar gaat steken hoef je tijdens het implementeren nog maar weinig tijd te investeren in het redesignen,
En dan heb ik het niet over managementapplicaties of boekhoudsprogramma's, maar juist over 'leuke' projectjes  |
SuperRembo | zaterdag 21 juli 2007 @ 11:45 |
quote: Hier zie ik echt totaal het voordeel niet van. Het wordt er alleen onduidelijker van.quote:Tweede voorbeeld: [ code verwijderd ] Ga netheid vind ik dit een perfecte methode, maar is dit nou sterk vertragend of not-done? Kan dit beter? Hier vind ik het wel netter. Het zou nog netter zijn als je een database class gebruikt die die de data meteen in een array van array's terug geeft. |
WyriHaximus | zaterdag 21 juli 2007 @ 12:37 |
quote:Op zaterdag 21 juli 2007 01:03 schreef Thomass het volgende:Ja maar niet iedereen maakt commerciele dingen, ik zou het echt niet trekken  . Van die standaard applicaties voor in bedrijven die medewerkers moeten bijhouden ofzo, booooring. Mwah hangt er vanaf. Als het een standaard iets is wat je al tevaak gedaan hebt is het redelijk saai ja. Moet je met nieuwe dingen bezig dan word het gelijk een heel ander verhaal .quote:Op zaterdag 21 juli 2007 04:57 schreef JeRa het volgende:[..] Hobbyprojectjes aan mijn kant zijn inmiddels zo groot geworden dat dingen als UML-schema's en DFD-diagrammen toch echt om de hoek komen kijken. En dat heeft weinig met onvermogen van overzicht te maken, met 'just code it' kom je hoogstens op 20% van het gewenste resultaat bij zulke projecten. Als je vantevoren goed bedenkt hoe je applicatie in elkaar gaat steken hoef je tijdens het implementeren nog maar weinig tijd te investeren in het redesignen, En dan heb ik het niet over managementapplicaties of boekhoudsprogramma's, maar juist over 'leuke' projectjes  Merk het bij mezelf dat ik ook voor me hobbie dingen steeds meer die kant op ga. Dingen worden steeds complexer en je zoekt toch een manier om het makkelijk overzichtelijk te houden. Zelf gebruik ik geen checklist maar een bugtracker . |
CraZaay | zondag 22 juli 2007 @ 11:53 |
quote:Op zaterdag 21 juli 2007 01:03 schreef Thomass het volgende:Ja maar niet iedereen maakt commerciele dingen, ik zou het echt niet trekken  . Van die standaard applicaties voor in bedrijven die medewerkers moeten bijhouden ofzo, booooring. Ik maak wel commerciele dingen, en daar vallen ook jongerencommunities onder met een paar honderdduizend leden bijvoorbeeld. Da's ook weer een ander verhaal natuurlijk dan een boekhouddingetje  |
super-muffin | zondag 22 juli 2007 @ 13:05 |
Hoe kan ik het beste goed controleren van welk type een afbeelding is die via een formulier binnen komt?
Het is voor mijn über nuttige Image 2 HTML 'applicatie' 
edit-
Met de functie exif_imagetype() dus. 
[ Bericht 89% gewijzigd door super-muffin op 22-07-2007 13:45:02 ] |
JeRa | zondag 22 juli 2007 @ 15:12 |
@super-muffin
Je kunt natuurlijk ook de imagecreatefromstring() functie gebruiken om een autodetect te laten uitvoeren  |
super-muffin | zondag 22 juli 2007 @ 15:30 |
hm, hoe dan ongeveer? Het word me niet echt helemaal duidelijk als ik naar de documentatie kijk.  |
Geqxon | zondag 22 juli 2007 @ 15:39 |
:+ :+ |
JortK | zondag 22 juli 2007 @ 15:45 |
Ik was dit topic ernstig kwijt  |
CraZaay | zondag 22 juli 2007 @ 15:53 |
quote:  |
super-muffin | zondag 22 juli 2007 @ 15:55 |
dat kan ook natuurlijk, maar vind ik niet erg netjes. 
Trouwens lokaal werkt die exif_imagetype wel, maar op mijn externe host niet.  |
JeRa | zondag 22 juli 2007 @ 16:17 |
@Geqxon
Je kunt beter naar de mimetype kijken, er zijn nogal wat BMP-afbeeldingen in omloop met een JPEG-extensie. :')
@super-muffin
|
Geqxon | zondag 22 juli 2007 @ 16:18 |
quote:Op zondag 22 juli 2007 16:17 schreef JeRa het volgende:@Geqxon Je kunt beter naar de mimetype kijken, er zijn nogal wat BMP-afbeeldingen in omloop met een JPEG-extensie.  Bovenstaand geklopt stukje code werkt niet eens met .JPG extensies.  |
WyriHaximus | zondag 22 juli 2007 @ 16:21 |
quote: Zie link in me sig .quote:Op zondag 22 juli 2007 15:55 schreef super-muffin het volgende:dat kan ook natuurlijk, maar vind ik niet erg netjes.  Trouwens lokaal werkt die exif_imagetype wel, maar op mijn externe host niet.  Is http://nl3.php.net/manual/en/function.getimagesize.php anders niet een idee? |
super-muffin | zondag 22 juli 2007 @ 16:46 |
@JeRa : dat werkt goed inderdaad. maar het is er niet echt heel erg sneller op geworden. Maar dat moet ik nog even goed uitzoeken.
@Wyri : Die functie heb ik niet nodig. Of ik begrijp je verkeerd. |
JeRa | zondag 22 juli 2007 @ 16:56 |
quote:Op zondag 22 juli 2007 16:46 schreef super-muffin het volgende:@JeRa : dat werkt goed inderdaad.  maar het is er niet echt heel erg sneller op geworden. Maar dat moet ik nog even goed uitzoeken. @Wyri : Die functie heb ik niet nodig. Of ik begrijp je verkeerd. De functie imagecreatefromstring() maakt er meteen een afbeelding van, en gebruikt functies zoals imagegetsize() om te bepalen wat het type is dat omzetten van brondata naar afbeelding kan, afhankelijk van de grootte en afmetingen van de afbeelding, lang duren helaas. |
super-muffin | zondag 22 juli 2007 @ 17:10 |
Dat snap ik wel. 
Het handigst zou nog zijn als mijn host exif_imagetype() ondersteund. Tenminste, dat zou het snelst zijn.  |
SuperRembo | zondag 22 juli 2007 @ 17:23 |
quote:Op zondag 22 juli 2007 16:46 schreef super-muffin het volgende:@Wyri : Die functie heb ik niet nodig. Of ik begrijp je verkeerd. getimagesize() kan ook het type teruggeven Ik denk dat die alleen naar de header van de file kijkt, hij laadt in ieder geval niet de hele afbeelding en zal dus veel sneller zijn. |
WyriHaximus | zondag 22 juli 2007 @ 21:35 |
quote:Op zondag 22 juli 2007 16:46 schreef super-muffin het volgende:@Wyri : Die functie heb ik niet nodig. Of ik begrijp je verkeerd. quote:Op zondag 22 juli 2007 17:23 schreef SuperRembo het volgende:[..] getimagesize() kan ook het type teruggeven  Ik denk dat die alleen naar de header van de file kijkt, hij laadt in ieder geval niet de hele afbeelding en zal dus veel sneller zijn. Precies  |
Tijn | maandag 23 juli 2007 @ 16:15 |
M'n XS4ALL-problemen met PHP zijn opgelost Ik had het probleem dat ik niet via .htaccess de instellingen van PHP kon wijzigen, en dus bv register_globals niet uit kon zetten (wat default aan staat). En aangezien je register_globals ook niet via ini_set() kunt wijzigen, wist ik niet hoe ik het dan aan moest pakken. Maar een mailtje naar de helpdesk bood soelaas, het blijkt dat je je eigen php.ini mag hebben Daar even de opties in zetten die je voor jouw website wil hebben en in de CGI-BIN directory zetten en klaar is Tijn  |
Geqxon | maandag 23 juli 2007 @ 16:22 |
Vreemd dat je register_globals niet uit kunt zetten, een imho erg onveilige functie.  |
Tijn | maandag 23 juli 2007 @ 16:24 |
quote:Op maandag 23 juli 2007 16:22 schreef Geqxon het volgende:Vreemd dat je register_globals niet uit kunt zetten, een imho erg onveilige functie.  Ja, maar het blijkt dus wel te kunnen, want je mag je eigen php.ini hebben bij XS4ALL 
Dus ik dacht, ik zeg het ff, mochten er nog eens mensen die bij XS4ALL gehost zijn langskomen met zo'n soort vraag  |
Geqxon | maandag 23 juli 2007 @ 16:32 |
Is dat dan niet gevaarlijk voor de XS4ALL server? Dat je bijvoorbeeld hun CPU even een uurtje lang op 100% laat stressen omdat je de timelimit op 48 uur hebt gezet? |
Geqxon | maandag 23 juli 2007 @ 16:35 |
Heuj. Mijn domeinnaam heeft een week lang op "in aanvraag" gestaan, en is nu weer vrij. Ik dacht dat dat tegenwoordig allemaal digitaal kon daar bij SIDN?  |
Tijn | maandag 23 juli 2007 @ 16:38 |
quote:Op maandag 23 juli 2007 16:32 schreef Geqxon het volgende:Is dat dan niet gevaarlijk voor de XS4ALL server? Dat je bijvoorbeeld hun CPU even een uurtje lang op 100% laat stressen omdat je de timelimit op 48 uur hebt gezet? Ja hoor eens, dat weet ik ook allemaal niet hoor  |
Geqxon | maandag 23 juli 2007 @ 16:38 |
quote: Zeg, mijn XS4All abbotje is vandaag opeens wel erg traag geworden. Tijn?  |
CraZaay | maandag 23 juli 2007 @ 22:18 |
quote:Op maandag 23 juli 2007 16:35 schreef Geqxon het volgende:Heuj. Mijn domeinnaam heeft een week lang op "in aanvraag" gestaan, en is nu weer vrij. Ik dacht dat dat tegenwoordig allemaal digitaal kon daar bij SIDN?  Een goede aanvraag zou sowieso niet langer dan een paar minuten moeten duren en daarna op 'actief' moeten staan. |
Geqxon | maandag 23 juli 2007 @ 22:19 |
Goed, ik heb een kut-provider wat dat betreft. Mijn hostings-provider werkt nog met papier, terwijl ik weet dat het digitaal kan.
Zometeen dat noodnummer van ze maar even bellen. |
WyriHaximus | maandag 23 juli 2007 @ 23:11 |
quote:Op maandag 23 juli 2007 16:32 schreef Geqxon het volgende:Is dat dan niet gevaarlijk voor de XS4ALL server? Dat je bijvoorbeeld hun CPU even een uurtje lang op 100% laat stressen omdat je de timelimit op 48 uur hebt gezet? Daar heb je php.ini niet perse voor nodig kan ook tijdens runtime http://php.net/set_time_limit quote:Op maandag 23 juli 2007 22:19 schreef Geqxon het volgende:Goed, ik heb een kut-provider wat dat betreft. Mijn hostings-provider werkt nog met papier, terwijl ik weet dat het digitaal kan. Zometeen dat noodnummer van ze maar even bellen. En dan zeggen of nu reggen of ik ga verhuizen . |
Geqxon | maandag 23 juli 2007 @ 23:14 |
quote: True, maar als je register_globals niet eens uit kan zetten gok ik dat dit ook niet werken gaat.  |
JeRa | maandag 23 juli 2007 @ 23:29 |
quote: En vervolgens aan hen de keuze: ofwel een klant behouden voor een paar euro's, ofwel een lastige klant kwijt die geheel conform de algemene voorwaarden een leuke boete gaat betalen voor het onrechtmatig bellen van het noodnummer. |
WyriHaximus | maandag 23 juli 2007 @ 23:34 |
quote:Op maandag 23 juli 2007 23:14 schreef Geqxon het volgende:[..] True, maar als je register_globals niet eens uit kan zetten gok ik dat dit ook niet werken gaat.  Beetje nutteloos lijkt mij, register_globals tijdens runtime uitzetten .quote:Op maandag 23 juli 2007 23:29 schreef JeRa het volgende:[..] En vervolgens aan hen de keuze: ofwel een klant behouden voor een paar euro's, ofwel een lastige klant kwijt die geheel conform de algemene voorwaarden een leuke boete gaat betalen voor het onrechtmatig bellen van het noodnummer. Moet je natuurlijk wel het normale nummer eerst bellen . Daarnaast als ze niet binnen 7 dagen een domain kunnen reggen dan betwijfel ik ergens ook dat ze opnemen . Maar je hebt wel gelijk . Hij kan veel beter gewoon gelijk verhuizen, scheelt hem een boete en heeft dan toch ze domain . |
Geqxon | maandag 23 juli 2007 @ 23:40 |
quote:Op maandag 23 juli 2007 23:29 schreef JeRa het volgende:[..] En vervolgens aan hen de keuze: ofwel een klant behouden voor een paar euro's, ofwel een lastige klant kwijt die geheel conform de algemene voorwaarden een leuke boete gaat betalen voor het onrechtmatig bellen van het noodnummer. "Noodnummer". Om drie uur in de middag krijg ik voice-mail. |
Geqxon | maandag 23 juli 2007 @ 23:43 |
Anyhow, iemand een goed adresje? 100 megabyte webspace, 3 gigabyte dataverkeer de maand, unlimited mail-adressen (catch-all), minimaal 5 MySQL databases en PHP ondersteuning inclusief een domeinnaam, voor ongeveer 30-40 euro per jaar?
Uptime is niet interresant, het is slechts voor hobbyprojecten. |
WyriHaximus | maandag 23 juli 2007 @ 23:51 |
quote:  quote:Op maandag 23 juli 2007 23:43 schreef Geqxon het volgende:Anyhow, iemand een goed adresje? 100 megabyte webspace, 3 gigabyte dataverkeer de maand, unlimited mail-adressen (catch-all), minimaal 5 MySQL databases en PHP ondersteuning inclusief een domeinnaam, voor ongeveer 30-40 euro per jaar? Uptime is niet interresant, het is slechts voor hobbyprojecten. Zelf zit ik hier: http://www.sensson.net/producten/web-hosting/ of je kijkt ff in het grote betaalde webhostingstopic-deel 5 . |
Geqxon | dinsdag 24 juli 2007 @ 00:01 |
Bedankt voor de links, ik denk dat het neostrada.nl gaat worden.
Ik kan natuurlijk mijn huidige hostingsprovider "pwnen" door het domeinnaam onder een valse naam te registreren, en dan geflipt te bellen waarom ze er een week over deden, en dat hij nu door iemand anders ingepikt is.  |
WyriHaximus | dinsdag 24 juli 2007 @ 00:24 |
Haha idd ! Eingelijk wel een strakke actie . |
wonderer | dinsdag 24 juli 2007 @ 04:26 |
ik weet dat je bij een update kan doen "veld=veld+1" enzo, maar kan dat ook met strings? Dat je een stuk tekst plakt achter wat er al instaat? Of moet je dan eerst kijken wat er staat en dan als hele nieuwe data invoeren/updaten? |
WyriHaximus | dinsdag 24 juli 2007 @ 07:53 |
quote:Op dinsdag 24 juli 2007 04:26 schreef wonderer het volgende:ik weet dat je bij een update kan doen "veld=veld+1" enzo, maar kan dat ook met strings? Dat je een stuk tekst plakt achter wat er al instaat? Of moet je dan eerst kijken wat er staat en dan als hele nieuwe data invoeren/updaten? Moet wel werken gok ik zo :). |
SuperRembo | dinsdag 24 juli 2007 @ 08:14 |
quote: Als je + gebruikt bij tekst, dan levert dat in MySql 0 op (vreemd ja, 't blijft MySQL). Met Concat() kun te tekst aan elkaar plakken. |
Geqxon | dinsdag 24 juli 2007 @ 08:21 |
Niet eens zo heel vreemd, string + string = 0.  |
WyriHaximus | dinsdag 24 juli 2007 @ 08:28 |
quote:Op dinsdag 24 juli 2007 08:14 schreef SuperRembo het volgende:[..] Als je + gebruikt bij tekst, dan levert dat in MySql 0 op (vreemd ja, 't blijft MySQL). Met Concat() kun te tekst aan elkaar plakken. Ok tof weer wat geleerd, was ook een grote gok .quote: Nee eingelijk niet, javascript pikt dat dan weer wel, in PHP weer . en VB(6 iig) gebruikt ook weer + als ik heel diep ga spitten . |
SuperRembo | dinsdag 24 juli 2007 @ 09:22 |
quote: Het zou logischer zijn als het een error gaf, of anders NULL. Op deze manier is het net zo vaag als php. 'a'+'b' geeft 0, 'a' + '1' geeft 1, 'a' + 0x1 geeft 1, maar 'a' + '0x1' geeft dan weer 0 Aan de warnings te zien probeert ie er een double van te maken.
Als ik het goed heb kan je MySQL wel zo instellen dat dit soort dingen wel een fout geven. |
Tijn | dinsdag 24 juli 2007 @ 14:56 |
quote:Op maandag 23 juli 2007 23:43 schreef Geqxon het volgende:Anyhow, iemand een goed adresje? 100 megabyte webspace, 3 gigabyte dataverkeer de maand, unlimited mail-adressen (catch-all), minimaal 5 MySQL databases en PHP ondersteuning inclusief een domeinnaam, voor ongeveer 30-40 euro per jaar? Ik ben zelf wel tevreden met Webreus 
Trouwens, ik kwam er net achter dat magic_quotes_gpc ook default aanstaat bij XS4ALL Gelukkig weet ik nu dus dat ik het via m'n eigen php.ini kan aanpassen, maar serieus, waarom hebben providers van die waardeloze default settings?  |
wonderer | dinsdag 24 juli 2007 @ 16:34 |
quote: Ja, die had ik al geprobeerd Even dat concat onderzoeken. |
Geqxon | dinsdag 24 juli 2007 @ 18:00 |
quote:Op dinsdag 24 juli 2007 09:22 schreef SuperRembo het volgende:[..] Het zou logischer zijn als het een error gaf, of anders NULL. Op deze manier is het net zo vaag als php. 'a'+'b' geeft 0, 'a' + '1' geeft 1, 'a' + 0x1 geeft 1, maar 'a' + '0x1' geeft dan weer 0  Aan de warnings te zien probeert ie er een double van te maken. Als ik het goed heb kan je MySQL wel zo instellen dat dit soort dingen wel een fout geven. Goed, wat dat betreft is het stricte van Java dan ook wel weer fijn. Non compatible!  |
Thomass | dinsdag 24 juli 2007 @ 18:43 |
quote:Op dinsdag 24 juli 2007 09:22 schreef SuperRembo het volgende:[..] Het zou logischer zijn als het een error gaf, of anders NULL. Op deze manier is het net zo vaag als php. 'a'+'b' geeft 0, 'a' + '1' geeft 1, 'a' + 0x1 geeft 1, maar 'a' + '0x1' geeft dan weer 0  Aan de warnings te zien probeert ie er een double van te maken. Als ik het goed heb kan je MySQL wel zo instellen dat dit soort dingen wel een fout geven. 1 2 3 4 5 6 | <?php 'a' + 'b' = (int)'a' + (int)'b' = 0 + 0 = 0 'a' + '1' = (int)'a' + (int)'1' = 0 + 1 = 1 'a' + 0x1 = (int)'a' + 1 = 1 'a' + '0x1' = (int)'a' + (int)'0x1' = 0 + 1 = 1 // en niet 0 zoals jij beweert ?> |
och het is zo logisch mensen
(gave site heb je trouwens ) |
Chandler | dinsdag 24 juli 2007 @ 18:45 |
tvp  |
SuperRembo | dinsdag 24 juli 2007 @ 19:15 |
quote: Ja, ik snap ook wel wat er gebeurt. Handig vind ik het niet. Ik heb in zo'n geval liever dikke vette foutmelding.quote:(gave site heb je trouwens  ) Thx! |
Geqxon | dinsdag 24 juli 2007 @ 22:19 |
Weer een performance vraag, maar deze keer eentje met een groter effect. Alsin: 0.2 seconden versus 8 seconden. 
Een simpele query, met een LEFT JOIN op een bookmarktabel. Nu wil ik dus graag alle nieuwsartikelen zien die de user gebookmarked heeft. Dus hop, de LEFT JOIN, en dan op de koppelende ID van de bookmarktabel een IS NOT NULL. Gaat zelfs over duizenden nieuwsartikelen prima, supersnel dus.
Nu wil ik zien welke nieuwsartikelen de user niet gebookmarked heeft. (For the record: Dit zijn er minder dan de wel gebookmarkte nieuwsartikelen). Dit doe ik door een IS NULL op het koppelend ID van de bookmark tabel te zetten. Probleem dus: Dit gaat vreselijk traag...
Zou dit misschien sneller op te lossen zijn? Ik weet dat JOINS traag kunnen zijn, en hiermee is dat duidelijk te zien.  |
WyriHaximus | dinsdag 24 juli 2007 @ 22:58 |
quote:Op dinsdag 24 juli 2007 22:19 schreef Geqxon het volgende:Weer een performance vraag, maar deze keer eentje met een groter effect. Alsin: 0.2 seconden versus 8 seconden.  Een simpele query, met een LEFT JOIN op een bookmarktabel. Nu wil ik dus graag alle nieuwsartikelen zien die de user gebookmarked heeft. Dus hop, de LEFT JOIN, en dan op de koppelende ID van de bookmarktabel een IS NOT NULL. Gaat zelfs over duizenden nieuwsartikelen prima, supersnel dus. Nu wil ik zien welke nieuwsartikelen de user niet gebookmarked heeft. (For the record: Dit zijn er minder dan de wel gebookmarkte nieuwsartikelen). Dit doe ik door een IS NULL op het koppelend ID van de bookmark tabel te zetten. Probleem dus: Dit gaat vreselijk traag... Zou dit misschien sneller op te lossen zijn? Ik weet dat JOINS traag kunnen zijn, en hiermee is dat duidelijk te zien.  Wat zijn je queries nu dan? |
Geqxon | dinsdag 24 juli 2007 @ 23:01 |
In een simpele vorm:
1 2 3 4 | SELECT Titel FROM Artikel AS a LEFT JOIN Bookmark AS bm ON bm.ArtikelID = a.ID WHERE bm.ArtikelID IS NOT NULL |
Dit is dus voor alles dat wel een bookmark heeft, en goed snel is.
In een simpele vorm:
1 2 3 4 | SELECT Titel FROM Artikel AS a LEFT JOIN Bookmark AS bm ON bm.ArtikelID = a.ID WHERE bm.ArtikelID IS NULL |
Voor alle artikelen zonder bookmark, goed traag. Ik kan begrijpen dat hij dus elke keer naar een bookmark moet zoeken die niet bestaat, maar hoe krijg ik zoiets geoptimaliseerd? |
WyriHaximus | dinsdag 24 juli 2007 @ 23:19 |
Is dit niet sneller?
1 2 3 4 | SELECT field1 FROM table1 WHERE id1 IN (SELECT id2 FROM table2 WHERE condition1); |
1 2 3 4 | SELECT field1 FROM table1 WHERE id1 NOT IN (SELECT id2 FROM table2 WHERE condition1); |
Werkt dat NOT? Of was het !? De ene keer lijkt het wel te werken en de andere weer niet .
EDIT: Of iig de 2e aangezien de eerste bij jouw al lekker rap is . |
Geqxon | dinsdag 24 juli 2007 @ 23:25 |
Maar dan moet hij dus (in mijn geval) 6621 keer een select query uitvoeren? Ik heb wat moeite een testcase op te zetten, maar zo uit mijn hoofd lijkt dit niet bijster veel rapper.  |
WyriHaximus | dinsdag 24 juli 2007 @ 23:33 |
quote:Op dinsdag 24 juli 2007 23:25 schreef Geqxon het volgende:Maar dan moet hij dus (in mijn geval) 6621 keer een select query uitvoeren? Ik heb wat moeite een testcase op te zetten, maar zo uit mijn hoofd lijkt dit niet bijster veel rapper.  Zover ik weet voert hij eerst de sub query uit, en zet het resultaat daar van in IN. 2 queries afaik. Kan er totaal naast zitten. Jammer dat JortK op vakantie is die weet behoorlijk wat van SQL af . |
Geqxon | dinsdag 24 juli 2007 @ 23:41 |
Volgens MySQL doe ik het iig goed:
1 2 3 | SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL; |
.... nu moet ik wel zeggen dat ik heel stout weer implicit en explicit joins dwars door elkaar gebruik, maar dit maakt op de performance weinig uit. |
WyriHaximus | dinsdag 24 juli 2007 @ 23:44 |
Heb je indexes? Hoeveel data is het eingelijk? (Aantal reccords totale tabel grote.) |
Geqxon | dinsdag 24 juli 2007 @ 23:53 |
2,500 bookmarks, 6,500 nieuwsartikelen, 70 categoriën en 250 categorië abbonementen. Niet veel dus 
En jep, waar nodig geindexed.  |
WyriHaximus | woensdag 25 juli 2007 @ 00:47 |
Niet bar veel dus . Maar geen idee verder waarom het zo traag is . |
wonderer | woensdag 25 juli 2007 @ 01:09 |
Hoe kan ik uitvogelen hoeveelste in een resultset een bepaald record is? Bijvoorbeeld "select from producten where klant_id='1'" en dan wil ik weten hoeveelste de barbecue is in die lijst. Is daar iets makkelijks voor? |
Geqxon | woensdag 25 juli 2007 @ 01:36 |
quote:Op woensdag 25 juli 2007 01:09 schreef wonderer het volgende:Hoe kan ik uitvogelen hoeveelste in een resultset een bepaald record is? Bijvoorbeeld "select from producten where klant_id='1'" en dan wil ik weten hoeveelste de barbecue is in die lijst. Is daar iets makkelijks voor? Puur SQL, of ook met PHP? |
-Orion- | woensdag 25 juli 2007 @ 01:39 |
- laat maar -
[ Bericht 82% gewijzigd door -Orion- op 25-07-2007 01:53:42 ] |
wonderer | woensdag 25 juli 2007 @ 01:45 |
quote: Ook met PHP. |
WyriHaximus | woensdag 25 juli 2007 @ 07:48 |
quote: 1 2 3 4 5 6 7 8 9 | <?php $i = 0; $result = executequery("blablabla"); while($row = fetchrow($result)) { $i++; echo($i . "e reccord:" . $row); } ?> |
Zoiets? |
Geqxon | woensdag 25 juli 2007 @ 08:43 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $result = mysql_query("SELECT product FROM producten WHERE klant_id='1");
$i = 0; while ($row = mysql_fetch_assoc($result)){ if ($row['product'] == "Barbecue"){ $row_number = $i; break(); } $i++; }
if (isset($row_number)){ echo "Barbecue was nummer " . $row_number . " op de lijst."; } ?> |
Oid. |
DikkeSmikkel | woensdag 25 juli 2007 @ 10:03 |
Ik heb niet echt een vraag over MySQL maar wel één over PHP dus... ik verwacht dat-ie hier wel mag of niet? 
Ik ben een beetje met classes aan het rommelen maar ik zie net iets over het hoofd waardoor het niet werkt... Kortom, tijd voor meer ogen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php require_once('anotherclass.php');
class Baap { private $linkie;
public function doSomething() { echo "zomg "; var_dump($linkie); }
public function __construct() { $linkie = new AnotherClass(); var_dump($linkie); echo "<br>"; } } ?> |
Ik heb dus twee classes waarvan er één in een include zit (en dus bovenin wordt eengeroepen). Nu heb ik dus in de __construct() dat-ie de tweede classe initialiseert en deze in de private variabele pleurt. Of tenminste dat wil ik, PHP denkt daar kennelijk anders over want in de functie doSomething is $linkie dus NULL. Ik ben al waar meer aan het proberen geweest maar ik zie 't niet meer... Kan iemand ff een aanwijzing geven? |
WyriHaximus | woensdag 25 juli 2007 @ 10:09 |
quote:Op woensdag 25 juli 2007 10:03 schreef DikkeSmikkel het volgende:Ik heb niet echt een vraag over MySQL maar wel één over PHP dus... ik verwacht dat-ie hier wel mag of niet?  Ik ben een beetje met classes aan het rommelen maar ik zie net iets over het hoofd waardoor het niet werkt...  Kortom, tijd voor meer ogen. [ code verwijderd ] Ik heb dus twee classes waarvan er één in een include zit (en dus bovenin wordt eengeroepen). Nu heb ik dus in de __construct() dat-ie de tweede classe initialiseert en deze in de private variabele pleurt. Of tenminste dat wil ik, PHP denkt daar kennelijk anders over want in de functie doSomething is $linkie dus NULL. Ik ben al waar meer aan het proberen geweest maar ik zie 't niet meer...  Kan iemand ff een aanwijzing geven? self::linkie ipv $linkie . Omdat linkie een member is van je class kan je hem niet als een gewonen $var opschrijven maar moet je aangeven dat je de member wilt self::var . Of en $this->linkie kan ook maar dat vind hij niet leuk als je in je constructor zit .
Ow en dit is het PHP en/of (My)SQL topic dus PHP dingen zijn nooit een probleem . |
Geqxon | woensdag 25 juli 2007 @ 10:22 |
In de constructor een nieuwe klasse definieëren, pas je wel op dat je geen lus krijgt?  |
DikkeSmikkel | woensdag 25 juli 2007 @ 10:27 |
quote:Op woensdag 25 juli 2007 10:09 schreef WyriHaximus het volgende:[..] self::linkie ipv $linkie  . Omdat linkie een member is van je class kan je hem niet als een gewonen $var opschrijven maar moet je aangeven dat je de member wilt self::var  . Of en $this->linkie kan ook maar dat vind hij niet leuk als je in je constructor zit  . Ow en dit is het PHP en/of (My)SQL topic dus PHP dingen zijn nooit een probleem  . Bedankt voor je snelle antwoord! Ik ga even verder puzzelen. Als ik er niet uit kom dan merk je dat vanzelf... |
DikkeSmikkel | woensdag 25 juli 2007 @ 10:28 |
quote:Op woensdag 25 juli 2007 10:22 schreef Geqxon het volgende:In de constructor een nieuwe klasse definieëren, pas je wel op dat je geen lus krijgt?  De __contructor wordt toch maar 1x uitgevoerd toch? |
Geqxon | woensdag 25 juli 2007 @ 10:33 |
quote: Als je in de constructor van "Auto" een nieuw "Auto" object aan maakt, krijg je een aardige lus. .
Trouwens: CSV.  XML.  |
WyriHaximus | woensdag 25 juli 2007 @ 10:35 |
quote:Op woensdag 25 juli 2007 10:27 schreef DikkeSmikkel het volgende:[..] Bedankt voor je snelle antwoord!  Ik ga even verder puzzelen. Als ik er niet uit kom dan merk je dat vanzelf... quote: Niet als je in de constructor van de class waar je in zit die zelfde class ook weer initialiseerd . Dan krijg je een loop . |
DikkeSmikkel | woensdag 25 juli 2007 @ 10:58 |
quote:Op woensdag 25 juli 2007 10:35 schreef WyriHaximus het volgende:Niet als je in de constructor van de class waar je in zit die zelfde class ook weer initialiseerd  . Dan krijg je een loop  . Nee ok dan wel, maargoed dan is zit het geheel wel heel brak in elkaar. De opzet is, is dat ik een class heb met een aantal functies. Voor deze functies wordt een andere class gebruikt (AnotherClass). Daarom wil ik in de class Baap bij initialisatie de AnotherClass alvast zodat ik vanuit iedere functie in Baap AnotherClass kan gebruiken en dus niet bij iedere functie apart
hoef uit te voeren.
Ik heb nu dus
wat ik voor zover ik heb gezien op PHP.net etc goed zou moeten zijn maar dan geeft var_dump($linkie) welke recht onder bovenstaande regel staat een NULL terug. Terwijl deze nu toch ingevuld had moeten zijn lijkt me.
$linkie is nu
1 2 3 | <?php private static $linkie; ?> |
|
DikkeSmikkel | woensdag 25 juli 2007 @ 11:02 |
Laat maar, te vroeg geroepen.
werkt wel overal... 
Bedankt voor de hulp iig!  |
JeRa | woensdag 25 juli 2007 @ 12:45 |
quote:Op dinsdag 24 juli 2007 22:19 schreef Geqxon het volgende:Weer een performance vraag, maar deze keer eentje met een groter effect. Alsin: 0.2 seconden versus 8 seconden.  Een simpele query, met een LEFT JOIN op een bookmarktabel. Nu wil ik dus graag alle nieuwsartikelen zien die de user gebookmarked heeft. Dus hop, de LEFT JOIN, en dan op de koppelende ID van de bookmarktabel een IS NOT NULL. Gaat zelfs over duizenden nieuwsartikelen prima, supersnel dus. Nu wil ik zien welke nieuwsartikelen de user niet gebookmarked heeft. (For the record: Dit zijn er minder dan de wel gebookmarkte nieuwsartikelen). Dit doe ik door een IS NULL op het koppelend ID van de bookmark tabel te zetten. Probleem dus: Dit gaat vreselijk traag... Zou dit misschien sneller op te lossen zijn? Ik weet dat JOINS traag kunnen zijn, en hiermee is dat duidelijk te zien.  Met een LEFT JOIN met een IS NOT NULL op de gekoppelde tabel zeg je eigenlijk 'ik wil alle waarden van de gekoppelde tabellen die bestáán', en dat is dus gewoon een INNER JOIN wat betreft de performance: heb je wel indices op de keys in beide tabellen? (dus in tabel 1 op de primary key, en in tabel 2 op de foreign key) |
#ANONIEM | woensdag 25 juli 2007 @ 12:47 |
tvp |
Geqxon | woensdag 25 juli 2007 @ 13:03 |
quote:Op woensdag 25 juli 2007 12:45 schreef JeRa het volgende:[..] Met een LEFT JOIN met een IS NOT NULL op de gekoppelde tabel zeg je eigenlijk 'ik wil alle waarden van de gekoppelde tabellen die bestáán', en dat is dus gewoon een INNER JOIN  wat betreft de performance: heb je wel indices op de keys in beide tabellen? (dus in tabel 1 op de primary key, en in tabel 2 op de foreign key) Een INNER JOIN is een goede, ik bouw mijn querys altijd met MySQL PHP op waardoor ik nog niet zo "dynamisch" dacht.
Verder heb ik indices op de primary en foreign keys van de tabellen die belangrijk zijn, mede daarom vind ik het vreemd dat het zo traag gaat. Zelf gok ik dat hij alle bookmark-records afgaat, en dat voor elk nieuwsartikel. Iets dat de traagheid prima verklaard. :-)
[ Bericht 1% gewijzigd door Geqxon op 25-07-2007 13:16:39 ] |
JeRa | woensdag 25 juli 2007 @ 13:09 |
@Geqxon
Je kunt altijd nog EXPLAIN gebruiken om erachter te komen wat MySQL intern doet om je query uit te voeren output van beide SELECTs kun je dan vergelijken. |
Geqxon | woensdag 25 juli 2007 @ 13:16 |
quote:Op woensdag 25 juli 2007 13:09 schreef JeRa het volgende:@Geqxon Je kunt altijd nog EXPLAIN gebruiken om erachter te komen wat MySQL intern doet om je query uit te voeren  output van beide SELECTs kun je dan vergelijken. Bedankt, die nemen we mee.  |
wonderer | woensdag 25 juli 2007 @ 16:08 |
quote: quote: Hm, ik had gedacht/gehoopt dat er een handigheidje voor was. Ik meende er iets over gelezen te hebben in de research van de afgelopen weken maar natuurlijk kan ik dat niet meer terugvinden. Dit lijkt me toch niet zo heel prettig voor een query met veel records... 
Nou ja, bedankt  |
Geqxon | woensdag 25 juli 2007 @ 16:34 |
quote:Op woensdag 25 juli 2007 16:08 schreef wonderer het volgende:[..] [..] Hm, ik had gedacht/gehoopt dat er een handigheidje voor was. Ik meende er iets over gelezen te hebben in de research van de afgelopen weken maar natuurlijk kan ik dat niet meer terugvinden. Dit lijkt me toch niet zo heel prettig voor een query met veel records... :{ Nou ja, bedankt ;) 1 2 3 4 5 | SELECT emp_id, lname, fname, job_id, (SELECT COUNT(*) FROM employee e2 WHERE e2.emp_id <= e.emp_id AND e2.job_id = 10) AS rownumber FROM employee e WHERE job_id = 10 ORDER BY emp_id |
bron
Ook een interresante methode :) |
Geqxon | woensdag 25 juli 2007 @ 20:21 |
En net toen ik mijn trage IS NOT NULL wou testen.... gaat het opeens razendsnel! Vreemd, misschien toch een hickup ergens.  |
wonderer | woensdag 25 juli 2007 @ 21:04 |
quote: Daar snap ik geen reet van. Heb nu iets in elkaar geknutseld, kijken of dat werkt. Komt uiteindelijk toch op een while loop uit Dat wou ik juist niet. Nou ja, aan de andere kant is het max aantal records waar hij doorheen moet 200, dat zal niet zoveel geheugen kosten toch? |
Geqxon | woensdag 25 juli 2007 @ 21:30 |
quote:Op woensdag 25 juli 2007 21:04 schreef wonderer het volgende:[..] Daar snap ik geen reet van. Heb nu iets in elkaar geknutseld, kijken of dat werkt. Komt uiteindelijk toch op een while loop uit  Dat wou ik juist niet. Nou ja, aan de andere kant is het max aantal records waar hij doorheen moet 200, dat zal niet zoveel geheugen kosten toch? Je telt simpelweg het aantal records tot en met het record dat jij wilt hebben.  |
wonderer | woensdag 25 juli 2007 @ 21:40 |
quote:Op woensdag 25 juli 2007 21:30 schreef Geqxon het volgende:[..] Je telt simpelweg het aantal records tot en met het record dat jij wilt hebben.  Yeah, zo heb ik het nu. Ach ja, 't was het proberen waard 
Bedankt voor het meedenken en tot de volgende vraag, die ongetwijfeld binnenkort zal komen  |
qu63 | woensdag 25 juli 2007 @ 23:09 |
* qu63 is bezig met sessions, alleen dat gaat niet zo best :')
ik heb gekeken op http://www.phphulp.nl/php/scripts/3/5/ maar zoals ik het nu heb werkt het niet echt:
[login.php]
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 | <?php session_start(); require('sql.php'); if (session_is_registered("sess_loginnaam") && session_is_registered("sess_id")) { header("Location: admin.php"); exit; } else { $user = DB_USER; $pass = DB_PASS; $host = DB_HOST; $dbdb = DB_DATABASE;
// zet het tabel en de volgende pagina $table = "gebruikers"; // nieuws.php veranderen in je eigen volgende pagina $nextpage = "admin.php";
if (!mysql_select_db($dbdb, mysql_connect($host, $user, $pass))) { echo "Connectie met database mislukt."; exit(); }
// check of de user op de 'login' knop heeft gedrukt en of $loginnaam en $paswoord niet leeg zijn if ($HTTP_POST_VARS["loginnaam"] && $HTTP_POST_VARS["paswoord"]) { /* haal login gegevens uit database en check de gegevens met de ingevoerde gegevens */ $HTTP_POST_VARS["paswoord"]=md5($HTTP_POST_VARS["paswoord"]); $sql_db = "SELECT id, loginnaam, paswoord FROM $table WHERE loginnaam = '$HTTP_POST_VARS[loginnaam]' AND paswoord = '$HTTP_POST_VARS[paswoord]'"; $res_db = mysql_query($sql_db);
// check of er een overeenkomst is met ingevoerde en uitgelezen bestanden if (mysql_num_rows($res_db) >= 1) { // zet de values van database in een array $row = mysql_fetch_array($res_db);
// zet de sessions $sess_id = $row[id]; $sess_loginnaam = $row[loginnaam];
// registreer ze session_register($sess_id); session_register($sess_loginnaam); // 3600, session_set_cookie_params(3600); echo "Je bent nu ingelogd. Klik <a href=$nextpage>hier</a> om verder te gaan."; } /* indien er geen overeenkomst is tussen ingevoerde en uitgelezen gegevens */ else { echo "Verkeerde loginnaam of paswoord<p>"; echo "Ga <a href="$PHP_SELF">terug</a> en probeer het opnieuw."; } }
// indien er niet op de 'login' knop is gedrukt
else { // formulier echo "<table border=0 cellspacing=0 cellpadding=5>"; echo "<form method=POST action=$PHP_SELF>";
// loginnaam veld echo "<tr><td>Loginnaam:</td></tr>"; echo "<tr><td><input type=text name=loginnaam></td></tr>";
// space echo "<tr><td> </td></tr>"; // paswoord veld echo "<tr><td>Paswoord:</td></tr>"; echo "<tr><td><input type=password name=paswoord></td></tr>";
// space echo "<tr><td> </td></tr>";
// submit knop echo "<input type=submit name=submit value=Login>"; // sluit form & tabel echo "</form>"; echo "</table>"; } } ?> |
[admin.php]
wat gaat er fout? Hij wil dus mijn login gegevens niet onthouden, waardoor admin.php steeds zegt dat ik niet ingelogd ben..
iemand tips? |
wonderer | woensdag 25 juli 2007 @ 23:19 |
Sowieso... als iemand je sessie hijackt, kan ie zo inloggen als admin. Lijkt me niet zo handig.
(dat is toch zo?) |
SuperRembo | woensdag 25 juli 2007 @ 23:19 |
Ziet eruit als een nogal achterhaald php4.0 of nog ouder scriptje. Ik zou nog ff verder zoeken als ik jou was  |
qu63 | woensdag 25 juli 2007 @ 23:29 |
quote:Op woensdag 25 juli 2007 23:19 schreef SuperRembo het volgende:Ziet eruit als een nogal achterhaald php4.0 of nog ouder scriptje. Ik zou nog ff verder zoeken als ik jou was  dacht ik al ja  die md5 had ik er zelf maar bijgeplakt 
iemand een link met goede tutorials mbt sessions? |
Geqxon | woensdag 25 juli 2007 @ 23:30 |
http://phpfreakz.nl/artikelen.php?aid=10
 |
qu63 | woensdag 25 juli 2007 @ 23:46 |
quote: hmz, dan moet ik wel ff zelf klooien met mysql enzo.. |
WyriHaximus | woensdag 25 juli 2007 @ 23:54 |
quote: Password/Username in je cookie zetten Alles in een door de server schrijf baar bestand opslaan Direct $_POST data een cookie in gooien (zo word het wel erg makkelijk om een session na te maken) .php3 Rechstreeks via post vars in een bestand data kunnen toevoegen
Maar goed leuk voorbeeld als je wilt weten hoe het werkt maar niet als je het veilig wilt doen . Just my 2 cents . |
qu63 | woensdag 25 juli 2007 @ 23:57 |
quote: ken jij betere tutorials? |
Geqxon | donderdag 26 juli 2007 @ 00:00 |
quote: O fuck, nu lees ik het pas.  |
wonderer | donderdag 26 juli 2007 @ 00:04 |
Ik had er eentje van een YAP* site (ik weet niet meer precies welke het is ) die wel goed is, geloof ik.
sessie-id opslaan in sessie/cookie, opslaan in database en koppelen aan IP. Da's redelijk veilig. |
Geqxon | donderdag 26 juli 2007 @ 00:09 |
quote:Op donderdag 26 juli 2007 00:04 schreef wonderer het volgende:Ik had er eentje van een YAP* site (ik weet niet meer precies welke het is  ) die wel goed is, geloof ik. sessie-id opslaan in sessie/cookie, opslaan in database en koppelen aan IP. Da's redelijk veilig. Mijn persoonlijke opinie is dat sessies er enkel zijn voor als het browservenster open staat, en dat deze vervalt zodra de user het browservenster sluit.
Zelf werk ik met een RememberKey. Elke keer als de user een pagina opvraagt, dan krijgt hij een enkele cookie met een unieke string. Deze unieke string sla ik ook in mijn database op, samen met zijn IP-adres.
De user opent mijn pagina weer, klopt aan met de unieke string in zijn cookie. Ik kijk naar het IP-adres, de unieke string van het cookie, zoek het op in mijn database, é voila, daar tover ik een userid vandaan. Inloggen, klaar.  |
WyriHaximus | donderdag 26 juli 2007 @ 00:09 |
quote: Niet uit me hoofd, ben gewend dingen zelf uit te vogelen . quote: quote:Op donderdag 26 juli 2007 00:04 schreef wonderer het volgende:Ik had er eentje van een YAP* site (ik weet niet meer precies welke het is  ) die wel goed is, geloof ik. sessie-id opslaan in sessie/cookie, opslaan in database en koppelen aan IP. Da's redelijk veilig. Als je de link weet te vinden is qu63 erg blij met je denk ik zo . |
qu63 | donderdag 26 juli 2007 @ 00:12 |
quote: ik ook, maar dit lukt nu ff niet  quote: Als je de link weet te vinden is qu63 erg blij met je denk ik zo  .  |
wonderer | donderdag 26 juli 2007 @ 00:20 |
quote:Op donderdag 26 juli 2007 00:09 schreef Geqxon het volgende:[..] Mijn persoonlijke opinie is dat sessies er enkel zijn voor als het browservenster open staat, en dat deze vervalt zodra de user het browservenster sluit. Zelf werk ik met een RememberKey. Elke keer als de user een pagina opvraagt, dan krijgt hij een enkele cookie met een unieke string. Deze unieke string sla ik ook in mijn database op, samen met zijn IP-adres. De user opent mijn pagina weer, klopt aan met de unieke string in zijn cookie. Ik kijk naar het IP-adres, de unieke string van het cookie, zoek het op in mijn database, é voila, daar tover ik een userid vandaan. Inloggen, klaar.  Zo doe ik het ook. Alleen gebruik ik de sessID voor unieke string.
Voordeel hiervan is dat je als admin iemand kan uitloggen (loginID uit database verwijderen) en dat je niet vaker dan een keer kan zijn ingelogd (tenzij je moeilijk gaat doen en de loginID van het ene cookie in een nieuw cookie gaat zetten). |
wonderer | donderdag 26 juli 2007 @ 00:25 |
quote: Volgens mij is ie offline. Het was een Nederlandse site met "yet another PHP ..." Ik weet niet meer wat er op de plek van de puntjes moet. Tutorial? Site? Zoiets. Was volgens mij een .net domain. |
WyriHaximus | donderdag 26 juli 2007 @ 00:28 |
quote:Op donderdag 26 juli 2007 00:25 schreef wonderer het volgende:[..] Volgens mij is ie offline. Het was een Nederlandse site met "yet another PHP ..." Ik weet niet meer wat er op de plek van de puntjes moet. Tutorial? Site? Zoiets. Was volgens mij een .net domain. Dat zullen er best wat zijn die aan die beschrijving voldoen . Archive.org ftw met offline sites ! |
wonderer | donderdag 26 juli 2007 @ 00:38 |
quote:Op donderdag 26 juli 2007 00:28 schreef WyriHaximus het volgende:[..] Dat zullen er best wat zijn die aan die beschrijving voldoen  . Archive.org ftw met offline sites  ! Moet je wel de domeinnaam weten  |
Geqxon | donderdag 26 juli 2007 @ 00:40 |
http://www.google.nl/search?q=yet+another+php+site%3A.nl
 |
wonderer | donderdag 26 juli 2007 @ 00:48 |
Hah! Gevonden: http://www.yapf.net/
http://www.yapf.net/Articles/ArticleView/805
En dat is het artikel. |
Geqxon | donderdag 26 juli 2007 @ 01:05 |
quote:Op donderdag 26 juli 2007 00:20 schreef wonderer het volgende:[..] Zo doe ik het ook. Alleen gebruik ik de sessID voor unieke string. Voordeel hiervan is dat je als admin iemand kan uitloggen (loginID uit database verwijderen) en dat je niet vaker dan een keer kan zijn ingelogd (tenzij je moeilijk gaat doen en de loginID van het ene cookie in een nieuw cookie gaat zetten). Nog wat puntjes die ik expres vergat te melden: Een "Rememberkey" (de unieke string) is maar een week geldig. Bij het aanmelden op de website, via een cookie of het inlogvenster, word je IP-adres in de database opgeslagen. Elke keer bij het openen van een pagina wordt $_SERVER['REMOTE_ADDR'] met het IP-adres uit de database vergelijken. Zo niet > Uitloggen. |
wonderer | donderdag 26 juli 2007 @ 01:07 |
quote:Op donderdag 26 juli 2007 01:05 schreef Geqxon het volgende:[..] Nog wat puntjes die ik expres vergat te melden: Een "Rememberkey" (de unieke string) is maar een week geldig. Bij het aanmelden op de website, via een cookie of het inlogvenster, word je IP-adres in de database opgeslagen. Elke keer bij het openen van een pagina wordt $_SERVER['REMOTE_ADDR'] met het IP-adres uit de database vergelijken. Zo niet > Uitloggen. Hoe doe je dat van die week? |
Geqxon | donderdag 26 juli 2007 @ 01:14 |
quote: Bij het uitgeven van de unieke string naar een cookie hou ik bij wanneer deze cookie uitgegeven / gebruikt is. Als de user een week later met deze cookie aan komt kloppen, dan kijk ik wanneer ik hij voor het laatst gebruikt is, en als dat te lang geleden is: Uitloggen.  |
wonderer | donderdag 26 juli 2007 @ 01:19 |
quote:Op donderdag 26 juli 2007 01:14 schreef Geqxon het volgende:[..] Bij het uitgeven van de unieke string naar een cookie hou ik bij wanneer deze cookie uitgegeven / gebruikt is. Als de user een week later met deze cookie aan komt kloppen, dan kijk ik wanneer ik hij voor het laatst gebruikt is, en als dat te lang geleden is: Uitloggen.  Hoe hou je dat bij dan? Kijk je naar de datum van je cookie of heb je de datum van het moment dat die string is uitgegeven in de database staan?
Je kunt ook gewoon je cookie na een week laten verlopen, toch? |
Geqxon | donderdag 26 juli 2007 @ 01:27 |
quote:Op donderdag 26 juli 2007 01:19 schreef wonderer het volgende:[..] Hoe hou je dat bij dan? Kijk je naar de datum van je cookie of heb je de datum van het moment dat die string is uitgegeven in de database staan? Je kunt ook gewoon je cookie na een week laten verlopen, toch? quote: $sql = " UPDATE users SET RememberIP = '".$_SERVER['REMOTE_ADDR']."', RememberKey = '".$rememberkey."', RememberDate = '".time()."' WHERE ID = '".$user["ID"]."' LIMIT 1"; $result = mysql_query($sql); setcookie("RememberKey", $rememberkey, time()+604800); .
Cookies laten verlopen is extra beveiliging, clientside moet je nooit wat vertrouwen. |
wonderer | donderdag 26 juli 2007 @ 02:00 |
Yeah. Zo heb ik het ook ongeveer. De datum wanneer wordt ingelogd wordt gelogd. Ik doe er alleen vooralsnog niks mee (behalve mensen trimmen die al een maand zijn ingelogd maar de site niet bezocht hebben). |
WyriHaximus | donderdag 26 juli 2007 @ 08:22 |
quote: Kleine bijkomstigheid .quote: Ah net artikel . |
Erik | donderdag 26 juli 2007 @ 10:04 |
Ik zit met een probleem waar ik niet uitkom:
Ik sla de invoerdatum van een factuur op in de database d.m.v. datetime (0000-00-00 00:00:00).
Nu zou ik graag met een query een overzicht maken van alle factuurnummers met als invoerdatum een dag terug, of een week geleden.
Ik heb gezocht en kwam functies tegen zoals DATE_ADD en DATE_SUB maar hiermee krijg ik het niet voor elkaar.
Kan iemand me helpen hiermee? |
WyriHaximus | donderdag 26 juli 2007 @ 10:27 |
quote:Op donderdag 26 juli 2007 10:04 schreef Erik het volgende:Ik zit met een probleem waar ik niet uitkom: Ik sla de invoerdatum van een factuur op in de database d.m.v. datetime (0000-00-00 00:00:00). Nu zou ik graag met een query een overzicht maken van alle factuurnummers met als invoerdatum een dag terug, of een week geleden. Ik heb gezocht en kwam functies tegen zoals DATE_ADD en DATE_SUB maar hiermee krijg ik het niet voor elkaar. Kan iemand me helpen hiermee? Misschien is date iets om naar te kijken? Samen met time() moet dat wel lukken denk ik :).
1 2 3 4 | <?php $day_count = 1; $sql = "SELECT * FROM table WHERE date LIKE '" . date('yadieya',(time() - ((60 * 60 * 24) * $day_count))) . "%'"; ?> |
|
qu63 | donderdag 26 juli 2007 @ 10:42 |
quote: leesvoer!  |
SuperRembo | donderdag 26 juli 2007 @ 10:53 |
quote:Op dinsdag 24 juli 2007 18:43 schreef Thomass het volgende:[..] [ code verwijderd ] och het is zo logisch mensen (gave site heb je trouwens  ) SELECT 'a' + '0x1' geeft toch echt 0 als resultaat in MySQL 5. |
qu63 | donderdag 26 juli 2007 @ 10:59 |
quote: ik snap het wel aardig geloof ik, alleen voorbeelden zeggen mij meestal meer  |
Thomass | donderdag 26 juli 2007 @ 12:25 |
quote: Dat zou zo maar kunnen, maar ik had het over php |
Roonaan | donderdag 26 juli 2007 @ 12:30 |
quote:Op donderdag 26 juli 2007 10:27 schreef WyriHaximus het volgende:[..] Misschien is date iets om naar te kijken? Samen met time() moet dat wel lukken denk ik  . [ code verwijderd ] Of iets als date('Y-m-d h:i:s', strtotime('-7 day')); |
SuperRembo | donderdag 26 juli 2007 @ 13:18 |
quote: Aha. De oorspronkelijke vraag ging over SQL. |
Chandler | donderdag 26 juli 2007 @ 13:56 |
quote: *handschud* dat ondervind ik dus ook... erg vervelend, zou graag begrijpend willen lezen maar veel stukken snap ik niet, zelfs niet na meerdere keren lezen 
Maar gelukkig zijn er nog posters die zonder problemen iets willen uitleggen!
CraZaay Jera SuperRembo en voormalige poster Sop voor al die anderen die ik vergeet |
WyriHaximus | donderdag 26 juli 2007 @ 14:06 |
quote: Kijk eens naar die van phpBB, zit redelijk netjes in elkaar . Komt zo ff link naar de source, upload is wat traag op me werk . http://wyrihaximus.net/en(...)-n-sessions_php.html |
Geqxon | donderdag 26 juli 2007 @ 14:07 |
PHP leren kun je op twee manieren doen. Source-codes lezen of boeken. Beide kan ik aanraden.  |
Qunix | donderdag 26 juli 2007 @ 14:39 |
$result = @mysql_query("INSERT INTO t_nieuws VALUES ('" . $datum . "','" . $titel . "','" . $bericht . "','" . $actief . "','" . $extern . "','" . $intern . "');");
Is daar iets fout aan? Hij voer hem niet uit, ik krijg geen foutmelding. Ook zonder @ voor de mysql tag. |
WyriHaximus | donderdag 26 juli 2007 @ 14:41 |
quote:Op donderdag 26 juli 2007 14:39 schreef Qunix het volgende:$result = @mysql_query("INSERT INTO t_nieuws VALUES ('" . $datum . "','" . $titel . "','" . $bericht . "','" . $actief . "','" . $extern . "','" . $intern . "');"); Is daar iets fout aan? Hij voer hem niet uit, ik krijg geen foutmelding. Zet er eens or die(mysql_error()) achter . OW en haal de @ weg . |
Qunix | donderdag 26 juli 2007 @ 14:44 |
quote: 2007-07-26 14:43:15 wedfrgthuj poiuytre4567890 1 1 0
Geplaatst Nieuwsitem is geplaatst.
Geen foutmelding dus... Dat boven in is wat ingevoerd is. |
wonderer | donderdag 26 juli 2007 @ 14:44 |
Ik wil van PHPBB eigenlijk wel meer weten hoe ze dingen doen. Ik probeer zelf een forum te scripten (als onderdeel van een hele site, netjes geintegreerd) en ik heb af en toe het idee dat ik het wiel opnieuw aan het uitvinden ben 
Maar een bestaand pakket gebruiken werkt ook weer niet echt want ik wil dingen die zij niet ondersteunen (ook niet in MODs) en zelf dingen aanpassen daar is nog veel frustrerender.
Er zijn forumpakketten die bijhouden welke topics je hebt gelezen, hoe vaak je ook in- en uitlogt (dus niet zoals Fok het doet, gebaseerd op je laatste inlogtijd, maar echt of je erop geklikt hebt). Weet iemand hoe dat bijgehouden wordt? Ik kan me amper voorstellen dat er ergens in een tabel wordt bijgehouden met een n-n relatie: user-post/topic.
Iemand een idee? |
Qunix | donderdag 26 juli 2007 @ 14:46 |
quote:Op donderdag 26 juli 2007 14:44 schreef wonderer het volgende:Ik wil van PHPBB eigenlijk wel meer weten hoe ze dingen doen. Ik probeer zelf een forum te scripten (als onderdeel van een hele site, netjes geintegreerd) en ik heb af en toe het idee dat ik het wiel opnieuw aan het uitvinden ben  Maar een bestaand pakket gebruiken werkt ook weer niet echt want ik wil dingen die zij niet ondersteunen (ook niet in MODs) en zelf dingen aanpassen daar is nog veel frustrerender. Er zijn forumpakketten die bijhouden welke topics je hebt gelezen, hoe vaak je ook in- en uitlogt (dus niet zoals Fok het doet, gebaseerd op je laatste inlogtijd, maar echt of je erop geklikt hebt). Weet iemand hoe dat bijgehouden wordt? Ik kan me amper voorstellen dat er ergens in een tabel wordt bijgehouden met een n-n relatie: user-post/topic. Iemand een idee? Volgens mij had DirectTopics dat... www.directtopics.nl En dan de beta v5. |
Geqxon | donderdag 26 juli 2007 @ 14:47 |
quote:Op donderdag 26 juli 2007 14:39 schreef Qunix het volgende:$result = @mysql_query("INSERT INTO t_nieuws VALUES ('" . $datum . "','" . $titel . "','" . $bericht . "','" . $actief . "','" . $extern . "','" . $intern . "');"); Is daar iets fout aan? Hij voer hem niet uit, ik krijg geen foutmelding. Ook zonder @ voor de mysql tag. Ik kan je aanraden dit format te gebruiken:
1 | INSERT INTO tbl_name (a,b,c) VALUES(1,2,3); |
Als je dan ooit een veldnaam aan je tabel toevoegd, dan weet je zeker dat alles nog goed loopt. :) |
WyriHaximus | donderdag 26 juli 2007 @ 14:50 |
quote:Op donderdag 26 juli 2007 14:44 schreef Qunix het volgende:[..] 2007-07-26 14:43:15 wedfrgthuj poiuytre4567890 1 1 0 Geplaatst Nieuwsitem is geplaatst. Geen foutmelding dus... Dat boven in is wat ingevoerd is. Dan gaat de query iig goed .quote:Op donderdag 26 juli 2007 14:44 schreef wonderer het volgende:Ik wil van PHPBB eigenlijk wel meer weten hoe ze dingen doen. Ik probeer zelf een forum te scripten (als onderdeel van een hele site, netjes geintegreerd) en ik heb af en toe het idee dat ik het wiel opnieuw aan het uitvinden ben  Maar een bestaand pakket gebruiken werkt ook weer niet echt want ik wil dingen die zij niet ondersteunen (ook niet in MODs) en zelf dingen aanpassen daar is nog veel frustrerender. Er zijn forumpakketten die bijhouden welke topics je hebt gelezen, hoe vaak je ook in- en uitlogt (dus niet zoals Fok het doet, gebaseerd op je laatste inlogtijd, maar echt of je erop geklikt hebt). Weet iemand hoe dat bijgehouden wordt? Ik kan me amper voorstellen dat er ergens in een tabel wordt bijgehouden met een n-n relatie: user-post/topic. Iemand een idee? Ja ben je ook . Maar goed als een ander wiel niet past onder jouw auto waarom zou je het dan gebruiken .
Yup dat word gewoon in een tabelletje bijgehouden vaak. (Dat het ontzettend groot word is een ander verhaal .)
* WyriHaximus heeft de hele source van phpbb online staan, dus als je wilt, leef je uit http://wyrihaximus.net/en-files/index-d-548-n-phpBB2_0_22.html |
wonderer | donderdag 26 juli 2007 @ 15:25 |
quote:Op donderdag 26 juli 2007 14:50 schreef WyriHaximus het volgende: Ja ben je ook  . Maar goed als een ander wiel niet past onder jouw auto waarom zou je het dan gebruiken  . Da's wel een goeie, ja!quote: Ik kan het me haast niet voorstellen (zo'n grote tabel ),
PHPBB ga ik ook eens een keer bekijken, hoewel ik meer geinteresseerd ben in hoe ze het opslaan in de database. |
WyriHaximus | donderdag 26 juli 2007 @ 15:28 |
quote: Net verzonnen .quote:Op donderdag 26 juli 2007 15:25 schreef wonderer het volgende:[..] Ik kan het me haast niet voorstellen (zo'n grote tabel  ), PHPBB ga ik ook eens een keer bekijken, hoewel ik meer geinteresseerd ben in hoe ze het opslaan in de database. Dat gaat gewoon ook fout na een tijdje als het te groot word. Natuurlijk is een prune functie wel handig . |
Qunix | donderdag 26 juli 2007 @ 15:33 |
quote:Op donderdag 26 juli 2007 14:47 schreef Geqxon het volgende:[..] Ik kan je aanraden dit format te gebruiken: [ code verwijderd ] Als je dan ooit een veldnaam aan je tabel toevoegd, dan weet je zeker dat alles nog goed loopt.  Gedaan zonder id voorin... maar nog doet hij het niet.. Gegevens komen goed door, hij komt in het gebied waar hij het hoort uit te voeren maar alsnog doet hij het niet in de database. |
wonderer | donderdag 26 juli 2007 @ 15:48 |
*probeert left join te snappen*
Serieus, volgens mij heb ik een redacteur nodig. Mijn SQL skills zitten al 8 jaar op hetzelfde niveau Dat kan allemaal veel handiger volgens mij...  |
WyriHaximus | donderdag 26 juli 2007 @ 15:52 |
quote:Op donderdag 26 juli 2007 15:48 schreef wonderer het volgende:*probeert left join te snappen* Serieus, volgens mij heb ik een redacteur nodig. Mijn SQL skills zitten al 8 jaar op hetzelfde niveau  Dat kan allemaal veel handiger volgens mij...  * WyriHaximus pakt de kruip olie alvast
Anyway vertel . Wat snap je niet? |
Geqxon | donderdag 26 juli 2007 @ 15:52 |
quote:Op donderdag 26 juli 2007 15:48 schreef wonderer het volgende:*probeert left join te snappen* Serieus, volgens mij heb ik een redacteur nodig. Mijn SQL skills zitten al 8 jaar op hetzelfde niveau  Dat kan allemaal veel handiger volgens mij...  http://www.w3schools.com/sql/sql_join.asp  |
wonderer | donderdag 26 juli 2007 @ 16:03 |
quote:Op donderdag 26 juli 2007 15:52 schreef WyriHaximus het volgende:[..] * WyriHaximus pakt de kruip olie alvastAnyway vertel  . Wat snap je niet? Vooral wanneer ik het moet gebruiken. De syntax is niet zo heel lastig, maar het nut. En werkt het alleen met twee verschillende tabellen?
Ik heb alle lagen forum (dus categorieen, subfora, startpost en replies) in dezelfde tabel staan en het level van elke entry geeft weer wat het is. Leek me handiger dan vier aparte tabellen met voornamelijk dezelfde velden. Zou ik daar eventueel (als ik erachter kom waar ik het voor kan gebruiken) gebruik kunnen maken van left join?
Dus eigenlijk vraag ik me af: welke situatie zal eerder om een left join vragen, dan bijvoorbeeld twee aparte queries. |
WyriHaximus | donderdag 26 juli 2007 @ 16:07 |
quote:Op donderdag 26 juli 2007 16:03 schreef wonderer het volgende:[..] Vooral wanneer ik het moet gebruiken. De syntax is niet zo heel lastig, maar het nut. En werkt het alleen met twee verschillende tabellen? Ik heb alle lagen forum (dus categorieen, subfora, startpost en replies) in dezelfde tabel staan en het level van elke entry geeft weer wat het is. Leek me handiger dan vier aparte tabellen met voornamelijk dezelfde velden. Zou ik daar eventueel (als ik erachter kom waar ik het voor kan gebruiken) gebruik kunnen maken van left join? Dus eigenlijk vraag ik me af: welke situatie zal eerder om een left join vragen, dan bijvoorbeeld twee aparte queries. In feite can kan oneindig aantal tabellen met left join koppelen . |
wonderer | donderdag 26 juli 2007 @ 16:07 |
quote: Hm.
Dus iets als
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $result1=runquery("SELECT * FROM user_profile WHERE username=".quote_smart($user,$d),$d); $result2=runquery("SELECT * FROM user_data WHERE username=".quote_smart($user,$d),$d); $result3=runquery("SELECT * FROM user_prefs WHERE username=".quote_smart($user,$d),$d); $result4=runquery("SELECT * FROM users WHERE username=".quote_smart($user,$d),$d); $result5=runquery("SELECT * FROM user_extras WHERE username=".quote_smart($user,$d),$d);
$row1=mysql_fetch_array($result1); $row2=mysql_fetch_array($result2); $row3=mysql_fetch_array($result3); $row4=mysql_fetch_array($result4); $row5=mysql_fetch_array($result5); ?> |
zou met een join kunnen? Met een query tegelijk alle noodzakelijke dingen uit meerdere tabellen halen? |
WyriHaximus | donderdag 26 juli 2007 @ 16:08 |
quote:Op donderdag 26 juli 2007 16:07 schreef wonderer het volgende:[..] Hm. Dus iets als [ code verwijderd ] zou met een join kunnen? Met een query tegelijk alle noodzakelijke dingen uit meerdere tabellen halen? Ja. |
qu63 | donderdag 26 juli 2007 @ 16:11 |
quote: hmz, pagina begint met wat php-errors 
verder ziet het wel ok uit  |
Chandler | donderdag 26 juli 2007 @ 16:13 |
Zo ie zo vind ik dat de meeste bulletinboards te veel mogelijkheden hebben. Een standaard forum is bijna niet meer te vinden.
Waar je simpel en alleen kunt registreren, posten enzo. Heb zelf ooit ook een forum geschreven (wie niet?) ennuh moet zeggen dat het niet echt heel moeilijk is hoor. Tenzij je meer wilt dan 'standaard' |
Geqxon | donderdag 26 juli 2007 @ 16:13 |
quote:Op donderdag 26 juli 2007 16:03 schreef wonderer het volgende:[..] Vooral wanneer ik het moet gebruiken. De syntax is niet zo heel lastig, maar het nut. En werkt het alleen met twee verschillende tabellen? Ik heb alle lagen forum (dus categorieen, subfora, startpost en replies) in dezelfde tabel staan en het level van elke entry geeft weer wat het is. Leek me handiger dan vier aparte tabellen met voornamelijk dezelfde velden. Zou ik daar eventueel (als ik erachter kom waar ik het voor kan gebruiken) gebruik kunnen maken van left join? Dus eigenlijk vraag ik me af: welke situatie zal eerder om een left join vragen, dan bijvoorbeeld twee aparte queries. Ik heb hier dus al enkele topics mee bevuild, maar om het dan toch een keertje op te takelen:
In het systeem dat ik aan het bouwen ben kunnen gebruikers een nieuwsartikel bookmarken. Ik plaats dan een record in de bookmark tabel met het userid en het nieuwsartikel-id.
In het nieuwsoverzicht wil ik dat de gebruikers bij elk nieuwsartikel zien of ze deze al gebookmarked hebben of niet. Nu kan ik bij elk nieuwsartikel het in de database opzoeken, maar ik maak gebruik van een left join. Als bij het nieuwsartikel-ID een bookmark is geplaatst (en dat dus in de bookmarktabel staat), dan komt hij er keurig bij te staan, en als die er niet is, staat er NULL.
Zo kan ik bijna de complete pagina in 1 query ophalen.  |
WyriHaximus | donderdag 26 juli 2007 @ 16:13 |
quote: Liep idd ff te kutten ja met de functie die voor de source parsing and highligthing zorgt aangezien de text van de code wat klein is
Thanks ! |
wonderer | donderdag 26 juli 2007 @ 16:14 |
quote: En dat kan ik dan met een enkele fetch_array ophalen? wordt het dan iets van $row["users.last_visit"] en $row["user_data.first_name"]? |
wonderer | donderdag 26 juli 2007 @ 16:16 |
quote:Op donderdag 26 juli 2007 16:13 schreef Chandler het volgende:Zo ie zo vind ik dat de meeste bulletinboards te veel mogelijkheden hebben. Een standaard forum is bijna niet meer te vinden. Waar je simpel en alleen kunt registreren, posten enzo. Heb zelf ooit ook een forum geschreven (wie niet?) ennuh moet zeggen dat het niet echt heel moeilijk is hoor. Tenzij je meer wilt dan 'standaard' Ik wil in zoverre meer dan standaard dat geen enkel bestaand pakket alles heeft Maar dat heeft vooral met de omgeving te maken. Ik heb mijn eigen PB-system, eigen profielen enzo, en dat zit er tegenwoordig allemaal bij, dat hoeft niet.
Maar het gaat best zo en het is leuk om te doen, en ik leer ook steeds wat nieuws. |
wonderer | donderdag 26 juli 2007 @ 16:17 |
quote:Op donderdag 26 juli 2007 16:13 schreef Geqxon het volgende:[..] Ik heb hier dus al enkele topics mee bevuild, maar om het dan toch een keertje op te takelen: In het systeem dat ik aan het bouwen ben kunnen gebruikers een nieuwsartikel bookmarken. Ik plaats dan een record in de bookmark tabel met het userid en het nieuwsartikel-id. In het nieuwsoverzicht wil ik dat de gebruikers bij elk nieuwsartikel zien of ze deze al gebookmarked hebben of niet. Nu kan ik bij elk nieuwsartikel het in de database opzoeken, maar ik maak gebruik van een left join. Als bij het nieuwsartikel-ID een bookmark is geplaatst (en dat dus in de bookmarktabel staat), dan komt hij er keurig bij te staan, en als die er niet is, staat er NULL. Zo kan ik bijna de complete pagina in 1 query ophalen.  Oh damn. Volgens mij moet ik echt alles wat ik tot nu toe heb omgooien 
Het grote nadeel van autodidact zijn, er is niemand die je vertelt dat het ook anders kan  |
Geqxon | donderdag 26 juli 2007 @ 16:18 |
quote:Op donderdag 26 juli 2007 16:14 schreef wonderer het volgende:[..] En dat kan ik dan met een enkele fetch_array ophalen? wordt het dan iets van $row["users.last_visit"] en $row["user_data.first_name"]? Jep, alles wordt in een array gestopt. :)
Mocht je een array door willen kammen:
|
WyriHaximus | donderdag 26 juli 2007 @ 16:19 |
quote:Op donderdag 26 juli 2007 16:14 schreef wonderer het volgende:[..] En dat kan ik dan met een enkele fetch_array ophalen? wordt het dan iets van $row["users.last_visit"] en $row["user_data.first_name"]? Ja, maar je moet wel gaan specificeren welke velden je wilt . En je kunt ook user_data.first_name AS firstname en dan zal die firstname in je $row heten . |
Geqxon | donderdag 26 juli 2007 @ 16:22 |
Hebbes, één van de betere tutorials over joins:
http://www.wellho.net/mou(...)-and-OUTER-JOIN.html |
wonderer | donderdag 26 juli 2007 @ 16:22 |
quote:Op donderdag 26 juli 2007 16:19 schreef WyriHaximus het volgende:[..] Ja, maar je moet wel gaan specificeren welke velden je wilt  . En je kunt ook user_data.first_name AS firstname en dan zal die firstname in je $row heten  . dus users.* werkt niet? |
qu63 | donderdag 26 juli 2007 @ 16:22 |
quote:Op donderdag 26 juli 2007 16:13 schreef WyriHaximus het volgende:[..] Liep idd ff te kutten ja met de functie die voor de source parsing and highligthing zorgt aangezien de text van de code wat klein is dat vond ik ook al ja  quote:Thanks  !  |
WyriHaximus | donderdag 26 juli 2007 @ 16:24 |
quote: Word aan gewerkt .quote: quote: Jawel maar als je 2 keer de zelfde ga je errors krijgen . |
Geqxon | donderdag 26 juli 2007 @ 16:31 |
wonderer, dump eens een lap code waarvan je denkt dat het korter kan.  |
qu63 | donderdag 26 juli 2007 @ 16:36 |
hmz, http://www.w3schools.com/php/php_sessions.asp helpt me wel een beetje verder, maar hoe zorg ik er voor dat ik dezelfde gegevens ook op andere pagina's kan gebruiken? |
wonderer | donderdag 26 juli 2007 @ 16:37 |
quote: You asked for it... :')
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 | <?php function profile_form($user,$element) { global $days, $months;
$d=connectDB(); $result1=runquery("SELECT * FROM user_profile WHERE username=".quote_smart($user,$d),$d); $result2=runquery("SELECT * FROM user_data WHERE username=".quote_smart($user,$d),$d); $result3=runquery("SELECT * FROM user_prefs WHERE username=".quote_smart($user,$d),$d); $result4=runquery("SELECT * FROM users WHERE username=".quote_smart($user,$d),$d); $result5=runquery("SELECT * FROM user_extras WHERE username=".quote_smart($user,$d),$d);
$row1=mysql_fetch_array($result1); $row2=mysql_fetch_array($result2); $row3=mysql_fetch_array($result3); $row4=mysql_fetch_array($result4); $row5=mysql_fetch_array($result5);
$bd=explode("-",$row2["birthday"]); $day=$bd[2]; $month=$bd[1]; $year=$bd[0];
$days=select_list('profileform[user_day]',$day,$days); $months=select_list('profileform[user_month]',$month,$months);
if($row2["user_sex"]=="f"){$sf='checked';} elseif($row2["user_sex"]=="m"){$sm='checked';} elseif($row2["user_sex"]=="t"){$st='checked';}
if($row3["email_public"]=='1'){ $pb=' checked'; } else{ $pv=' checked'; }
if($row3["smilies"]=='1'){ $sb=' checked'; } else{ $sv=' checked'; }
$res=runquery("SELECT * FROM user_avatars WHERE username=".quote_smart($user,$d),$d); while($av=mysql_fetch_array($res)){ $ava=$av["avatar_ID"].'.'.$av["extension"]; if($av["avatar_ID"]==$row2["user_avatar"]){ $checked=' selected'; } else{ $checked=''; } $select .= '<option value="'.$ava.'"'.$checked.'>'.$ava.'</option>'; }
if(mysql_num_rows(runquery("SELECT * FROM user_inventory WHERE item_ID='3' AND username=".quote_smart($user,$d),$d))=='1'){ $fe_custom_color='<select name="profileform[custom_color]" id="kleur" style="background-color:#000000;color:#ffeeee;">'.generate_colors($row5["custom_color"]).'</select> Eigen kleurtje <br />'; } else{ $fe_custom_color='Eigen kleurtje: <span style="color:#'.$row5["custom_color"].'">'.$row5["custom_color"].' (<a href="shop.php">aanpassen</a>)</span><br />'; } if(mysql_num_rows(runquery("SELECT * FROM user_inventory WHERE item_ID='4' AND username=".quote_smart($user,$d),$d))=='1'){ $fe_custom_tag='<input type="text" class="text" name="profileform[custom_tag]"> Eigen tag <br />'; } else{ $fe_custom_tag='Eigen tag: '.$row5["custom_tag"].' (<a href="shop.php">aanpassen</a>)<br />'; } if(mysql_num_rows(runquery("SELECT * FROM user_inventory WHERE item_ID='7' AND username=".quote_smart($user,$d),$d))=='1'){ $fe_custom_sig='In je handtekening mogen plaatjes van maximaal 400 pixels breed en 60 pixels hoog. Het totaal aantal tekens mag de 250 niet overschrijden, inclusief BBCode. Op de inhoud zijn de algemene voorwaarden van toepassing. <br />'; $fe_custom_sig.='<textarea name="profileform[custom_sig]" style="width:285px;height:60px;" class="sig">'.stripslashes($row5["custom_sig"]).'</textarea>'; } else{ $fe_custom_sig='Je hebt geen handtekening. Ga naar de <a href="shop.php">shop</a> om deze mogelijkheid te benutten.<br />'; } if(mysql_num_rows(runquery("SELECT * FROM user_inventory WHERE item_ID='6' AND username=".quote_smart($user,$d),$d))=='1'){ $change_name='1'; }
if($row2["user_alias"]==$user || $row2["user_alias"]==''){ $fe_alias='<input type="text" class="text" name="profileform[user_alias]" value="'.$user.'"> Chatnaam <br />'; } elseif($change_name=='1'){ $fe_alias='<input type="text" class="text" name="profileform[user_alias]" value="'.$row2["user_alias"].'"> Chatnaam <br />'; } else{ $fe_alias=format_username($user).' (Chatnaam <a href="">veranderen</a>)<br />'; }
$fe_avatar='<select class="actielijst" name="profileform[user_avatar]"><option value="">Geen avatar</option> '.$select.'</select> <a href="members.php?c=avatars">Upload nieuwe avatar</a><br />';
$fe_color='<select name="profileform[user_color]" id="kleur" style="background-color:#000000;color:#ffeeee;">'.generate_colors($row2["user_color"]).'</select> Chatkleur <br />';
$fe_bio='Vertel hier iets over jezelf. Geen chatlogs, geen ASCII geknutsel, geen verhalen, gedichten, songteksten etc.<br />'; $fe_bio.=show_toolbar('user_bio'); $fe_bio.='<textarea id="user_bio" class="user_bio" name="profileform[user_bio]">'.stripslashes($row1["user_bio"]).'</textarea>'; $fe_bio.='<script>write_toolbar('user_bio');</script>';
$fe_homepage='<input type="text" class="text" name="profileform[user_page]" value="'.$row1["user_page"].'"> URL van je homepage <br />'; $fe_msn='<input type="text" class="text" name="profileform[user_msn]" value="'.$row1["user_msn"].'"> Je MSN-adres <br />'; $fe_wp='<input type="text" class="text" name="profileform[user_whatpulse]" value="'.$row1["user_whatpulse"].'"> Whatpulse username <br />'; $fe_email='<input type="text" class="text" name="profileform[email]" value="'.$row4["email"].'"> E-mailadres<br />';
$fe_first_name='<input type="text" class="text" name="profileform[first_name]" value="'.$row2["first_name"].'"> Voornaam<br />'; $fe_last_name='<input type="text" class="text" name="profileform[last_name]" value="'.$row2["last_name"].'"> Achternaam<br />'; $fe_location='<input type="text" class="text" name="profileform[location]" value="'.$row2["location"].'"> Woonplaats<br />'; $fe_country='<input type="text" class="text" name="profileform[country]" value="'.$row2["country"].'"> Land<br />';
$fe_birthday=$days.' - '.$months.' - <input type="text" class="text" size="4" maxlength="4" name=profileform[user_year]" value="'.$year.'"><br />'; $fe_sex='<input type="radio" name="profileform[user_sex]" value="m" '.$sm.'> Jongen <input type="radio" name="profileform[user_sex]" value="f" '.$sf.'> Meisje<br /><input type="radio" name="profileform[user_sex]" value="t" '.$st.' style="display:none;">';
$fe_prefs=' <table class="prefs"> <tr><td>Email-adres</td> <td><input type="radio" value="1" name="profileform[email_public]"'.$pb.'> Openbaar</td> <td><input type="radio" value="0" name="profileform[email_public]"'.$pv.'> Privé</td></tr> <tr><td>Smilies</td> <td><input type="radio" value="1" name="profileform[smilies]"'.$sb.'> Aan</td> <td><input type="radio" value="0" name="profileform[smilies]"'.$sv.'> Uit</td></tr> </table>';
$formheader='<form class="profile_form" method="post" action="?c=submit_profile">'; $submit='<input type="hidden" name="profileform[username]" value="'.$user.'"><input type="submit" class="submit" name="submit_profile" value="opslaan" accesskey="s">'; $formfooter='</form>';
$link='<a href="?c=profile&user='.$user.'">Bekijk je profiel</a>';
switch($element){ case '1': #bio $form=$formheader.$fe_bio.$submit.$formfooter; break; case '2': #contact $form=$formheader.$fe_homepage.$fe_msn.$fe_wp.$fe_email.$submit.$formfooter; break; case '3': #persoonlijk $form=$formheader.$fe_first_name.$fe_last_name.$fe_location.$fe_country.$submit.$formfooter; break; case '4': #geb. datum/sexe $form=$formheader.$fe_birthday.$fe_sex.$submit.$formfooter; break; case '5': #chatstuff $form=$formheader.$fe_alias.$fe_avatar.$fe_color.$submit.$formfooter; break; default: $form=$formheader.'<div class="prof_left"> <fieldset class="prof"><legend>Contactgegevens</legend>'.$fe_homepage.$fe_msn.$fe_wp.$fe_email.'</fieldset> <fieldset class="prof"><legend>Persoonlijk</legend>'.$fe_first_name.$fe_last_name.$fe_location.$fe_country.$fe_birthday.$fe_sex.'</fieldset> <fieldset class="prof"><legend>Chatstuff</legend>'.$fe_alias.$fe_avatar.$fe_color.'</fieldset> <fieldset class="prof"><legend>Instellingen</legend>'.$fe_prefs.'</fieldset> <fieldset class="prof"><legend>Extra's</legend>'.$fe_custom_tag.$fe_custom_color.$fe_custom_sig.'</fieldset> '.$submit.'</div> <div class="prof_right"><fieldset class="prof"><legend>Biografie</legend>'.$fe_bio.'</fieldset></div>'.$formfooter; break; } return $form; } ?> |
Dat bouwt het formulier op voor een gebruikersprofiel. De switch is voor stukjes formulier: als je op je eigen profiel zit, zie je per gedeelte (persoonlijke info, biografie etc een linkje "bewerk" dat in een popupje het betreffende stukje form laat zien zodat je het makkelijk en snel kan aanpassen).
Ik heb alle userdata in verschillende tabellen gestopt vanwege het overzicht. Dit leek me makkelijker dan een grote tabel met wel 50 fields. Als ik nu bijvoorbeeld alleen een voornaam nodig heb, hoef ik niet in een hele grote tabel te gaan zoeken (hoewel, met een SELECT first_name zou dat ook niet veel uitmaken? Is het misschien toch slimmer om alles in een tabel te proppen?). |
wonderer | donderdag 26 juli 2007 @ 16:38 |
Dit voelt echt net als iemand een verhaal laten lezen Ben echt bang dat er zometeen iemand komt die me keihard uitlacht omdat de code zo knullig is 
Met dat verschil dat ik weet dat ik goed verhalen kan schrijven, maar dat mijn codeer-niveau nog in groep drie zit  |
wonderer | donderdag 26 juli 2007 @ 16:40 |
Deze is ook wel leuk trouwens:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php function breadcrumb($id){ $d=connectDB(); $r1=runquery("SELECT forum_subject, parent_ID FROM forum WHERE ID='".$id."'",$d); $pid=mysql_result($r1,0,"parent_ID"); $topic=mysql_result($r1,0,"forum_subject"); $r2=runquery("SELECT forum_subject, parent_ID FROM forum WHERE ID='".$pid."'",$d); $pid2=mysql_result($r2,0,"parent_ID"); $subforum=mysql_result($r2,0,"forum_subject"); $r3=runquery("SELECT forum_subject FROM forum WHERE ID='".$pid2."'",$d); $forum=mysql_result($r3,0,"forum_subject");
$crumb='<a href="forum.php">Griezelforum</a> > '.$forum.': <a href="forum.php?c=forum&id='.$pid.'">'.$subforum.'</a> > '.stripslashes($topic);
return $crumb; } ?> |
Breadcrumb voor forum->subforum->topic |
WyriHaximus | donderdag 26 juli 2007 @ 16:43 |
quote:Op donderdag 26 juli 2007 16:38 schreef wonderer het volgende:Dit voelt echt net als iemand een verhaal laten lezen  Ben echt bang dat er zometeen iemand komt die me keihard uitlacht omdat de code zo knullig is  Met dat verschil dat ik weet dat ik goed verhalen kan schrijven, maar dat mijn codeer-niveau nog in groep drie zit  Dat blijf je altijd houden . Maar de meeste hier zullen best willen helpen . |
qu63 | donderdag 26 juli 2007 @ 16:48 |
quote: opgelöst!  |
Geqxon | donderdag 26 juli 2007 @ 16:49 |
quote: Pagina 1:
Pagina 2:
1 2 3 4 5 6 | <?php session_start();
echo $_SESSION["Voornaam"]; // Dieter ?> |
|
Geqxon | donderdag 26 juli 2007 @ 18:08 |
quote:Op donderdag 26 juli 2007 16:40 schreef wonderer het volgende:Deze is ook wel leuk trouwens: [ code verwijderd ] Breadcrumb voor forum->subforum->topic 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php function breadcrumb($id){ $d = connectDB();
$result = runquery("SELECT forum_subject, parent_ID FROM forum WHERE ID = '" . mysql_real_escape_string($id) . "'"); $topic = mysql_fetch_assoc($result); $result = runquery("SELECT forum_ID, forum_subject, parent_ID FROM forum WHERE ID = '" . $topic['parent_ID'] . "'"); $subforum = mysql_fetch_assoc($result); $result = runquery("SELECT forum_subject FROM forum WHERE ID = '" . $subforum['parent_ID'] . "'"); $forum = mysql_fetch_assoc($result); $breadcrumb_html = '<a href="forum.php">Griezelforum</a> » ' . $forum['forum_subject'] . ': '; $breadcrumb_html .= '<a href="forum.php?c=forum&id='.$subforum['forum_ID'].'">'.$subforum['forum_subject'].'</a> » '; $breadcrumb_html .= stripslashes($topic['forum_subject']); return $breadcrumb_html; } ?> |
Qua structuur iets overzichtelijker gemaakt. Je hebt nu drie arrays, een array met alle data van het topic, een array met alle data van het subforum, en een array met alle data van het forum zelf. En daar bouw je dan vervolgens je breadcrumb mee op.
'forum_ID' heb ik zelf verzonnen, daar zul je mogelijk nog wat aan moeten doen.
En als je het een heel stuk korter wilt hebben:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php function breadcrumb($id){ $d = connectDB();
$topic = mysql_fetch_assoc(runquery("SELECT forum_subject, parent_ID FROM forum WHERE ID = '" . mysql_real_escape_string($id) . "'",$d)); $subforum = mysql_fetch_assoc(runquery("SELECT forum_ID, forum_subject, parent_ID FROM forum WHERE ID = '" . $topic['parent_ID'] . "'",$d)); $forum = mysql_fetch_assoc(runquery("SELECT forum_subject FROM forum WHERE ID = '" . $subforum['parent_ID'] . "'",$d)); $breadcrumb_html = '<a href="forum.php">Griezelforum</a> » ' . $forum['forum_subject'] . ': '; $breadcrumb_html .= '<a href="forum.php?c=forum&id='.$subforum['forum_ID'].'">'.$subforum['forum_subject'].'</a> » '; $breadcrumb_html .= stripslashes($topic['forum_subject']); return $breadcrumb_html; } ?> |
Aan jou de keus wat je netter vind. :) |
super-muffin | donderdag 26 juli 2007 @ 18:11 |
ik vind de html opbouwen met sprintf() netter dan dit.
1 2 3 4 | <?php $format = '<a href="forum.php">Griezelforum</a> » %s <a href="forum.php?c=forum&id=%s">&s</a> » %s'; $breakcrumb_html = sprintf($format, $forum['forum_subject'], $subforum['forum_ID'], $subforum['forum_subject'], stripslashes($topic['forum_subject']);); ?> |
[ Bericht 40% gewijzigd door super-muffin op 26-07-2007 18:16:29 ] |
Geqxon | donderdag 26 juli 2007 @ 18:26 |
quote: Dat is inderdaad een stuk netter.  |
wonderer | donderdag 26 juli 2007 @ 19:43 |
quote: Waarom? In principe doe je toch hetzelfde? Bij een sprintf moet ik steeds weer opnieuw nadenken wat waar precies komt, op de "normale" manier gaat dat vanzelf 
Geq, ik zie dat je steeds "$result" gebruikt. Geeft dat niet? Dat ie hem overschrijft? Of is dat juist handiger omdat hij dan steeds maar een result in het geheugen heeft zitten in plaats van drie verschillende? |
ralfie | donderdag 26 juli 2007 @ 20:08 |
ik gebruik het liefste haakjes om mijn strings op te bouwen:
"Hallo {$gebruiker}, je hebt als naam opgegeven {$_GET['naam']}<br/>";
sprintf vind ik een beetje overdreven om zoiets op te bouwen, maarja, whatever floats your boat... |
Geqxon | donderdag 26 juli 2007 @ 20:12 |
quote:Op donderdag 26 juli 2007 19:43 schreef wonderer het volgende:[..] Geq, ik zie dat je steeds "$result" gebruikt. Geeft dat niet? Dat ie hem overschrijft? Of is dat juist handiger omdat hij dan steeds maar een result in het geheugen heeft zitten in plaats van drie verschillende? Je hebt het hier maar 1 keer nodig, dus vandaar dat ik altijd dezelfde gebruik. Dat is wat netter dan $result_topic en $result_subforum.  |
wonderer | donderdag 26 juli 2007 @ 20:14 |
Oh, dat kan ook? Ik was al trots dat ik tegenwoordig single quotes gebruik voor strings en de variabelen er buiten laat  |
Farenji | donderdag 26 juli 2007 @ 20:16 |
quote: HTML in je code is verre van net. Het hoort er niet. Daar zijn template engines voor. |
wonderer | donderdag 26 juli 2007 @ 20:16 |
quote:Op donderdag 26 juli 2007 20:12 schreef Geqxon het volgende:[..] Je hebt het hier maar 1 keer nodig, dus vandaar dat ik altijd dezelfde gebruik. Dat is wat netter dan $result_topic en $result_subforum.  Hm, maar qua performance maakt het niet uit? Ik meen me te herinneren dat ik geleerd heb dat je steeds een nieuwe variabele moet gebruiken. Maar dat is alweer zo lang geleden, misschien heb ik het mezelf wel aangeleerd omdat het ergens een keer fout ging of zo.
Ik heb in 1999 een LAMP cursus gevolgd, daarna stage gelopen bij een internetbedrijfje waar ik alle begin leerde en daarna heb ik daar nog een tijdje gewerkt met een OO systeem dat ik niet zelf gebouwd had.
Dus ik modder al ruim zes jaar maar een beetje aan met vallen opstaan Het werkt allemaal best maar het kan dus een stuk beter. Eigenlijk heb ik iemand nodig die samen met me door alle code gaat en hier en daar wat verbetert of me laat zien hoe het ook/beter kan. |
super-muffin | donderdag 26 juli 2007 @ 20:18 |
quote:Op donderdag 26 juli 2007 20:08 schreef ralfie het volgende:ik gebruik het liefste haakjes om mijn strings op te bouwen: "Hallo {$gebruiker}, je hebt als naam opgegeven {$_GET['naam']}<br/>"; sprintf vind ik een beetje overdreven om zoiets op te bouwen, maarja, whatever floats your boat... Voor zo iets als dit is sprintf misschien wel overdreven, maar over het algemeen is het wel iets netter. Ook wel iets waar ik waarde aan hecht in mijn code.  |
Geqxon | donderdag 26 juli 2007 @ 20:54 |
quote:Op donderdag 26 juli 2007 20:16 schreef Farenji het volgende:[..] HTML in je code is verre van net. Het hoort er niet. Daar zijn template engines voor. Ook voor een functie die puur gebaseerd voor het outputten van HTML bestaat?  |
SuperRembo | donderdag 26 juli 2007 @ 20:56 |
quote:Op donderdag 26 juli 2007 20:16 schreef Farenji het volgende:HTML in je code is verre van net. Het hoort er niet. Daar zijn template engines voor. PHP is een prima template engine  |
JeRa | donderdag 26 juli 2007 @ 21:08 |
quote: Het idee van een template engine die gebruik maakt van een sandbox om templates te renderen vind ik toch wat prettiger dan zelf in de gaten te houden welke variabelen er allemaal in het presentatiedeel van m'n applicatie terecht komen (white listing versus black listing van variabelen).  |
wonderer | donderdag 26 juli 2007 @ 21:24 |
Als ik met serialize() iets in een tabel wil opslaan, moet dat veld dan binary safe zijn of kan dat ook gewoon text zijn? |
SuperRembo | donderdag 26 juli 2007 @ 21:28 |
quote:Op donderdag 26 juli 2007 21:08 schreef JeRa het volgende:[..] Het idee van een template engine die gebruik maakt van een sandbox om templates te renderen vind ik toch wat prettiger dan zelf in de gaten te houden welke variabelen er allemaal in het presentatiedeel van m'n applicatie terecht komen (white listing versus black listing van variabelen).  Ja, een template engin kan best handig zijn, afhankelijk van de grootte van het project. Het was vooral een opmerking om aan te geven dat een functie die wat html terug geeft niet per definitie "niet netjes" is. |
JeRa | donderdag 26 juli 2007 @ 21:34 |
quote:Op donderdag 26 juli 2007 21:24 schreef wonderer het volgende:Als ik met serialize() iets in een tabel wil opslaan, moet dat veld dan binary safe zijn of kan dat ook gewoon text zijn? Dat ligt eraan wat je serializet. Alle taalelementen van PHP zijn zonder meer in een ASCI-compatible veld op te slaan, maar als jij variabelen met binary data gaat serializen kan het een heel goed idee zijn om een binary safe veld te gebruiken. Sterker nog, ik raad je aan om een binary veld te gebruiken, puur omdat je verder geen character sets oid nodig hebt voor het resultaat van een serialize()  |
wonderer | donderdag 26 juli 2007 @ 21:38 |
quote:Op donderdag 26 juli 2007 21:34 schreef JeRa het volgende:[..] Dat ligt eraan wat je serializet. Alle taalelementen van PHP zijn zonder meer in een ASCI-compatible veld op te slaan, maar als jij variabelen met binary data gaat serializen kan het een heel goed idee zijn om een binary safe veld te gebruiken. Sterker nog, ik raad je aan om een binary veld te gebruiken, puur omdat je verder geen character sets oid nodig hebt voor het resultaat van een serialize()  Waarschijnlijk een stel arrays (ik sla nu arrays als string met delimiters op, dan is een ge-serialize-de toch wel een stukkie sneller, in plaats van explode dit en join dat enzo) maar als het verder niet uitmaakt, kan ik het net zo goed in binary doen. Met de hand aanpassen in bijv. phpMyAdmin schiet toch niet op. |
wonderer | donderdag 26 juli 2007 @ 21:39 |
Goh, ik leer zoveel vandaag 
Nou nog allemaal toepassen  |
slakkie | donderdag 26 juli 2007 @ 21:40 |
quote:Op donderdag 26 juli 2007 21:08 schreef JeRa het volgende:[..] Het idee van een template engine die gebruik maakt van een sandbox om templates te renderen vind ik toch wat prettiger dan zelf in de gaten te houden welke variabelen er allemaal in het presentatiedeel van m'n applicatie terecht komen (white listing versus black listing van variabelen).  Hoe moet ik dat black/whitelisten van variablen zien? Zit me af te vragen hoe je zoiets zou doen. Of bedoel je dat je de values van de variablen sanitized? |
JeRa | donderdag 26 juli 2007 @ 21:43 |
quote:Op donderdag 26 juli 2007 21:40 schreef slakkie het volgende:[..] Hoe moet ik dat black/whitelisten van variablen zien? Zit me af te vragen hoe je zoiets zou doen. Of bedoel je dat je de values van de variablen sanitized? De scheiding tussen je model in PHP en je view (óók in PHP) vervaagt doordat je voor een goede overgang tussen de twee moet zorgen. Zo kan het dus het geval zijn dat er een losse variabele die je in je model hebt gebruikt terugvindt in je view et vice versa. Door een template engine te gebruiken (zoals Smarty) begin je, waar je het view dan ook aanspreekt in je model, met een lege sandbox waarin je variabelen kunt toevoegen. Die sandbox kun je vervolgens ook netjes debuggen. Ik zie zoiets als preventief fouten voorkomen  |
WyriHaximus | donderdag 26 juli 2007 @ 22:10 |
quote:Op donderdag 26 juli 2007 21:43 schreef JeRa het volgende:[..] De scheiding tussen je model in PHP en je view (óók in PHP) vervaagt doordat je voor een goede overgang tussen de twee moet zorgen. Zo kan het dus het geval zijn dat er een losse variabele die je in je model hebt gebruikt terugvindt in je view et vice versa. Door een template engine te gebruiken (zoals Smarty) begin je, waar je het view dan ook aanspreekt in je model, met een lege sandbox waarin je variabelen kunt toevoegen. Die sandbox kun je vervolgens ook netjes debuggen. Ik zie zoiets als preventief fouten voorkomen  Precies . Template engines besparen je zo veel werk. o.a. omdat je heel erg makkelijk designs en indelingen kunt veranderen etc zonder je code te moeten aanpassen . |
Geqxon | donderdag 26 juli 2007 @ 22:15 |
Ik werk met hobbyprojectjes niet met templates. Meestal gewoon eerst de data uit MySQL ophalen, dan HTML (buiten de PHP tags), en waar nodig bijvoorbeeld:
1 2 3 4 5 | <?php <select name="user_timezone"> echo drawDropdownItems($timezone_array,$user['Timezone']); </select> ?> |
Voor kleinschalige projecten toch niet al te fout? |
wonderer | donderdag 26 juli 2007 @ 22:22 |
quote:Op donderdag 26 juli 2007 22:10 schreef WyriHaximus het volgende:[..] Precies  . Template engines besparen je zo veel werk. o.a. omdat je heel erg makkelijk designs en indelingen kunt veranderen etc zonder je code te moeten aanpassen  . Daar hebben ze toch CSS voor uitgevonden? 
template engines doe ik wel voor versie 4 van deze site. Zoiets als geqxon doe ik ook regelmatig, maar alleen als ik die bepaalde dropdown vaker dan eenmaal nodig heb. |
Farenji | donderdag 26 juli 2007 @ 23:09 |
quote: Meer is het eigenlijk ook niet he.  |
WyriHaximus | donderdag 26 juli 2007 @ 23:11 |
quote:Op donderdag 26 juli 2007 22:22 schreef wonderer het volgende:[..] Daar hebben ze toch CSS voor uitgevonden?  template engines doe ik wel voor versie 4 van deze site. Zoiets als geqxon doe ik ook regelmatig, maar alleen als ik die bepaalde dropdown vaker dan eenmaal nodig heb. Niet alles kan met CSS . Maar als je echt dat kant op wil dat je document alleen maar data bestaat en design in andere dan moet je eens naar XML en XLST (ofzo) kijken . Mooi voorbeeldje daar van is me wow char in de armory van blizzard: http://armory.wow-europe.com/character-sheet.xml?r=Skullcrusher&n=Wyrihaximus |
ursel | donderdag 26 juli 2007 @ 23:19 |
quote: Begreep juist tijdens mijn cursus dat XSLT het 2 jaar geleden leek te worden, maar dat het niet on voldoen aan de verwachtingen en dat Smarty die plaats nu heeft ingenomen. In het boek staat dan nog wel XSLT beschreven, maar is uit de cursus zelf geschrapt en vervangen door Smarty.. 
XML daarentegen is er nog wel..  |
WyriHaximus | donderdag 26 juli 2007 @ 23:42 |
quote:Op donderdag 26 juli 2007 23:19 schreef ursel het volgende:[..] Begreep juist tijdens mijn cursus dat XSLT het 2 jaar geleden leek te worden, maar dat het niet on voldoen aan de verwachtingen en dat Smarty die plaats nu heeft ingenomen. In het boek staat dan nog wel XSLT beschreven, maar is uit de cursus zelf geschrapt en vervangen door Smarty..  XML daarentegen is er nog wel..  Tsja XSLT is gewoon nog traag. Smarty (en andere template engines) is stuk rapper is mijn ervaring . Daar tegenover staat is dat XSLT gewoon erg tof is . |
wonderer | vrijdag 27 juli 2007 @ 01:03 |
XML heb ik op school nog gehad.
Maar 't is allemaal niet zo'n halszaak. Ik maak dingen vooral voor mezelf. Als ik echt ingewikkelde applicaties voor iemand anders zou maken en daar geld mee zou verdienen, zou het wat anders zijn. Met dit soort hobbydingen leer ik weer veel bij dat ik later kan gebruiken, maar om er echt mijn werk van te maken kom ik toch een en ander tekort, helaas. |
Farenji | vrijdag 27 juli 2007 @ 10:18 |
Het maakt ook weinig uit als je gewoon dingen voor jezelf maakt idd. Maar zodra je applicaties groter worden dan een paar scriptjes die bij elkaar horen dan wordt het iets anders dan "het hoort zo" maar dan wordt het "als je het niet doet kom je uiteindelijk zwaar in de shit". Ik heb een keer een grote applicatie moeten onderhouden waarvan de php vol stond met (non-css) html incl presentatietags. En toen ging het bedrijf over op een nieuwe huisstijl dus moest alles omgegooid worden. Dat was echt kut met peren vooral omdat het toen al veel te laat was om alsnog op een template engine over te gaan. |
WyriHaximus | vrijdag 27 juli 2007 @ 12:24 |
quote:Op vrijdag 27 juli 2007 10:18 schreef Farenji het volgende:Het maakt ook weinig uit als je gewoon dingen voor jezelf maakt idd. Maar zodra je applicaties groter worden dan een paar scriptjes die bij elkaar horen dan wordt het iets anders dan "het hoort zo" maar dan wordt het "als je het niet doet kom je uiteindelijk zwaar in de shit". Ik heb een keer een grote applicatie moeten onderhouden waarvan de php vol stond met (non-css) html incl presentatietags. En toen ging het bedrijf over op een nieuwe huisstijl dus moest alles omgegooid worden. Dat was echt kut met peren vooral omdat het toen al veel te laat was om alsnog op een template engine over te gaan. En alleen daarom is het een goed idee om een template engine te gebruiken . Ook voor kleine projectjes is het erg handig, tenzij je met 1 pagina scripts werkt . |
Xcalibur | vrijdag 27 juli 2007 @ 15:00 |
Hoe goed zijn jullie met mod_rewrite? 
Ik probeer namelijk een of meer characters in m'n URL te replacen voordat ik em ga rewriten ( / (slash) door _ (underscore). Maar daar lijkt mod_rewrite niet zo op gebouwd te zijn. Nu is het mogelijk met rewriteMap, maar daar heb ik weer een apart txt-bestandje voor nodig, en dat vind ik niet mooi 
Kan dit makkelijker? Bij voorkeur in m'n .htaccess  |
#ANONIEM | vrijdag 27 juli 2007 @ 15:19 |
quote:Op vrijdag 27 juli 2007 10:18 schreef Farenji het volgende:Het maakt ook weinig uit als je gewoon dingen voor jezelf maakt idd. Maar zodra je applicaties groter worden dan een paar scriptjes die bij elkaar horen dan wordt het iets anders dan "het hoort zo" maar dan wordt het "als je het niet doet kom je uiteindelijk zwaar in de shit". Ik heb een keer een grote applicatie moeten onderhouden waarvan de php vol stond met (non-css) html incl presentatietags. En toen ging het bedrijf over op een nieuwe huisstijl dus moest alles omgegooid worden. Dat was echt kut met peren vooral omdat het toen al veel te laat was om alsnog op een template engine over te gaan. Herkenbaar. Sindsdien gebruik ik ten allen tijde mijn eigen template engine, en nog belangrijker: ik zet ALLES, maar dan ook ALLES wat enigzins configureerbaar is in constanten. |
WyriHaximus | vrijdag 27 juli 2007 @ 15:22 |
quote:Op vrijdag 27 juli 2007 15:00 schreef Xcalibur het volgende:Hoe goed zijn jullie met mod_rewrite?  Ik probeer namelijk een of meer characters in m'n URL te replacen voordat ik em ga rewriten ( / (slash) door _ (underscore). Maar daar lijkt mod_rewrite niet zo op gebouwd te zijn. Nu is het mogelijk met rewriteMap, maar daar heb ik weer een apart txt-bestandje voor nodig, en dat vind ik niet mooi  Kan dit makkelijker? Bij voorkeur in m'n .htaccess  Heb je voorbeeldje van wat naar wat je wilt hebben?  |
Geqxon | vrijdag 27 juli 2007 @ 15:51 |
quote:Op vrijdag 27 juli 2007 15:19 schreef Scorpie het volgende:[..] Herkenbaar. Sindsdien gebruik ik ten allen tijde mijn eigen template engine, en nog belangrijker: ik zet ALLES, maar dan ook ALLES wat enigzins configureerbaar is in constanten. Daar heb ik een settings-tabel in de database voor. Waarbij alles via getSetting($instelling) op te vragen is.  |
Xcalibur | vrijdag 27 juli 2007 @ 15:52 |
Gewoon alle slashes vervangen door underscores :)
1 | category-1/subcategory-2/subsubcategorie-3 -> category-1_subcategory-2_subsubcategorie-3 |
De verdere mod_rewrite afhandeling werkt prima... |
Xcalibur | vrijdag 27 juli 2007 @ 15:53 |
quote:Op vrijdag 27 juli 2007 15:51 schreef Geqxon het volgende:Daar heb ik een settings-tabel in de database voor. Waarbij alles via getSetting($instelling) op te vragen is.  Ik gebruik liever een configfile, omdat je niet altijd een database hebt, en de configvariabelen over het algemeen niet veranderen  |
Geqxon | vrijdag 27 juli 2007 @ 16:08 |
quote:Op vrijdag 27 juli 2007 15:53 schreef Xcalibur het volgende:[..] Ik gebruik liever een configfile, omdat je niet altijd een database hebt, en de configvariabelen over het algemeen niet veranderen  Mwa, userfriendly wil ik het niet noemen, om over de snelheid maar te zwijgen. Het is toch niet zoveel werk om een formulier in elkaar te knutsellen waar gebruikers deze opties kunnen wijzigen?  |
WyriHaximus | vrijdag 27 juli 2007 @ 16:23 |
quote:Op vrijdag 27 juli 2007 15:52 schreef Xcalibur het volgende:Gewoon alle slashes vervangen door underscores  [ code verwijderd ] De verdere mod_rewrite afhandeling werkt prima... Hmmm dit moet nog voor mod_rewrite gebeuren of tijdens PHP of nog voor mod_rewrite, want dat was me nog niet helemaal duidelijk . * WyriHaximus is niet echt wakker vandaag |
Farenji | vrijdag 27 juli 2007 @ 16:56 |
quote:Op vrijdag 27 juli 2007 15:53 schreef Xcalibur het volgende:[..] Ik gebruik liever een configfile, omdat je niet altijd een database hebt, en de configvariabelen over het algemeen niet veranderen  Ik gebruik het allebei, configfile voor de statische instellingen zoals database gegevens, en een tabel in de db voor de dynamische instellingen die aangepast moeten kunnen worden. En beide lees ik in in een Config class wat een singleton is die overal aan te roepen is. |
Geqxon | vrijdag 27 juli 2007 @ 16:59 |
quote:Op vrijdag 27 juli 2007 16:56 schreef Farenji het volgende:[..] Ik gebruik het allebei, configfile voor de statische instellingen zoals database gegevens, en een tabel in de db voor de dynamische instellingen die aangepast moeten kunnen worden. En beide lees ik in in een Config class wat een singleton is die overal aan te roepen is. Een config class om de configuratie op te vragen? Voor iets dat in vijf regeltjes code kan?  |
Farenji | vrijdag 27 juli 2007 @ 17:00 |
quote:Op vrijdag 27 juli 2007 16:08 schreef Geqxon het volgende:[..] Mwa, userfriendly wil ik het niet noemen, om over de snelheid maar te zwijgen. Het is toch niet zoveel werk om een formulier in elkaar te knutsellen waar gebruikers deze opties kunnen wijzigen?  Een configfile lees je natuurlijk maar 1 keer in, bij initialisatie, en dan stop je alles in een object waarna je het gewoon uit het geheugen trekt. Dat is echt geen performanceissue... van sommige configvars wil je toch niet dat users ze kunnen zien laat staan wijzigen. |
Farenji | vrijdag 27 juli 2007 @ 17:05 |
quote:Op vrijdag 27 juli 2007 16:59 schreef Geqxon het volgende:[..] Een config class om de configuratie op te vragen? Voor iets dat in vijf regeltjes code kan?  Die config class hoeft ook niet groot te zijn. Maar je wil het wel scheiden in een object, in een aparte namespace dus, met een uniforme interface om vars uit te lezen, en dynamische vars aan te passen. Ik spreek je nog wel eens als je echt een applicatie van formaat hebt gemaakt.  |
Geqxon | vrijdag 27 juli 2007 @ 17:07 |
Ik zit ook maar te grappen. 
Ben ik trouwens de enige die binnen PHP niet Object Oriented werkt? Ik vind het, mede door het 'loosely typed' karakter van PHP, en het feit dat PHP met een totaal andere gedachtengang ontwikkeld is, nog niet handig werken. |
JeRa | vrijdag 27 juli 2007 @ 17:09 |
quote: Dat kan net zo userfriendly zijn als via een database, het ligt maar net aan de vereisten.  quote:om over de snelheid maar te zwijgen. Wat? Ga jij nu beweren dat een include trager is dan alle opties via een functie uit de database te trekken? |
WyriHaximus | vrijdag 27 juli 2007 @ 17:12 |
quote:Op vrijdag 27 juli 2007 16:59 schreef Geqxon het volgende:[..] Een config class om de configuratie op te vragen? Voor iets dat in vijf regeltjes code kan?  1 config class in 5 regels .
|
Geqxon | vrijdag 27 juli 2007 @ 17:13 |
quote:Op vrijdag 27 juli 2007 17:09 schreef JeRa het volgende:Wat?  Ga jij nu beweren dat een include trager is dan alle opties via een functie uit de database te trekken? Elke keer hardeschijfactiviteit versus elke keer databaseactiviteit? Ik gok dat een database sneller werkt. Gok ik. |
WyriHaximus | vrijdag 27 juli 2007 @ 17:18 |
quote:Op vrijdag 27 juli 2007 17:13 schreef Geqxon het volgende:[..] Elke keer hardeschijfactiviteit versus elke keer databaseactiviteit? Ik gok dat een database sneller werkt. Gok ik. I/O actie: Hit naar het bestand Bestand in 1 ruk uitlezen
SQL: Connectie openen naar de server Autenticeren Database selecteren Query opdracht geven - Hit naar de tabel bestanden, mits het niet nog in de cache staat - Door het bestand gaan zoeken - Results samen stellen en dusnoods sorteren Results van de database ontvagen
Weet niet zeker maar gok dat database toch trager is... |
JeRa | vrijdag 27 juli 2007 @ 17:19 |
quote:Op vrijdag 27 juli 2007 17:13 schreef Geqxon het volgende:[..] Elke keer hardeschijfactiviteit versus elke keer databaseactiviteit? Ik gok dat een database sneller werkt. Gok ik. Net zoals bij een database heb je maar één keer schijfoverhead doordat daarna de block cache de read kan opvangen. Verder heb je deze additionele overhead bij de database: 1) Het openen van de verbinding (TCP is trager dan een lokale socket, bv) 2) Het parsen van de query 3) Het plannen van de query 4) Het checken van de rechten op de betrokken relations (database, tabellen, kolommen) 5) De resultset teruggeven en intern door PHP naar de juiste variabelen laten omzetten |
mschol | vrijdag 27 juli 2007 @ 17:20 |
quote:Op vrijdag 27 juli 2007 17:18 schreef WyriHaximus het volgende:[..] I/O actie: Hit naar het bestand Bestand in 1 ruk uitlezen
SQL: Connectie openen naar de server Autenticeren Database selecteren Query opdracht geven - Hit naar de tabel bestanden - Door het bestand gaan zoeken - Results samen stellen en dusnoods sorteren Results van de database ontvagen
Weet niet zeker maar gok dat database toch trager is... bij je I/O actie vergeet je alleen dat dit door de HD moet gebeuren, een database actie zal in het geheugen van de server gebeuren (die ,na een tijdje, ook wel weer I/O heeft maar toch) |
WyriHaximus | vrijdag 27 juli 2007 @ 17:23 |
quote:Op vrijdag 27 juli 2007 17:20 schreef mschol het volgende:[..] bij je I/O actie vergeet je alleen dat dit door de HD moet gebeuren, een database actie zal in het geheugen van de server gebeuren (die ,na een tijdje, ook wel weer I/O heeft maar toch) Heb het er al bij gezet . (Database stuk dan.) Daarnaast cached je HDD ook het 1 en ander . |
JeRa | vrijdag 27 juli 2007 @ 17:23 |
quote:Op vrijdag 27 juli 2007 17:20 schreef mschol het volgende:[..] bij je I/O actie vergeet je alleen dat dit door de HD moet gebeuren, een database actie zal in het geheugen van de server gebeuren (die ,na een tijdje, ook wel weer I/O heeft maar toch) Die database zal in eerste instantie toch echt iets van de harde schijf moeten halen, en na de eerste I/O-actie bij een include zit de boel in de block cache  |
super-muffin | vrijdag 27 juli 2007 @ 17:44 |
quote:Op vrijdag 27 juli 2007 15:51 schreef Geqxon het volgende:[..] Daar heb ik een settings-tabel in de database voor. Waarbij alles via getSetting($instelling) op te vragen is.  En je database settings, waar sla je die op? 
Ik heb een Settings klasse die gebruik ik zo:
1 2 3 4 5 6 7 | <?php $settings = Settings::getInstance(); $settings->import('config.ini');
$hostname = $settings->get('database.hostname'); $username = $settings->get('database.username'); ?> |
En die config.ini kan ik weer wijzigen via een formulier. Werkt handig. |
Geqxon | vrijdag 27 juli 2007 @ 22:15 |
Om weer op het OO puntje uit te komen: super-muffin hierboven gebruik bijvoorbeeld een setting-classe. Maar is je complete systeem / website dan ook Object Oriented? |
wonderer | zaterdag 28 juli 2007 @ 05:25 |
Misschien vindt iemand het leuk om hier mee te spelen, ik krijg mijn brein er niet omheen gevouwen op dit moment.
Ik heb alle menu-items in een tabel zitten. Het veld link_parent_id vertelt van welke sectie het een onderdeel is (de bovenste laag is natuurlijk alleen parent, dus daar is ie leeg) en het veld link_level geeft aan hoe diep ie gaat.
Nu wil ik een recursieve functie die de tabel uitleest en elk menu-item op de juiste plek zet, en met de juiste stijl zodat het visueel ook in orde komt (<li class="menu_level_'.$link_level.'"> voldoet daar prima);
Ik weet niet hoeveel levels er zijn (nou ja, op dit moment wel, en ik denk ook niet dat het echt gaat veranderen, maar je weet nooit en ik wil geen while-loopjes hoeven blijven toevoegen). Hij moet zichzelf dus aanroepen tot alles klaar is.
Iemand enig idee? Twee functies, denk ik? Eentje voor de buitenkant ($menu='<ul>'; $menu.=make_inner_menu($level); $menu.='</ul>';
En dan make_inner_menu($level) { select from menu where level = $level; while(result){ $menu.=style linkje naam; $menu.=make_inner_menu($level+1); } return $menu;
?
Of wordt dat een oneindige loop? Of is het anderszins nogal dom om het zo te doen? |
Thomass | zaterdag 28 juli 2007 @ 09:37 |
quote: ok dit is misschien geen antwoord op je vraag maar mijn mening, waarom zou je een verbinding opzetten met je database voor een paar menuitems O_O, zo kan het ook?
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 | <?php $menu = array("item1" => array ("subitem1" => "linkje", "subitem2" => "linkje", "subitem3" => array("subsubitem1" => "linkje", "subsubitem2" => "linkje" ) ), "item2" => "linkje", "item3" => array ("subitem1" => "linkje", "subitem2" => "enzovoort" ) );
function bouwmenutje(array $menu) { $result = ""; foreach($menu as $item => $submenu) if(is_array($submenu)) $result .= "$item" . bouwmenutje($submenu); else $result .= "<a href=$submenu>$item</a>"; return $result; } ?> |
|
Xcalibur | zaterdag 28 juli 2007 @ 10:19 |
quote:Op vrijdag 27 juli 2007 16:23 schreef WyriHaximus het volgende:Hmmm dit moet nog voor mod_rewrite gebeuren of tijdens PHP of nog voor mod_rewrite, want dat was me nog niet helemaal duidelijk  . * WyriHaximus is niet echt wakker vandaag Op het moment doe ik het in PHP, maar dat vind ik niet zo'n mooie oplossing.... Het is de bedoeling dat het in de .htaccess, vóór de rest van de mod_rewrite gaat gebeuren 
En één optie om het te doen is met RewriteMap, maar daar heb je weer een extra txt-bestandje voor nodig, en daar zit ik ook niet op te wachten  |
SuperRembo | zaterdag 28 juli 2007 @ 10:43 |
quote: Dan moet je dus voor elk sub-menu een query uitvoeren. Ik denk dat het een stuk sneller is om alle menu items in één keer te lezen (gesorteerd op level). Met php loop je door de resultaten heen en bouw je een array van array's op (van hoog naar laag). Die plak je dan recursief aan elkaar tot het uiteindelijke menu in html. |
super-muffin | zaterdag 28 juli 2007 @ 11:17 |
quote:Op vrijdag 27 juli 2007 22:15 schreef Geqxon het volgende:Om weer op het OO puntje uit te komen: super-muffin hierboven gebruik bijvoorbeeld een setting-classe. Maar is je complete systeem / website dan ook Object Oriented? Jup. Alhoewel ik het systeem wel ga herschrijven voor een groot deel, maar dan ook op een OO manier.  |
Scriptha | zaterdag 28 juli 2007 @ 12:17 |
Ik wil XML naar SQL converteren. De meeste dingen lukken wel, maar er is een deel dat er zo uitziet:
<item id='blabla'> <inside> <item id='pa'> <item id='po'> <item id='pe'> <inside> <item id='at'> </inside> <item id='it'> </inside>
Dit moet in een db die er zo uitziet:
pid | sid | item Pid is parent id, en sid is het itemnummertje.
Dus met het voorbeeld moet het er zo uitzien:
pid | sid | item 1 | 102 | blabla blabla | 103 | pa blabla | 104 | po blabla | 105 | pe pe | 106 | at blabla | 107 | it
Ik heb geen idee hoe ik dit moet doen, want die <inside>'s gaan heel lang door.. Dingen met 1 value als <acc number='101'> lukken nog wel, maar dit niet Ideeen?
[ Bericht 90% gewijzigd door Scriptha op 28-07-2007 12:29:25 ] |
Farenji | zaterdag 28 juli 2007 @ 13:05 |
Je moet de hele lijst in een loop afgaan en in een variabele bijhouden in welke scoop je zit, maw binnen welk <inside> blok.. Aangezien die blokken meerdere niveaus diep kunnen gaan kun je daar het beste een array voor gebruiken waar je bij een <inside> een element aan toevoegt en bij </inside> deze weer verwijdert. In pseudocode:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var $scope = new Array() var $lastid = "" $scope[0] = ... # volgummer of initiele waarde
for each $elem in $elems { if $elem == <item> { insert into table (pid, item) values ($scope[0], $elem->id) $lastid = $elem->id } else if $elem == <inside> { unshift $scope, $lastid # voeg nieuw element op pos 0 toe } else if $elem == </inside> { shift $scope # verwijder element op pos 0 } } |
[ Bericht 3% gewijzigd door Farenji op 28-07-2007 13:10:55 ] |
WyriHaximus | zaterdag 28 juli 2007 @ 15:29 |
quote:Op vrijdag 27 juli 2007 22:15 schreef Geqxon het volgende:Om weer op het OO puntje uit te komen: super-muffin hierboven gebruik bijvoorbeeld een setting-classe. Maar is je complete systeem / website dan ook Object Oriented? In mijn situatie is alles OO . Maakt het makkelijker en overzichtelijker om bepaalde blokken die iets doen (bijvoorbeeld mijn wow screenshots weergeven op verschillende manieren) appart te houden .quote:Op zaterdag 28 juli 2007 10:19 schreef Xcalibur het volgende:[..] Op het moment doe ik het in PHP, maar dat vind ik niet zo'n mooie oplossing.... Het is de bedoeling dat het in de .htaccess, vóór de rest van de mod_rewrite gaat gebeuren  En één optie om het te doen is met RewriteMap, maar daar heb je weer een extra txt-bestandje voor nodig, en daar zit ik ook niet op te wachten  Ik zou het dan gewoon bij PHP houden . Doe het zelf ook zo en bevalt prima . RewriteMap kan ook maar dan heb je je extra bestandje . |
Xcalibur | zaterdag 28 juli 2007 @ 16:30 |
ja, maar dat was nou net niet m'n vraag  |
WyriHaximus | zaterdag 28 juli 2007 @ 16:46 |
quote: Je kunt het trouwens toch ook met mod_rewrite doen gewoon? Alleen moet je dan tot vrij diep gaan genereren . (ff voorbeeldje maken) |
qu63 | zaterdag 28 juli 2007 @ 16:56 |
quote:Op zaterdag 28 juli 2007 16:46 schreef WyriHaximus het volgende:[..] Je kunt het trouwens toch ook met mod_rewrite doen gewoon? Alleen moet je dan tot vrij diep gaan genereren  . (ff voorbeeldje maken) deze pagina doet het neit echt trouwens bij je  |
WyriHaximus | zaterdag 28 juli 2007 @ 17:00 |
quote: Heb me forum verplaatst . En was dat ff vergeten ja . |
Xcalibur | zaterdag 28 juli 2007 @ 17:23 |
quote:Op zaterdag 28 juli 2007 16:46 schreef WyriHaximus het volgende:Je kunt het trouwens toch ook met mod_rewrite doen gewoon? Alleen moet je dan tot vrij diep gaan genereren  . (ff voorbeeldje maken) Ja, dat deed ik eerst, tot 3 niveau's.... tot ik tegen niveau 4 aanliep, etc. En ik ben nou met een webshop bezig waar het aantal niveau's in principe onbeperkt is... en dat wil ik niet gaan voorbereiden  |
WyriHaximus | zaterdag 28 juli 2007 @ 17:38 |
quote:Op zaterdag 28 juli 2007 17:23 schreef Xcalibur het volgende:[..] Ja, dat deed ik eerst, tot 3 niveau's.... tot ik tegen niveau 4 aanliep, etc. En ik ben nou met een webshop bezig waar het aantal niveau's in principe onbeperkt is... en dat wil ik niet gaan voorbereiden  Het is toch niet zo bar moeilijk om een scripte te maken wat het tot op 500 niveau's genereerd voor je?  |
qu63 | zaterdag 28 juli 2007 @ 17:38 |
quote: loopt nog steeds niet hoor  |
WyriHaximus | zaterdag 28 juli 2007 @ 17:46 |
quote: Nu wel . |
qu63 | zaterdag 28 juli 2007 @ 17:48 |
quote:  |
qu63 | zaterdag 28 juli 2007 @ 17:51 |
quote: of toch niet: Fatal error: Call to undefined function: sql_addslashes() in /home/wyrihaxi/domains/wyrihaximus.net/public_html/fok/wow/do_edit.php on line 42 |
Roonaan | zaterdag 28 juli 2007 @ 18:05 |
Als het het via xml_parse doet en een event-driven afhandeling opzet, dan kan je relatief eenvoudig een stack met parent id's bijhouden toch, middels de open_element en close_element functies. |
WyriHaximus | zaterdag 28 juli 2007 @ 18:09 |
quote:Op zaterdag 28 juli 2007 17:51 schreef qu63 het volgende:[..] of toch niet: Fatal error: Call to undefined function: sql_addslashes() in /home/wyrihaxi/domains/wyrihaximus.net/public_html/fok/wow/do_edit.php on line 42 Dankje , gefixed nu . Nu ff wat onderhouds scripts draaien . |
Geqxon | zaterdag 28 juli 2007 @ 19:12 |
quote:Op zaterdag 28 juli 2007 15:29 schreef WyriHaximus het volgende:[..] In mijn situatie is alles OO  . Maakt het makkelijker en overzichtelijker om bepaalde blokken die iets doen (bijvoorbeeld mijn wow screenshots weergeven op verschillende manieren) appart te houden  . Dus om maar een voorbeeld van deze pagina te geven, elke smilie is een object, elke post is een object, en elk stukje GUI is een object? En elke keer als je de pagina opvraagt bouw je dat compleet op, waarbij de data uit een ODBMS komt? |
WyriHaximus | zaterdag 28 juli 2007 @ 19:32 |
quote:Op zaterdag 28 juli 2007 19:12 schreef Geqxon het volgende:[..] Dus om maar een voorbeeld van deze pagina te geven, elke smilie is een object, elke post is een object, en elk stukje GUI is een object? En elke keer als je de pagina opvraagt bouw je dat compleet op, waarbij de data uit een ODBMS komt? Zo OO nog niet. Ga wel die kant op . Heb gewoon een set classes die alles afhandelen (templates, database connectivitie, cache, configuratie). Dus om ff het zelfde voorbeeld te pakken: de viewtopic class haalt de data uit de database met een query via de database class haalt het bericht door de bbcode class (voor de bbcode en smilies) waarna het het door stuurt naar de template class voor de weer gave. Op die manier OO . |
Farenji | zaterdag 28 juli 2007 @ 19:35 |
quote:Op zaterdag 28 juli 2007 19:12 schreef Geqxon het volgende:[..] Dus om maar een voorbeeld van deze pagina te geven, elke smilie is een object, elke post is een object, en elk stukje GUI is een object? En elke keer als je de pagina opvraagt bouw je dat compleet op, waarbij de data uit een ODBMS komt? Nee, zo moet je het niet zien.
Een OO applicatie bestaat idealiter uit 3 delen: model, view en controller.
Het model is alle data voor je applicatie, inclusief de interface om die data op te halen en te manipuleren. Je hebt daar bijv een Database class om te praten met je database. Het model zijn ook je objecten die opgebouwd worden uit / gebruik maken van die data, zoals bijv je Settings class, een Page classe, een User class etc.
De view is alles wat de gebruiker ziet, de output van je applicatie. Voor webapplicaties is dat meestal de template engine. De view is "dom", in de zin dat het gewoon weergeeft wat ie aangereikt krijgt en geen weet heeft van applicatielogica. Het is gewoon een object waar je variabelen aan hangt, en deze worden op de juiste plek in de html weergegeven.
Die applicatielogica zit in het controller gedeelte. Deze maakt de objecten uit het model aan, doet er het een en ander mee, en geeft ze door aan de view die het netjes op het scherm tovert. Alle gebruikersinvoer komt weer bij de controller terecht die er weer op reageert. Het is zeg maar de tussenpersoon tussen gebruiker en data.
OO programmeren betekent niet dat je over *alles* als objecten gaat denken, in het geval van Fok is elke post gewoon een grote string die in de database staat. De smilies zijn geen aparte objecten maar gewoon deel van die string. Het is meer dat je je applicatie opdeelt in de essentiele bouwblokken, voor deze onderdelen definieer je eigenschappen en methodes. Hoe je dat doet is aan jou maar de keuze van je objectstructuur is essentieel voor de mogelijkheden van je applicatie dus daar kun je beter goed over nadenken. Daarna maak je een controller laag die de objecten die je hebt gedefinieerd tot leven te wekken, ze met elkaar kan laten samenwerken en er uiteindelijk een template object van bakt wat je aan de gebruiker toont. |
Geqxon | zaterdag 28 juli 2007 @ 19:47 |
quote:Op zaterdag 28 juli 2007 19:35 schreef Farenji het volgende:[..] Nee, zo moet je het niet zien. Een OO applicatie bestaat idealiter uit 3 delen: model, view en controller. Het model is alle data voor je applicatie, inclusief de interface om die data op te halen en te manipuleren. Je hebt daar bijv een Database class om te praten met je database. Het model zijn ook je objecten die opgebouwd worden uit / gebruik maken van die data, zoals bijv je Settings class, een Page classe, een User class etc. De view is alles wat de gebruiker ziet, de output van je applicatie. Voor webapplicaties is dat meestal de template engine. De view is "dom", in de zin dat het gewoon weergeeft wat ie aangereikt krijgt en geen weet heeft van applicatielogica. Het is gewoon een object waar je variabelen aan hangt, en deze worden op de juiste plek in de html weergegeven. Die applicatielogica zit in het controller gedeelte. Deze maakt de objecten uit het model aan, doet er het een en ander mee, en geeft ze door aan de view die het netjes op het scherm tovert. Alle gebruikersinvoer komt weer bij de controller terecht die er weer op reageert. Het is zeg maar de tussenpersoon tussen gebruiker en data. OO programmeren betekent niet dat je over *alles* als objecten gaat denken, in het geval van Fok is elke post gewoon een grote string die in de database staat. De smilies zijn geen aparte objecten maar gewoon deel van die string. Het is meer dat je je applicatie opdeelt in de essentiele bouwblokken, voor deze onderdelen definieer je eigenschappen en methodes. Hoe je dat doet is aan jou maar de keuze van je objectstructuur is essentieel voor de mogelijkheden van je applicatie dus daar kun je beter goed over nadenken. Daarna maak je een controller laag die de objecten die je hebt gedefinieerd tot leven te wekken, ze met elkaar kan laten samenwerken en er uiteindelijk een template object van bakt wat je aan de gebruiker toont. MVC of niet, dan programmeer je in mijn opinie niet OO. Zelf heb ik diverse projecten met Java gedaan, waar basicly alles een object is. In Java zouden de smilies die op het moment onder mijn reply-message staan een object zijn, evenals het Preview en Invoeren knopje. Allemaal deel van de UI-laag.
In that case geef blijf ik wat PHP betreft liever bij "normaal" programmeren, aangezien ik liever geen mix van diverse programmeermanieren gebruik. Een databaseclass is leuk, als de rest van je software ook uit classes bestaat, en je niet stiekem ergens sjoemelt en je direct iets uit de database naar de gebruiker print. 
Om een voorbeeld te geven, ik heb zoals elke student een bankproject moeten maken. En dan is dus wel alles een object. Geld overboeken doe je niet door in de database te klooien, nee, dat doe je een een Transactie-object aan te maken, die zelf de verantwoordelijkheid van de transactie draagt, en de rest van de transactie regelt. |
Farenji | zaterdag 28 juli 2007 @ 20:06 |
quote:Op zaterdag 28 juli 2007 19:47 schreef Geqxon het volgende:[..] MVC of niet, dan programmeer je in mijn opinie niet OO. Zelf heb ik diverse projecten met Java gedaan, waar basicly alles een object is. In Java zouden de smilies die op het moment onder mijn reply-message staan een object zijn, evenals het Preview en Invoeren knopje. Allemaal deel van de UI-laag. Soms is dat handig. Soms absoluut niet. Als fok zo was opgebouwd dan hadden ze er wel 2 keer zoveel servers voor mogen inzetten want dat genereert een enorme hoeveelheid overbodige overhead. In Java wordt het OO denken heel ver doorgevoerd, zelfs een string is een object, in veel andere talen is een string gewoon een rijtje karakters afgesloten door een null character. Je bent als ontwerper vrij om te bepalen in hoeverre je de OO gedachte doorvoert. Als je het te ver doorvoert kan je helemaal verzuipen in de objecten, doe je het niet ver genoeg dan krijg je ongestructureerde en moeilijker onderhoudbare code. Als je een gezicht beschrijft aan de hand van de kenmerken van de onderdelen zoals ogen neus en mond etc dan is dat duidelijker en zinvoller dan wanneer je een gezicht beschrijft aan de hand van de onderlinge samenhang van alle lichaamscellen in het gezicht.quote:In that case geef blijf ik wat PHP betreft liever bij "normaal" programmeren, aangezien ik liever geen mix van diverse programmeermanieren gebruik. Een databaseclass is leuk, als de rest van je software ook uit classes bestaat, en je niet stiekem ergens sjoemelt en je direct iets uit de database naar de gebruiker print.  Het voordeel van een database class is dat je een uniforme interface hebt die verschillende backends kan hebben. Je kan er een wrapper van maken en hiermee je applicatie onafhankelijk van de database te maken, zo kan je het zo doen dat ie zowel met MySQL als MSSQL als met XML files kan werken. Natuurlijk kun je altijd die class omzeilen maar daarmee doe je idd het idee achter OO teniet.quote:Om een voorbeeld te geven, ik heb zoals elke student een bankproject moeten maken. En dan is dus wel alles een object. Geld overboeken doe je niet door in de database te klooien, nee, dat doe je een een Transactie-object aan te maken, die zelf de verantwoordelijkheid van de transactie draagt, en de rest van de transactie regelt. Inderdaad, objecten met elk hun eigen verantwoordelijkheden en taken, netjes afgescheiden van de andere objecten. Maar het is zinloos om alle data tot in de oneindigheid verder op te delen in objecten. Ergens moeten de objecten obhouden met object te zijn en gewoon een brok data worden. |
Geqxon | zaterdag 28 juli 2007 @ 20:49 |
quote:Op zaterdag 28 juli 2007 20:06 schreef Farenji het volgende:Het voordeel van een database class is dat je een uniforme interface hebt die verschillende backends kan hebben. Je kan er een wrapper van maken en hiermee je applicatie onafhankelijk van de database te maken, zo kan je het zo doen dat ie zowel met MySQL als MSSQL als met XML files kan werken. Natuurlijk kun je altijd die class omzeilen maar daarmee doe je idd het idee achter OO teniet. Om puur hier op in te gaan: Is dat wel mogelijk? Is er dan niet voor elke compliceerde query een aparte functie (/method) nodig? Stel dat ik een query van een regel of zeven gebruik om de data op te halen, dan moet deze complete query in de class staan, onder een aparte functie, neem ik aan? |
WyriHaximus | zaterdag 28 juli 2007 @ 21:14 |
quote:Op zaterdag 28 juli 2007 20:49 schreef Geqxon het volgende:[..] Om puur hier op in te gaan: Is dat wel mogelijk? Is er dan niet voor elke compliceerde query een aparte functie (/method) nodig? Stel dat ik een query van een regel of zeven gebruik om de data op te halen, dan moet deze complete query in de class staan, onder een aparte functie, neem ik aan? Ja, want je geeft de SQL query aan de DBclass, deze voert hem uit en geeft de resultaten terug. Maar je kunt ook iets zoals propel gebruiken . |
Geqxon | zaterdag 28 juli 2007 @ 21:34 |
quote:Op zaterdag 28 juli 2007 21:14 schreef WyriHaximus het volgende:[..] Ja, want je geeft de SQL query aan de DBclass, deze voert hem uit en geeft de resultaten terug. Maar je kunt ook iets zoals propel gebruiken  . Maar wat als je dus de SQL-query aan de DBclass doorgeeft, en je plotseling op XML-files over wilt stappen, of een totaal andere manier van storage? Meer op die manier.  |
WyriHaximus | zaterdag 28 juli 2007 @ 21:41 |
quote:Op zaterdag 28 juli 2007 21:34 schreef Geqxon het volgende:[..] Maar wat als je dus de SQL-query aan de DBclass doorgeeft, en je plotseling op XML-files over wilt stappen, of een totaal andere manier van storage? Meer op die manier.  Nee dat gaat dan niet, naar allerlei SQL servers wel maar XML niet tenzij je zelf storage engine er voor gaat bouwen . Maar Propel wat ik noemde maakt je hele database beschikbaar als object . |
CraZaay | zondag 29 juli 2007 @ 10:55 |
quote:Op zaterdag 28 juli 2007 20:49 schreef Geqxon het volgende:[..] Om puur hier op in te gaan: Is dat wel mogelijk? Is er dan niet voor elke compliceerde query een aparte functie (/method) nodig? Stel dat ik een query van een regel of zeven gebruik om de data op te halen, dan moet deze complete query in de class staan, onder een aparte functie, neem ik aan? Welcome to "models"  |
Geqxon | zondag 29 juli 2007 @ 12:36 |
Mmmm. Blijft complicated, OO in PHP. Persoonlijk zou ik het pas willen gebruiken als ik dan ook gelijk 100% op OO over zou kunnen gaan, echter zou dat veel overhead en veel extra werk betekenen. For now blijf ik liever bij de standaard manier van programmeren, alles met functies, niks redundant. Is toch niks mis mee? Of kom ik daar de komende 2 jaar niet meer mee door? |
Farenji | zondag 29 juli 2007 @ 13:03 |
We hebben heel lang zonder OO gezeten dus 2 jaar trek je ook wel, maar als je grote complexere applicaties maakt zal je merken dat het veel overzichtelijker en veel gestructureerder werkt als je te maken hebt met gedefinieerde objecten met methodes en eigenschappen, die ook van elkaar kunnen overerven, dan wanneer je allemaal ondefineerbare brokken code en ongedefineerde databrokken hebt zonder expliciete samenhang.
Voorbeeld: ik heb een CMS en een van de objecten van dat cms is het Page object wat ik zelf heb gedefinieerd. ALs ik een pagina wil tonen maak ik een nieuw Page object aan, bijv "var $page = Page->newByID(12)" en roep ik Page->outputHTML() aan waarna hij getoond wordt in de browser. Als ik een pagina wil aanpassen doe ik Page->setProperty( key => value ) en daarna Page->save() waardoor het in de DB wordt opgeslagen.
Ik kan ook meerdere instanties aanmaken van de Page class, ik kan met enkele regels code een array van honderden pagina's instantieren en deze allemaal makkelijk beheren en manipuleren dmv de object methodes. Ik weet namelijk altijd met wat voor object ik aan het werken ben, het is niet zomaar willekeurige data.
Ik kan een nieuw object definieren, bijv Chapter, dat alle methodes en eigenschappen overerft van Page maar daarnaast eigen functies heeft. Ik hoef dan alleen de afwijkende dingen te definieren, alle standaardfuncties heb ik al want die neemt ie automagisch over van de parent Page class.
Probeer zoiets eens met strict procedureel programmeren. Als dat al lukt gaat je dat sowieso vele malen meer code opleveren, maar waarschijnlijker is dat je compleet de weg en het overzicht kwijtraakt en met een niet goed werkende applicatie zit die niet meer te debuggen of onderhouden is. |
Chandler | maandag 30 juli 2007 @ 13:31 |
Korte vraag; ik heb een database waar ik alleen de items van vandaag wil halen.
Ik gebruik datetime en dit is een voorbeeld query
select * from tabel where date = '" . date("Y-m-d") . "'"
Wrom gaat het fout?  |
WyriHaximus | maandag 30 juli 2007 @ 13:41 |
Wat voor veld is date? En volgens mij is date ook een reserved word dus probeer eens `date` ipv `date` . |
Chandler | maandag 30 juli 2007 @ 14:03 |
nee date werkt gewoon hoor.
Maar af en toe ben ik nogal blind :X
1 | date_format(date, '%Y-%m-%d') |
Opgelost :P (slotje :X) |
slacker_nl | maandag 30 juli 2007 @ 14:19 |
quote:Op zaterdag 28 juli 2007 19:35 schreef Farenji het volgende:Een OO applicatie bestaat idealiter uit 3 delen: model, view en controller. Dat is niet geheel waar. Je hebt verschillende design patterns, allemaal met een zeker doel/uitgangspunt. OO zegt niet dat je een MVC model moet implementeren.
MVC is vooral om de business logic te scheiden van de hoe de data wordt gepresenteerd op je scherm door het gebruik van de controller.
Ikzelf heb dit boek ooit aangeschafd: http://en.wikipedia.org/wiki/Design_Patterns
Zie verder ook: http://en.wikipedia.org/wiki/Object_oriented en http://en.wikipedia.org/wiki/Model-view-controller |
#ANONIEM | maandag 30 juli 2007 @ 14:35 |
quote: |
Farenji | maandag 30 juli 2007 @ 16:08 |
Voor webapplicaties is het MVC model wel *het* model dacht ik zo. Ik zou zo gauw geen ander model kunnen noemen. Of het moet het "alles op 1 grote ondefinieerbare hoop" model moeten zijn. Dat Design Patterns boek heb ik (uiteraard) ook in de kast staan, maar dat gaat niet direct over MVC maar meer over patterns die je zou kunnen gebruiken voor bepaalde doeleinden, eventueel binnen een MVC framework. |
CraZaay | maandag 30 juli 2007 @ 23:26 |
OO staat inderdaad los van MVC, maar MVC is inderdaad wel "het" model voor webpps  |
Geqxon | maandag 30 juli 2007 @ 23:56 |
Ik gok zo even dat de uitvoering van MVC in Java exact hetzelfde is als MVC in PHP? |
wobbel | dinsdag 31 juli 2007 @ 00:13 |
Ik wil graag beginnen met PHP en Ajax...lijkt me wel lachen enzo 
Nu ben ik op zoek naar een soort memoblok in Ajax, PHP en MySQL. Dus gewoon een text-area waar je wat typt en dan het dan gewoon opgeslagen wordt zonder dat ik op een submit knop hoef te drukken Lijkt me echt ideaal, want dan kan ik me browser afsluiten en later weer openen en dan staat het er gewoon weer (omdat het uit de DB wordt gehaald)
Ik zoek dus eigenlijk een klein kant en klaar script zodat ik beetje met Ajax kan knutselen  |