Who cares als iedereen het kan zien? Daarvoor heb je 0.x versies. Je krijgt alleen maar sneller feedback waardoor je een beter product kunt leveren. Op je eilandje blijven werken kom je niet verder mee.
Posts by Stefan.J
-
-
wimmpie: Gigantisch grote opensource projecten worden gehost op GITHub, het is gewoon een GIT-repository met push-requests..
-
Heb in de source niet zoveel vertrouwen, maar waarom opent er dan niemand een GitHub repository zodat iedereen push-request kan doen terwijl een select groepje de boel beheert?
-
Ik begrijp de output niet helemaal, maar je initialiseert in de lus iedere keer de array opnieuw, dat klopt natuurlijk sowieso niet. Wat gebeurt er als je dat oplost?
-
CakePHP vind ik persoonlijk zeker geen goed framework. Als je kijkt naar de werking van model objecten (tenminste, een half jaar terug), zie je dat deze een save of zelfs een statische getAll of query method hebben. Dit is tegen alle principes in. Een model zoals een User heeft properties, en die kun je opvragen. Een user kan zichzelf niet opslaan, daarvoor heb je een UserService of een UserRepository.
Het principe dependency injection is in de PHP-wereld nog niet helemaal doorgedrongen. Maar grote Java-frameworks zoals Spring of zelfs de Java EE standaard zweren erbij. DI biedt de mogelijkheid eenvoudig functionaliteit te verdelen over classes die één ding en alleen één ding te doen. Daarnaast komt het de testbaarheid van code ten goede. Daarbij komt de vuistregel die eigenlijk altijd klopt: Als je code niet of slecht testbaar is middels unittests, is je design niet correct.
PHP frameworks die meer in zich hebben als een gemiddeld PHP-framework waarvan ik op de hoogte zijn zijn Symphony en Yii. Daarbij moet ik wel zeggen dat mijn PHP-kennis ongeveer een jaar achterloopt..
-
Een Framework-class die alle referenties heeft is sowieso geen goed idee. Inversion of Control (waarop dependency injection is gebaseerd), is een prima, zo niet de beste oplossing.
Het bouwen van een eigen framework is echter altijd een slecht idee. Eén uitzondering daargelaten: om bij te leren. Mocht je dus een framework zoeken voor productie, neem dan een bestaande..
-
Het else-statement wordt niet verwacht, dat is wat de error zegt. Als je naar je code kijkt zie je dat je enkele quotes in je echo niet hebt geëscaped.
Topic opgeschoond en de screenshot van de code weggehaald, daar kunnen we niets mee.
-
En ik kwam met een mogelijke oplossing en een manier om het probleem te lokaliseren. Dat dat niet de oplossing is die voor jou een optie is kan ik snappen, maar je reactie komt me wel wat ondankbaar over.
Welke wireless-adapter heb je? Misschien is het een bekend probleem met Windows Server en de betreffende adapter? Krijgt de machine wel gewoon netwerktoegang met een LAN-kabel?
-
Kijk aan, wanneer gaan we hier op proosten Koen?
-
Wellicht is de draadloze adapter van je machine gewoon stuk. Hoe je daar achter komt zou ik zo niet weten, maar je kunt natuurlijk een dualboot doen met een Linux-distributie en het daarop ook proberen. Kun je meteen afscheid nemen van Windows Server en een echter server neerzetten.
-
Citaat
Ja kan ook Tim, maar ik wil niet zo afhankelijk zijn van een server configuratie. Immiddels heb ik dit ook op mn server zo ingesteld maar wil het liever doen met code
Volgens mij wil je dit juist niet doen in je framework. Apache moet dit soort dingen prima voor je kunnen oplossen. En dan kan Apache dat natuurlijk beter (en vooral sneller) als dat jij dat kunt.
Met je PHP-applicatie wil je bepalen wat er geserveerd wordt. Maar hoe, dat zou ik lekker aan de webserver overlaten! Dus mijn mening: mooie functionaliteit voor je framework die je juist niet in je framework wilt hebben.
KISS: Keep It Stupid Simple.
-
Alles wat hierboven wordt gezegd klopt, maar wat ik nog niet heb gehoord is dat je fundamenteel de fout in gaat.
Een melding, wat kan die? Een melding kan denk ik niet een melding opslaan of alle meldingen weergeven. Een melding is in jouw geval een domeinobject en heeft vooral dingen en kan niet zozeer iets zelf doen. Een melding heeft bijvoorbeeld een titel en een bericht.
De class hierboven is daarom ook de MeldingService, en niet de melding zelf.. En dat object hoor je ook te hebben!
-
De topicid haal je door htmlentities heen, maar je gebruikt de variabele niet om naar de output te schrijven (echo), dus wat heeft het dan voor toegevoegde waarde?
Waarom niet gaan voor de query uit mijn eerste reactie?
-
Misschien eens kijken naar mijn reactie? Kun je een hoop performancewinst mee halen.
Paar opmerkingen op je huidige code nog:
PHP
Toon Meer$exec3 = $mysqli->prepare("SELECT * FROM `topics` WHERE catid = ?"); //Waarom selecteer je alle velden (incl. waarschijnlijk een blob of text), terwijl je alleen ID gebruikt? Ik zou de variabele ook geen exec3 noemen, dat is nogal nietszeggend. if ($exec3->execute(array($id))) { while ($topic = $exec3->fetch()) { $topicid = $topic['id']; //Variabele is een beetje overbodig, zou ik weglaten. $topicid = mysqli_real_escape_string($mysqli, $topicid); //Gezien je prepared statement heb je dit niet nodig. $topicid = htmlentities($topicid); //Je schrijft topicid niet naar het scherm, dus dit is niet nodig en onverstandig. Bovendien, is de ID geen integer? $exec4 = $mysqli->prepare("SELECT * FROM `reacties` WHERE topicid = ?"); //Tevens de wildcard selectie, selecteer hier bijvoorbeeld 1 of COUNT(1). $exec4->execute(array($topicid)); $reacties = $reacties + $exec4->num_rows; //Bij de eerste loop krijg je hierop een NOTICE. } }
-
Dat klopt, maar dat heeft niets met de escape functie te maken, maar met je gebruik ervan. Zolang je het resultaat van de escape functie in je query tussen quotes zet is er niets aan de hand.
Je zou dus kunnen stellen dat prepared statements meer idiot proof zijn. Maar zoals de bekende uitspraak luidt:
"If you make something idiot proof, someone will just make a better idiot."
-
De code die je post is veilig tegen SQL-injections. Prepared statements zijn nog wel beter, maar dat is meer vanwege de execution plan cache. Daarbij, over performance gesproken, je code is nogal inefficient.
De volgende code doet namelijk hetzelfde:
PHP<?php $postCountStatement = $mysqli->prepare("SELECT COUNT(1) FROM reacties r INNER JOIN topics t ON r.topicid = t.id WHERE catid=?"); $postCountStatement->bind_param('i', $categoryId); $postCountStatement->execute(); $postCountStatement->bind_result($postCount);
Mits is MySQLi helemaal correct heb gebruikt want ik heb die library nog vrijwel nooit gebruikt.
-
Citaat
Hallo,mysql_real_escape_string is niet veilig genoeg
Mvg,
TimToelichting?
De mysql-extensie is inderdaad deprecated en wordt vervangen met mysqli. In nieuwe ontwikkeling is het dus sterk aangeraden de tevens betere mysqli of PDO extensie te nemen.
-
Ik zal je nog een klein stukje verder helpen:
-
Ah, dit is een leuke! Het probleem zit hem in regel 18:
Ga eens na wat de return-value is van charAt(), en kijk eens of je het dan weet.
Nog wat andere opmerkingen:
- Wat is de toegevoegde waarde van de variabele antwoord?
- Classnamen in Java zijn CamelCase, en beginnen dus met een hoofdletter.
- Gebruik je een IDE (Netbeans, IntelliJ, ..)? Zo nee, probeer dat eens. Zo ja, als je leert met de debugger om te gaan, had je dit kunnen vinden. Zodoende heb ik het ook gevonden. -
Citaat
Het heeft natuurlijk zijn beperkingen omdat het een geinterpreteerde taal is ipv gecompileerde
Dit klopt niet helemaal. Zoals Quitta later zelf aangeeft draait Java in een JVM (Java Virtual Machine), maar daarvoor wordt de Java-code wel gecompileerd naar bytecode.
De performance drawback van Java komt door het grote voordeel van Java: De garbage collector. Omdat Java voor jouw de pointers naar je heap bijhoudt (het aantal verwijzingen naar een bepaald object), moet Java zo nu en dan ook het geheugen opruimen. Dit wordt gedaan door de zogenaamde garbage collector en is een behoorlijke performance-hit. Vergeet echter niet dat dit wel betekend dat je zelf niet je memory management hoeft te doen zoals in C of C++, wat zeker geen peulenschilletje is bij een serieuze applicatie.
Java is overigens nog vele malen sneller als PHP.