Je doet het alleen op de plaatsen waar het nodig is. Sommige classes maken geen gebruik van de database, maar bij je voorbeeld geef je toch je database door en wordt er toch geheugen in genomen.quote:Op donderdag 18 augustus 2011 12:02 schreef GI het volgende:
Wat is de meerwaarde eraan om iedere keer zelf de db classe aan te moeten roepen met geinstance ?
Ik heb een $db classe die ik kan benaderen door heel mijn code, wat ik wel in iedere classe moet doen is in de __construct zorgen dat $this->db een referentie is naar de $db.
Hierdoor kan ik overal (hoe diep ik ook zit) met $this->db->runSQL("SQL_SHORT",$parameter1,$parameter2) de query die ik wil uitvoeren...
Dat snap ik. Ik heb alleen geen classes waar de database niet in gebruikt wordt dus het heeft voor mij weinig tot geen meerwaarde. Maar is het niet zo dat ik metquote:Op donderdag 18 augustus 2011 12:08 schreef Pakspul het volgende:
[..]
Je doet het alleen op de plaatsen waar het nodig is. Sommige classes maken geen gebruik van de database, maar bij je voorbeeld geef je toch je database door en wordt er toch geheugen in genomen.
Door gebruik te maken van Singleton patroon kun je op de plaats waar je wil je database oproepen door $db = DataBase::GetInstance(); aan te roepen. De hele database is opgeslagen in de $_Instance variabel in de class en deze wordt tijdelijk doorgegeven aan de variabel.
Conclusie: je hoeft niet lastig steeds je database door te geven.
1 2 3 4 5 6 7 8 | <?php function __construct(){ global $db; $this->db=&$db; } ?> |
Ja, dat snap ik, maar dat moet ik dan iedere keer doen dat ik de database aan wil spreken volgens jouw constructie. Dat vind ik niet echt een tijdbesparende oplossing eigenlijk.quote:Op donderdag 18 augustus 2011 12:18 schreef Pakspul het volgende:
De getinstance functie kijkt alleen maar of er een instance van is, anders zorgt hij er voor dat hij deze aanroept. Mocht die al bestaan dan geeft hij hem terug.
Global vind ik geen nette oplossing. Het is door PHP gemaakt om het programmeren makkelijker te maken. Daarom heb ik voor Singleton gekozen.
Tijd besparing valt echt reuze mee, je hebt het over een paar miljardste van een seconde wat ik zo heb getestquote:Op donderdag 18 augustus 2011 13:54 schreef GI het volgende:
[..]
Ja, dat snap ik, maar dat moet ik dan iedere keer doen dat ik de database aan wil spreken volgens jouw constructie. Dat vind ik niet echt een tijdbesparende oplossing eigenlijk.
Ik snap de use van de singleton wel, maar ik zou als ik hem zo gebruiken hem toch in mijn __construct aanroepen denk ik...
Ik had het vooral over ontwikkeltijdbesparingquote:Op donderdag 18 augustus 2011 14:35 schreef Pakspul het volgende:
[..]
Tijd besparing valt echt reuze mee, je hebt het over een paar miljardste van een seconde wat ik zo heb getest
Ik ontwikkel mijzelf om dit soort dingen te proberenquote:Op donderdag 18 augustus 2011 14:50 schreef GI het volgende:
[..]
Ik had het vooral over ontwikkeltijdbesparing
Probeer eens htmlentities($data,ENT_QUOTES,"UTF-8")quote:Op vrijdag 19 augustus 2011 11:24 schreef Sitethief het volgende:
als in $_GET['test'] ÄÖ zit, dan maakt htmlentities($data,ENT_QUOTES,UTF-8) er Ã�Ã� van, ipv ÄÖ, hoe kan ik er nou voor zorgen dat dit wél goed gaat?
Is de metatag: <meta http-equiv="Content-Type" CONTENT="text/html; charset=UTF-8" /> aanwezig?quote:Op vrijdag 19 augustus 2011 11:24 schreef Sitethief het volgende:
als in $_GET['test'] ÄÖ zit, dan maakt htmlentities($data,ENT_QUOTES,UTF-8) er Ã�Ã� van, ipv ÄÖ, hoe kan ik er nou voor zorgen dat dit wél goed gaat?
1 2 3 4 5 6 | <?php $smt = "SELECT * FROM products WHERE `ProductName` LIKE :name "; $this->prepared->execute($smt); ?> |
op je werk worden ads geblokkeerd?quote:Op maandag 22 augustus 2011 10:39 schreef Sitethief het volgende:
Sorry voor de tag die verkeerde gaat, kan om een of andere reden vanaf werk geen posts editten. (alle Javascript op FOK is hier kaduuk)
Eh die foto's in de database opslaan is niet heel erg handig en snel. Je kan je foto's denk ik beter op de server opslaan en in de database een url naar het plaatje stoppen, mocht je nog meer informatie bij het plaatje willen opslaan.quote:Op maandag 22 augustus 2011 14:46 schreef MrNiles het volgende:
Wat is een handige manier om veel files (foto's) te uploaden voor een foto-album?
En kan dat direct in een database?
Ik wil ze natuurlijk niet 1-voor-1 allemaal aanklikken.
Liever niet met ftp. Graag zou ik het foto album wat meer automatiseren, zodat anderen kunnen inloggen en een fotoalbum kunnen aanmaken.
Dus geen ftp, mapjes aanmaken op de server..dat soort dingen
en een zipje uploaden met foto's en deze laten unzippen op de server?quote:Op maandag 22 augustus 2011 14:48 schreef themole het volgende:
[..]
Eh die foto's in de database opslaan is niet heel erg handig en snel. Je kan je foto's denk ik beter op de server opslaan en in de database een url naar het plaatje stoppen, mocht je nog meer informatie bij het plaatje willen opslaan.
Dus een tabel met:
Id | Beschrijving | URL | andere zinnige info die je wilt opslaan.
En snel veel foto's uploaden is meestal wel ftp.
Jep, dat werkt prima, ook regelmatig ingebouwd. Het is natuurlijk niet erg laagdrempelig want niet iedere gebruiker weet hoe te zippen.quote:Op maandag 22 augustus 2011 14:53 schreef MrNiles het volgende:
[..]
en een zipje uploaden met foto's en deze laten unzippen op de server?
maar degene die ik het wil laten doen die is wel zo handigquote:Op maandag 22 augustus 2011 14:56 schreef Intrepidity het volgende:
[..]
Jep, dat werkt prima, ook regelmatig ingebouwd. Het is natuurlijk niet erg laagdrempelig want niet iedere gebruiker weet hoe te zippen.
http://www.php.net/manual/en/zip.requirements.phpquote:Op maandag 22 augustus 2011 14:57 schreef MrNiles het volgende:
[..]
maar degene die ik het wil laten doen die is wel zo handig
welke functie is dat op de server want niet alles is enabled bij mij hosting
Kan, maar als de bestanden groter worden, is dat niet handig meer. Het http-protocol is niet echt geschikt voor het uploaden van bestanden.quote:Op maandag 22 augustus 2011 14:53 schreef MrNiles het volgende:
[..]
en een zipje uploaden met foto's en deze laten unzippen op de server?
Maar het werkt wel goed, zie youtube, flickr, picasa, etc.quote:Op maandag 22 augustus 2011 15:00 schreef Light het volgende:
[..]
Kan, maar als de bestanden groter worden, is dat niet handig meer. Het http-protocol is niet echt geschikt voor het uploaden van bestanden.
Wat een onzin.quote:Op maandag 22 augustus 2011 15:00 schreef Light het volgende:
Kan, maar als de bestanden groter worden, is dat niet handig meer. Het http-protocol is niet echt geschikt voor het uploaden van bestanden.
Die gebruiken dan ook geen plain html file uploadquote:Op maandag 22 augustus 2011 15:01 schreef GlowMouse het volgende:
[..]
Maar het werkt wel goed, zie youtube, flickr, picasa, etc.
Wat is groot..quote:Op maandag 22 augustus 2011 15:00 schreef Light het volgende:
[..]
Kan, maar als de bestanden groter worden, is dat niet handig meer. Het http-protocol is niet echt geschikt voor het uploaden van bestanden.
1 2 3 4 5 6 | <?php SELECT `ProductName` FROM `products` ?> |
1 2 | SELECT `products.ProductName` FROM `products` |
1 2 | SELECT `products`.`ProductName` FROM `products` |
Andere werkgever zoekenquote:Op maandag 22 augustus 2011 15:45 schreef Sitethief het volgende:
Niet als je werkgever adds op FOK blokkeert, waardoor alle Javascript functies op FOK niet werken, inclusief, quote, edit etc.
Als je continue Fokt lost dat probleem zichzelf wel opquote:
Op welke van de 2 posts reageer je nu?quote:Op maandag 22 augustus 2011 15:52 schreef Sitethief het volgende:
Dank je Light, klinkt eigenlijk ook best logisch
Niet in de tijd van je baas FOK!ken?quote:Op maandag 22 augustus 2011 15:45 schreef Sitethief het volgende:
Niet als je werkgever adds op FOK blokkeert, waardoor alle Javascript functies op FOK niet werken, inclusief, quote, edit etc.
1 | username (Voornaam Achternaam) |
Tenzij de usernames natuurlijk spaties kunnen bevatten, zoals hier op Fok!quote:Op woensdag 24 augustus 2011 22:16 schreef GlowMouse het volgende:
Kun je die array niet beter indelen? Je kunt gewoon alles pakken tot de eerste spatie, met strpos en substr.
Dan doe je tot positie haakje minus 1.quote:Op woensdag 24 augustus 2011 23:30 schreef Tijn het volgende:
Tenzij de usernames natuurlijk spaties kunnen bevatten, zoals hier op Fok!
1 | substr($var, 0, strpos($var, '(')-1) |
Array kan ik zelf niet veel aan doen, wordt geleverd vanuit Twitter. Maar ik ga even kijken naar je strpos/substr idee. Alvast bedankt!quote:Op woensdag 24 augustus 2011 22:16 schreef GlowMouse het volgende:
Kun je die array niet beter indelen? Je kunt gewoon alles pakken tot de eerste spatie, met strpos en substr.
Twitter kent (gelukkig) geen spaties in de usernames, dus dat zou het probleem niet moeten zijn.quote:Op woensdag 24 augustus 2011 23:30 schreef Tijn het volgende:
[..]
Tenzij de usernames natuurlijk spaties kunnen bevatten, zoals hier op Fok!
Dan kun je ook nog exploden op spatie. Het eerste element van de array die daaruit komt, is je username.quote:Op donderdag 25 augustus 2011 00:18 schreef dirkjo het volgende:
[..]
Twitter kent (gelukkig) geen spaties in de usernames, dus dat zou het probleem niet moeten zijn.
Ik ga het nu proberen, zal laten weten hoe het gelukt is
Oke ik ben blind, ik dacht dat de enige manier van zoeken op twitter de volgende was:quote:Op donderdag 25 augustus 2011 00:18 schreef GlowMouse het volgende:
welke twitter api gebruik je dan?
1 | http://search.twitter.com/search.atom?lang=en&q=fok! |
1 2 3 4 5 6 7 8 9 10 11 | <?php <dl> <dt><label>Afgeleverd op:</label></dt> <dd> Woensdag, 24/08/2011 op 14:45 </dd> </dl> ?> |
Pak de source code en gooi deze door een custom geschreven parser?quote:Op donderdag 25 augustus 2011 14:59 schreef cablegunmaster het volgende:
[ code verwijderd ]
Vraagje hoe kan ik deze code van de pagina lenen? ik weet de pagina maar nu is de vraag hoe ik alles tussen <dd> en </dd> eraf kan halen met identifier: <dt><label>Afgeleverd op:</label></dt>
Probleem is dat ik de pagina niet zelf beheer waarop dit staat waardoor simpele preg _matches niet werken. en ik snap nog niet hoe ik het zo van een andere pagina kan halen.
probleem 1 parser?quote:Op donderdag 25 augustus 2011 15:30 schreef Sitethief het volgende:
[..]
Pak de source code en gooi deze door een custom geschreven parser?
DOM standaard in PHP kun je hier heel mooi voor gebruiken, dan pak je gewoon de waarde van bepaalde elementen.quote:Op donderdag 25 augustus 2011 14:59 schreef cablegunmaster het volgende:
[ code verwijderd ]
Vraagje hoe kan ik deze code van de pagina lenen? ik weet de pagina maar nu is de vraag hoe ik alles tussen <dd> en </dd> eraf kan halen met identifier: <dt><label>Afgeleverd op:</label></dt>
Probleem is dat ik de pagina niet zelf beheer waarop dit staat waardoor simpele preg _matches niet werken. en ik snap nog niet hoe ik het zo van een andere pagina kan halen.
Ik gebruik deze: http://simplehtmldom.sourceforge.net/quote:Op donderdag 25 augustus 2011 15:32 schreef Pakspul het volgende:
[..]
DOM standaard in PHP kun je hier heel mooi voor gebruiken, dan pak je gewoon de waarde van bepaalde elementen.
http://www.php.net/manual/en/book.dom.php
Google even naar wat voorbeelden en je kunt het zo toepassen.,
Oeh vet handig, thanks voor de link. Alleen jammer dat het JQuery style is en niet MooTools, maar dan nog.quote:Op donderdag 25 augustus 2011 15:37 schreef mstx het volgende:
[..]
Ik gebruik deze: http://simplehtmldom.sourceforge.net/
Werkt super simpel.
De Mootools $$() functie werkt (bijna) hetzelfde als de JQuery $() functie. Dus in dit geval zit er geen verschil tussen "JQuery style" en "Mootools style".quote:Op donderdag 25 augustus 2011 16:28 schreef Sitethief het volgende:
[..]
Oeh vet handig, thanks voor de link. Alleen jammer dat het JQuery style is en niet MooTools, maar dan nog.
roep applicatie op server aan en retouneer aan de gebruiker een"even wachten" pagina waar je met Jquery elke 5 seconden een check doet op de database?quote:Op vrijdag 26 augustus 2011 17:25 schreef Lamzak_ het volgende:
Ik heb een probleem.
Ik heb een online applicatie.
Deze applicatie zorgt ervoor dat een andere applicatie aangeroepen wordt.
Deze draait op de server en genereerd een PDF bestand.
De site moet checken of de PDF gegenereerd is. Zodra dit klaar is moet die automatisch geopend worden. Dat PDF bestand genereren duurt ongeveer 45 seconden. Ik wil gedurende 90 seconden elke vijf seconden een query op een database uitvoeren, want daaruit kan ik halen of de pdf klaar is.
Als die klaar is, moet hij gelijk geopend worden. Als hij na 90 seconden nog niet klaar is moet er een time-out error komen.
Hoe moet ik dit in hemelsnaam doen.
Heb je ervaring met PHP of is het stellen van deze vraag in dit topic een gokje? Wat is trouwens het doel dat je wilt bereiken met het openen van de PDF als hij klaar is?quote:Op vrijdag 26 augustus 2011 17:25 schreef Lamzak_ het volgende:
Ik heb een probleem.
Ik heb een online applicatie.
Deze applicatie zorgt ervoor dat een andere applicatie aangeroepen wordt.
Deze draait op de server en genereerd een PDF bestand.
De site moet checken of de PDF gegenereerd is. Zodra dit klaar is moet die automatisch geopend worden. Dat PDF bestand genereren duurt ongeveer 45 seconden. Ik wil gedurende 90 seconden elke vijf seconden een query op een database uitvoeren, want daaruit kan ik halen of de pdf klaar is.
Als die klaar is, moet hij gelijk geopend worden. Als hij na 90 seconden nog niet klaar is moet er een time-out error komen.
Hoe moet ik dit in hemelsnaam doen.
JOIN verkeerd? Vooral handig dat je de query niet toont dan kunnen we je heel goed helpenquote:Op vrijdag 26 augustus 2011 17:39 schreef cablegunmaster het volgende:
ik krijg de hele tijd met een count query de verkeerde waarde's eruit. nu vraag ik me af of dit aan de join kan liggen? Ik krijg gekke waarde's als 7- 15, terwijl er maar 3 rijen aan de query voldoen als ik gewoon alle velden oproep met een *.
nah de join is goedquote:Op vrijdag 26 augustus 2011 17:40 schreef Pakspul het volgende:
[..]
JOIN verkeerd? Vooral handig dat je de query niet toont dan kunnen we je heel goed helpen
1 2 3 4 5 6 | SELECT * FROM product_prijzen LEFT JOIN levering_datum ON product_prijzen.lever_id = levering_datum.id WHERE product_id = '45' group by levering |
1 2 3 4 5 | SELECT count( levering_datum.levering ) FROM product_prijzen LEFT JOIN levering_datum ON product_prijzen.lever_id = levering_datum.id WHERE product_id = '45' GROUP BY levering |
En als je een right join doet ipv een left join?quote:Op vrijdag 26 augustus 2011 17:41 schreef cablegunmaster het volgende:
[..]
nah de join is goed, kwam erop neer dat hij de count uitvoert op de tabel waar FROM staat.
zit de hele tijd in phpmyadmin uit te testen. query is niet belangrijk.
count negeert de left join.
[ code verwijderd ]
Dit wil hij gewoon doen. maar zodra ik er een count bij zet count hij alleen
waar product_id = 45 en negeert hij de hele join. dat is het geval.
Resultaat is 37 terwijl er maar 3 regels staan als ik de hele left join weghaal geeft hij alle 37 regels weer die ik niet wil hebben maar alleen de join count wil ik hebben.
dus probeerde ik te specificeren met
[ code verwijderd ]
krijg ik er 7, 15,15 uit wat eigenlijk hetzelfde is.
Dan krijg ik het hetzelfde eruit het probleem is als volgt.quote:Op vrijdag 26 augustus 2011 17:56 schreef The_Terminator het volgende:
[..]
En als je een right join doet ipv een left join?
Ik was er net achter idd, subquery met enkel een COUNT(*) geeft het aantal terug van de query die erbinnen zit.quote:Op vrijdag 26 augustus 2011 17:58 schreef cablegunmaster het volgende:
[..]
Fixed met subquery , voor interesse alsnog een antwoord weten of dit kan met een join.
Dan schrijf je slecht onderhoudbare code.quote:Op vrijdag 26 augustus 2011 17:56 schreef The_Terminator het volgende:
[..]
En als je een right join doet ipv een left join?
True, echter was het maar een probeersel wat uiteindelijk niet bleek te werken. Ik heb namelijk een keer hetzelfde probleem gehad en wist niet meer hoe ik het had opgelost. Mocht het wel werken dan is de boel altijd nog aan te passen zodat het wel duidelijk en goed te onderhouden is.quote:Op vrijdag 26 augustus 2011 19:12 schreef Light het volgende:
[..]
Dan schrijf je slecht onderhoudbare code.
wie heeft je dat verteld?quote:Op vrijdag 26 augustus 2011 19:12 schreef Light het volgende:
[..]
Dan schrijf je slecht onderhoudbare code.
Ik zelfquote:
quote:Op zaterdag 27 augustus 2011 00:41 schreef ursel het volgende:
Wat kan een mens toch blij worden als een geniaal stukje code nog eens blijkt te werken,
1 2 3 4 5 6 7 8 9 10 | <?php $rows = $db->getALL('SELECT "shit" FROM "database" '); $i=""; foreach ( $rows as $row ) { $var[$i] = $row["lol"]; $i++; } print_r($var); ?> |
1 2 3 4 5 6 7 8 | <?php $rows = $db->getALL('SELECT "shit" FROM "database" '); foreach ( $rows as $row ) { $var[] = $row["lol"]; } print_r($var); ?> |
Die curly braces zijn ook niet nodig, evenals het opslaan van het resultaat van $db->getALL in een aparte variabele.quote:Op zaterdag 27 augustus 2011 20:15 schreef Flepke het volgende:
Iemand trouwens nog goede tutorials/trucjes voor betere leesbaarheid/kortere code?
Ik heb bijvoorbeeld nooit geweten dat:
[ code verwijderd ]
Ook kan als:
[ code verwijderd ]
Als ik zoek op shorthand php kom ik alleen maar dingen tegen voor controle structuren / andere basic dingen.
1 2 3 4 5 | <?php foreach ($db->getALL('SELECT "shit" FROM "database" ') as $row) $var[] = $row["lol"]; ?> |
1 2 3 4 5 6 7 8 9 10 11 12 | <?php if(voorwaarde) { $var = iets; } else { $var = iets_anders; } ?> |
1 2 3 4 5 | <?php $var = (voorwaarde) ? iets : iets_anders; ?> |
Dat is best wel basicquote:Op zaterdag 27 augustus 2011 20:15 schreef Flepke het volgende:
Iemand trouwens nog goede tutorials/trucjes voor betere leesbaarheid/kortere code?
Ik heb bijvoorbeeld nooit geweten dat:
[ code verwijderd ]
Ook kan als:
[ code verwijderd ]
Als ik zoek op shorthand php kom ik alleen maar dingen tegen voor controle structuren / andere basic dingen.
Kan ook zo:quote:Op zaterdag 27 augustus 2011 20:44 schreef Tijn het volgende:
Wat ik zelf trouwens vaak gebruik is de alternatieve if syntax, zeker om bv een variabele te zetten op basis van een voorwaarde. Ipv van dit:
[ code verwijderd ]
doe ik vaak dit
[ code verwijderd ]
1 2 3 | <?php ($is_dit_waar) && (print 'ja') || print 'nee' ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $a = 'hoi'; // i.p.v. het volgende echo isset($a) ? "a" : "b"; // geeft a unset($a); // doe dit echo $a ?: "b"; // geeft "b" ?> |
Nergens last van, ik gebruik het gewoon bij ieder soort query. Krijg je een melding terug van je database en/of PDO?quote:Op maandag 29 augustus 2011 11:36 schreef Sitethief het volgende:
Klopt het dat in MyISAM je met PDO->execute alleen parameters kunt meegeven aan SELECT statements en niet aan bijv. INSERT, want daar gaat het bij mij mis. SELECT gaat prima, maar INSERT weigert gewoon de parameters te gebruiken die ik meegeef.
1 2 3 4 5 | <?php INSERT INTO `products` (`ProductName`) VALUES (':name') ?> |
Moet je geen $name gebruiken?quote:Op maandag 29 augustus 2011 14:13 schreef Sitethief het volgende:
Nee
[ code verwijderd ]
Alles wat er gebeurt is dat :name in de database wordt ingevuld, ipv wat ik meegeef. Als ik precies dezelfde functions gebruik om een SELECT te doen werkt het wel.
Je moet :name niet tussen aanhalingstekens zetten, dit doet PDO zelf. Nu gebruik je de string :name als waarde.quote:Op maandag 29 augustus 2011 14:13 schreef Sitethief het volgende:
Nee
[ code verwijderd ]
Alles wat er gebeurt is dat :name in de database wordt ingevuld, ipv wat ik meegeef. Als ik precies dezelfde functions gebruik om een SELECT te doen werkt het wel.
quote:INSERT INTO `products` (`ProductName`) VALUES (:name)
1 2 3 4 5 6 7 8 | <?php <form method="post" action="verwijderext.php" enctype="multipart/form-data"> <label for="file">Filename:</label> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Submit" /> </form> ?> |
Nogal jaquote:Op vrijdag 26 augustus 2011 22:35 schreef Light het volgende:
Ik zelfMaar da's gewoon simpel beredeneerd.
dit is de juiste print_rquote:Op donderdag 1 september 2011 16:12 schreef GlowMouse het volgende:
$_FILES['Name'] werkt, aan je print_r te zien. Ik geloof daarom niet dat je het eerste script voor uploaden gebruikt.
$Name= $_FILES['file'];quote:Op vrijdag 2 september 2011 13:46 schreef GlowMouse het volgende:
dan werkt echo $_FILES["file"]["name"]; gewoon.
Dat is heel wat anders dan ditquote:Op vrijdag 2 september 2011 13:50 schreef MrNiles het volgende:
[..]
$Name= $_FILES['file'];
echo$Name;
geeft op scherm: Array
1 2 3 | <?php echo $_FILES["file"]["name"] ?> |
ik kom er nu achterquote:Op vrijdag 2 september 2011 13:51 schreef Tijn het volgende:
[..]
Dat is heel wat anders dan dit
[ code verwijderd ]
dat snap ik maar wat gebeurt er nu extra als er $_FILES['file'][name'] staatquote:Op vrijdag 2 september 2011 13:53 schreef GlowMouse het volgende:
$Name= $_FILES['file'];
echo$Name;
is hetzelfde als:
$bla = $_FILES['file'];
echo $bla;
of als:
echo $_FILES['file'];
toch wel...dan krijg ik mrniles.zip te zienquote:Op vrijdag 2 september 2011 13:57 schreef Tegan het volgende:
Niets want $_FILES['file'][name'] bestaat nog niet neem ik aan. Dus error?
Dan bestond die array array's al wel.quote:Op vrijdag 2 september 2011 13:58 schreef MrNiles het volgende:
[..]
toch wel...dan krijg ik mrniles.zip te zien
Als je een print_r van $_FILES doet, zie je precies hoe de array er na de POST uitziet. En let op hoofdletters. Is PHP gevoelig voor.quote:Op vrijdag 2 september 2011 13:58 schreef MrNiles het volgende:
[..]
toch wel...dan krijg ik mrniles.zip te zien
http://nl.php.net/manual/en/function.file.phpquote:Op zondag 4 september 2011 21:51 schreef Dalando het volgende:
Hoe kan ik kijken of een string in een externe webpagina zit?
quote:Op zondag 4 september 2011 21:53 schreef Swetsenegger het volgende:
[..]
http://nl.php.net/manual/en/function.file.php
1 2 3 4 5 6 7 8 | <?php if(stristr(file('http://google.com'), 'zoek')){ //doorgaan } ?> |
Als je die link goed bekeken had, had je kunnen lezen dat 'file' content in een array inleest die jij vervolgens met een stristr probeert te doorzoeken. Er staat ook bij dat file_get_contents precies hetzelfde doet, maar de boel dan in een string zet....quote:Op zondag 4 september 2011 21:56 schreef Dalando het volgende:
[..]
[ code verwijderd ]
werkt hier niet.
quote:Op zondag 4 september 2011 22:02 schreef Swetsenegger het volgende:
[..]
Als je die link goed bekeken had, had je kunnen lezen dat 'file' content in een array inleest die jij vervolgens met een stristr probeert te doorzoeken. Er staat ook bij dat file_get_contents precies hetzelfde doet, maar de boel dan in een string zet....
1 2 3 4 5 6 | <?php if(in_array('zoek', file('http://google.nl/'))){ ?> |
En als je even handmatig de array nakijkt dan zie je wel dat 'zoek' er in voorkomt? Weet niet of in_array hoofdletter gevoelig is.quote:Op zondag 4 september 2011 22:10 schreef Dalando het volgende:
[..]
[ code verwijderd ]
doet het ook niet.
ik heb ze beiden geprobeerd.quote:
quote:Op zondag 4 september 2011 22:10 schreef Dalando het volgende:
[..]
[ code verwijderd ]
doet het ook niet.
1 2 3 4 5 6 7 8 9 10 | <?php $iets=file_get_contents('http://google.nl/'); if(stristr($iets, 'poep') === FALSE) { echo 'nee'; }else{ echo 'ja'; } ?> |
1 | nee |
1 2 3 4 5 6 7 8 9 10 | <?php $iets=file_get_contents('http://google.nl/'); if(stristr($iets, 'zoeken') === FALSE) { echo 'nee'; }else{ echo 'ja'; } ?> |
1 | ja |
Hehequote:Op zondag 4 september 2011 22:28 schreef Swetsenegger het volgende:
[..]
[ code verwijderd ]
[ code verwijderd ]
[ code verwijderd ]
[ code verwijderd ]
Gelukkig had ik het ook over stristr en niet strstrquote:Op zondag 4 september 2011 22:32 schreef GlowMouse het volgende:
als je http://nl3.php.net/manual/en/function.strstr.php goed leest, leer je nog meer
Gelukkig ben ik niet blind.quote:Op zondag 4 september 2011 22:32 schreef Dalando het volgende:
[..]
Gelukkig had ik het ook over stristr en niet strstr
1 2 3 | <?php SELECT products.ProductName, products.ProductID FROM `products` WHERE products.ProductName LIKE '%la%' ORDER BY products.ProductID ASC LIMIT 5650,5700 ?> |
1 2 3 4 5 6 7 8 | <?php SELECT products.ProductName, products.ProductID FROM `products` WHERE products.ProductName LIKE '%la%' ORDER BY products.ProductID ASC LIMIT 5650,5700; /* 0 rows affected, 5.700 rows found. Duration for 1 query: 42,125 sec. (+ 0,562 sec. network) */ SELECT products.ProductName, products.ProductID FROM `products` WHERE products.ProductName LIKE '%la%' ORDER BY products.ProductID ASC LIMIT 5601,5650; /* 0 rows affected, 5.650 rows found. Duration for 1 query: 0,156 sec. (+ 0,125 sec. network) */ ?> |
1 2 3 4 5 6 7 | <?php SET @a:=1; SELECT @a,products.ProductName, products.ProductID FROM `products` WHERE (@a:=@a+1) AND products.ProductName LIKE '%la%' ORDER BY products.ProductID ASC LIMIT 5650,5700; /* 0 rows affected, 5.700 rows found. Duration for 2 queries: 3,203 sec. (+ 0,016 sec. network) */ ?> |
Kun je een stukje output laten zien van print_r($jouw_array)?quote:Op dinsdag 6 september 2011 10:44 schreef -Datdus- het volgende:
Kan iemand mij makkelijk uitleggen hoe ik een array laat loopen met foreach? Het wil niet lukken met gegevens uit de database.
1 2 3 4 5 6 7 8 9 | Array ( [posts] => Array ( [title] => Dit is een test [body] => Body ) ) |
1 2 3 4 5 6 7 8 9 10 | $sql = mysql_query("SELECT * FROM posts"); $row = mysql_fetch_assoc($sql); $posts = array('posts' => array('title' => $row['title'], 'body' => $row['body'])); foreach($posts as $post){ echo $post['title']."<br>"; echo $post['body']; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php $sql = mysql_query("SELECT title, body FROM posts"); $posts = array(); while ($row = mysql_fetch_assoc($sql)){ $posts[] = $row; } foreach($posts as $post){ echo $post['title']."<br>"; echo $post['body']; } ?> |
Ah, oke ik denk dat ik het snap dankjewel.quote:Op dinsdag 6 september 2011 11:19 schreef Sitethief het volgende:
Zolang mysql_fetch_assoc($sql) rows terug geeft, blijft de loop die in $posts stoppen. Zo stop je row voor row in $posts.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php $sql = "SELECT title, body FROM posts"; $query = mysql_query($sql); $items = mysql_num_rows($query); for ($x = 0; $x < $items; $x++) { $post = mysql_fetch_assoc($query); echo $post['title']."<br>"; echo $post['body']; } ?> |
Dankje.quote:Op dinsdag 6 september 2011 11:23 schreef Chandler het volgende:
Waarom gebruik je niet de uitleg van php.net?
http://nl.php.net/array
http://nl.php.net/while
http://nl.php.net/foreach
het zou mooier zijn om het zo te doen!
[ code verwijderd ]
http://nl.php.net/for
http://nl.php.net/mysql_num_rows
ps... als je een query opbouwt plaats je die in $sql
als je een query uitvoert noem je die in het algemeen $query (is logischer)
Fijn dat je alles direct zo mooi onderbouwtquote:
Het kan wel nuttig zijn in situaties, die ook leesbaarheid van code bevorderd. Maar das niet in deze situatie zo iig.quote:
Wel beter. Het is compleet nutteloos om eerst alles in een array te stoppen in een loop, en daarna in een andere loop dit weer te geven. Verspilling van geheugen.quote:
Als je het OO programmeert kun je er bijna niet omheen. Je voert eerst een query uit en deze geeft een datatable op en met deze datatable ga je de output opbouwen. Dan ram je dus eerst alle query informatie in een class (mogelijk de class nog in een collectie) en dan ga je er pas mee werken.quote:Op dinsdag 6 september 2011 14:35 schreef Catbert het volgende:
[..]
Wel beter. Het is compleet nutteloos om eerst alles in een array te stoppen in een loop, en daarna in een andere loop dit weer te geven. Verspilling van geheugen.
Als je je code een beetje overzichtelijk opbouwt dan verspil je inderdaad geheugen.quote:Op dinsdag 6 september 2011 14:35 schreef Catbert het volgende:
[..]
Wel beter. Het is compleet nutteloos om eerst alles in een array te stoppen in een loop, en daarna in een andere loop dit weer te geven. Verspilling van geheugen.
Dan nog hoef je helemaal niet perse eerst alle classes op te bouwen en ze daarna te gebruiken, dat kun je prima per row doen. Als het kleine sets data zijn is het zeker geen issue, maar bij grote recordsets wel, dan wil je die echt niet eerst allemaal in 't geheugen opbouwen.quote:Op dinsdag 6 september 2011 14:40 schreef Pakspul het volgende:
Als je het OO programmeert kun je er bijna niet omheen. Je voert eerst een query uit en deze geeft een datatable op en met deze datatable ga je de output opbouwen. Dan ram je dus eerst alle query informatie in een class (mogelijk de class nog in een collectie) en dan ga je er pas mee werken.
Wat bedoel je? Stel elke row is een kb aan data, en je hebt 1000 rows. Het maakt nogal uit of je script 1MB aan geheugen moet alloceren of max 1kb. Vergeet niet dat je zo 100 requests tegelijkertijd af te handelen kunt hebben.quote:Op dinsdag 6 september 2011 14:43 schreef GlowMouse het volgende:
Als je je code een beetje overzichtelijk opbouwt dan verspil je inderdaad geheugen.
Daar ben ik het dus niet geheel mee eens! juist door overzichtelijk te scripten (programmeren wil ik het niet noemen...) kun je juist geheugen besparen doordat je sneller je 'foutjes' ziet.quote:Op dinsdag 6 september 2011 14:43 schreef GlowMouse het volgende:
[..]
Als je je code een beetje overzichtelijk opbouwt dan verspil je inderdaad geheugen.
Sowieso is het gewoon dom om je zulke verkeerde dingen aan te leren als in een keer alles in een grote array plempen. Dat schaalt voor geen meter.quote:Op dinsdag 6 september 2011 14:47 schreef Chandler het volgende:
Daar ben ik het dus niet geheel mee eens! juist door overzichtelijk te scripten (programmeren wil ik het niet noemen...) kun je juist geheugen besparen doordat je sneller je 'foutjes' ziet.
Daarom moet je eerst berg werk investeren om je code zo te krijgen dat je dataset dynamisch kunt krijgen. Zelf hoef ik geen query's meer te schrijven. Alleen even de classes aanmaken en die daar heb ik ook een script voor geschreven die dat doet voor mij, dus dat is gewoon een druk op de knopquote:Op dinsdag 6 september 2011 14:46 schreef Catbert het volgende:
[..]
Dan nog hoef je helemaal niet perse eerst alle classes op te bouwen en ze daarna te gebruiken, dat kun je prima per row doen. Als het kleine sets data zijn is het zeker geen issue, maar bij grote recordsets wel, dan wil je die echt niet eerst allemaal in 't geheugen opbouwen.
Dat ben ik met je eens, vandaar mijn voorbeeldquote:Op dinsdag 6 september 2011 14:49 schreef Catbert het volgende:
[..]
Sowieso is het gewoon dom om je zulke verkeerde dingen aan te leren als in een keer alles in een grote array plempen. Dat schaalt voor geen meter.
De tijd dat een server net 100 MB geheugen tekort komt ligt alweer een decennium achter ons. Je redenering klopt ook niet: al voordat mysql_fetch_assoc wordt aangeroepen, zit de hele resultset in het geheugen van de webserver (of in het geheugen van de dbserver bij een unbuffered query).quote:Op dinsdag 6 september 2011 14:46 schreef Catbert het volgende:
[..]
Wat bedoel je? Stel elke row is een kb aan data, en je hebt 1000 rows. Het maakt nogal uit of je script 1MB aan geheugen moet alloceren of max 1kb. Vergeet niet dat je zo 100 requests tegelijkertijd af te handelen kunt hebben.
quote:Op dinsdag 6 september 2011 14:49 schreef Tijn het volgende:
Twee loops is nergens voor nodig, lijkt mij.
Dat is voor mij inderdaad de reden om alles in 1 array te stoppen. En dan heb je ook 2 loopjes; 1 om de data op te halen en 1 in de template om het te presenteren.quote:Op dinsdag 6 september 2011 14:56 schreef GlowMouse het volgende:
Veel ontwikkelaars vinden het overzichtelijker om de code en de opmaak van elkaar te scheiden, en met een echo en een mysql_fetch_assoc in dezelfde loop gebeurt dat niet.
Het is gewoon niet waar dat die hele resultset per definitie al in 't geheugen zit. Databaseservers zijn daar veel slimmer in. Als 2 queries dezelfde table benaderen hoeft deze niet 2 keer volledig in 't geheugen te zitten.quote:Op dinsdag 6 september 2011 14:56 schreef GlowMouse het volgende:
De tijd dat een server net 100 MB geheugen tekort komt ligt alweer een decennium achter ons. Je redenering klopt ook niet: al voordat mysql_fetch_assoc wordt aangeroepen, zit de hele resultset in het geheugen van de webserver (of in het geheugen van de dbserver bij een unbuffered query).
Zal best, maar als je appserver onderuit gaat omdat je koste wat 't kost je code 'overzichtelijk' moet houden doe je echt iets fout. En met een fatsoenlijke template engine kun je prima je code en layout gescheiden houden zonder eerst volledige query results in 't geheugen te moeten laden.quote:Veel ontwikkelaars vinden het overzichtelijker om de code en de opmaak van elkaar te scheiden, en met een echo en een mysql_fetch_assoc in dezelfde loop gebeurt dat niet.
Beide zaken zijn met template engines prima te combineren. Jezelf aanleren alles eerst in 't geheugen te laden en er daarna wat mee te gaan doen is gewoon onverstandig.quote:Op dinsdag 6 september 2011 15:05 schreef GlowMouse het volgende:
Leesvoer: http://gathering.tweakers.net/forum/list_messages/1105254
Nog meer: http://www.ukuug.org/events/linux2002/papers/html/php/#section_2
Hoe geef je je data aan je template engine door zonder het in het geheugen te laden dan?quote:Op dinsdag 6 september 2011 15:13 schreef Catbert het volgende:
Beide zaken zijn met template engines prima te combineren.
Weg te schrijven op de HDD en deze haalt de template engine weer op en zal deze echoen?quote:Op dinsdag 6 september 2011 15:16 schreef Tijn het volgende:
[..]
Hoe geef je je data aan je template engine door zonder het in het geheugen te laden dan?
Als jij twee queries uitvoert op MySQL dan wordt er twee keer geheugen gealloceerd voor de resultset.quote:Op dinsdag 6 september 2011 15:13 schreef Catbert het volgende:
[..]
Het is gewoon niet waar dat die hele resultset per definitie al in 't geheugen zit. Databaseservers zijn daar veel slimmer in. Als 2 queries dezelfde table benaderen hoeft deze niet 2 keer volledig in 't geheugen te zitten.
Door de template gewoon iedere keer de row te voeren in plaats van de hele resultset? Zelf doe ik al tijden niks meer met PHP maar in Java met bijvoorbeeld Spring of JSF is het prima mogelijk om data en layout volledig te scheiden maar wel een pagina per row op te bouwen.quote:Op dinsdag 6 september 2011 15:16 schreef Tijn het volgende:
Hoe geef je je data aan je template engine door zonder het in het geheugen te laden dan?
Ik weet niet hoe MySQL er mee omgaat maar in MSSQL gaat 'ie met 2 parallelle queries de intersectie van de data maar 1 keer in 't geheugen houden. Je hebt uiteindelijk eigenlijk alleen de rowids van de desbetreffende tables maar nodig, de rest van de data kun je aan de hand daarvan op de cursor doorgeven.quote:Op dinsdag 6 september 2011 15:24 schreef GlowMouse het volgende:
Als jij twee queries uitvoert op MySQL dan wordt er twee keer geheugen gealloceerd voor de resultset.
Het is wel waar dat wanneer je zelf een array vult, er meer geheugen nodig is om die op te slaan omdat het opslaan minder efficiënt gebeurt.
Maar je template engine moet al die data toch gevoerd krijgen voordat 'ie kan gaan beginnen met weergeven ervan? Wanneer je 'em de tweede row voert, waar slaat 'ie de eerste dan op als dat niet in het geheugen is?quote:Op dinsdag 6 september 2011 15:33 schreef Catbert het volgende:
[..]
Door de template gewoon iedere keer de row te voeren in plaats van de hele resultset?
Hij kan prima een row renderen, net zoals je dat "met de hand" doet.quote:Op dinsdag 6 september 2011 15:37 schreef Tijn het volgende:
Maar je template engine moet al die data toch gevoerd krijgen voordat 'ie kan gaan beginnen met weergeven ervan? Wanneer je 'em de tweede row voert, waar slaat 'ie de eerste dan op als dat niet in het geheugen is?
Als een bepaalde tabel veel benaderd wordt gaat 'ie data cachen. Als beide resultsets de row behorende bij rowid X benaderen wordt die data gewoon via een lookup beschikbaar gemaakt. Als je naar een query explain kijkt zie je dat 'ie vaak joins e.d. eerst afhandelt, en pas daarna de data er bij gaat zoeken. Die data komt dan of van disk, of uit de cache. Zowel MSSQL als Oracle doen dat. Of MySQL dat ook doet weet ik niet, maar daar hoef ik gelukkig niet mee te werken.quote:Op dinsdag 6 september 2011 15:36 schreef GlowMouse het volgende:
Ik geloof er helemaal niks van, dan zou MSSQL eerst moeten bepalen of resultsets wel gelijk zijn. Dat is met het oog op MVCC vrij inefficient.
Da's een ander verhaal. Ik zei in het begin al dat dit een issue is bij grote resultsets. Nu hebben we het bovendien over randzaken. Punt is dat het m.i. verkeerd is jezelf aan te leren iedere keer eerst alles in geheugen te lezen omdat het in veel gevallen relatief inefficient is. Dat je het doet op plekken waar het niet inefficient is, of soms juist efficienter; prima. Het gaat mij puur om wat een beginner zichzelf aanleert. Of in ieder geval dat die beginner weet waar hij mee bezig is.quote:Op dinsdag 6 september 2011 15:54 schreef GlowMouse het volgende:
Raar verhaal, bij een query met een aggregated functie heb je het niet meer over rows in een tabel tenzij je de resultset als tabel beschouwt en dan de overhead wilt van het testen op gelijkheid. En heb je dan elke keer een roundtrip als je een rij ophaalt?
1 2 3 4 5 6 | cijfer | weging | totaal 6,5 1 6,5 7,0 3 21 totaal: 4 27,5 totaal / weging = uiteindelijk cijfer |
1 2 3 4 | $query = mysql_query("SELECT SUM(weging) as wtotal, SUM(cijfer * weging) as itotaal, SUM(weging / itotaal) as totaal FROM cijfers"); |
En de laatste SUM weglaten.quote:Op donderdag 8 september 2011 12:16 schreef Tegan het volgende:
Je moet ook wtotal gebruiken en niet weging.
1 2 3 4 5 6 7 | <?php require_once("pclzip.lib.php"); $zip = new PclZip("uploads/".$filename); if($zip->extract() == 0) die("Error : " . $zip->errorInfo(true)); ?> |
Hoever ben je zelf al gekomen met debuggen? Error_reporting(E_ALL); al keertje aangepleurd?quote:Op donderdag 8 september 2011 13:04 schreef MrNiles het volgende:
probeer een file te unzippen maar werkt niet...krijg ook geen foutmelding wat er fout zou kunnen gaan. Path is goed, daar geeft ie wel een foutmelding op als de niet komt
[ code verwijderd ]
Even mijn glazen bol zoeken om te zien hoe jij je server hebt ingesteld, BRB!quote:Op donderdag 8 september 2011 13:25 schreef MrNiles het volgende:
volgende n00b vraag dan
wat is de max size van een te uploaden zip
phpinfo();quote:Op donderdag 8 september 2011 13:25 schreef MrNiles het volgende:
volgende n00b vraag dan
wat is de max size van een te uploaden zip
30files in zip, totaal 2,01MB = geen probleem
40files in zip, totaal 2,45MB = Missing archive file 'uploads/40f245.zip'
het bestand wordt niet geupload
ligt dat aan de grootte van het bestand?
fijn als je dat weet maar je kan me toch ook zeggen dat dat in phpinfo te vinden isquote:Op donderdag 8 september 2011 15:04 schreef KomtTijd... het volgende:
[..]
Even mijn glazen bol zoeken om te zien hoe jij je server hebt ingesteld, BRB!
Als je na de POST een print_r van $_FILES doet, staat het bestand er dan wel?quote:Op donderdag 8 september 2011 15:24 schreef MrNiles het volgende:
[..]
fijn als je dat weet maar je kan me toch ook zeggen dat dat in phpinfo te vinden is
thanx remi
het is dus
upload_max_filesize 10M
blijft mijn vraag staan..waarom de zipfile niet kan worden geupload
idd dat laatstequote:Op donderdag 8 september 2011 15:31 schreef remi1986 het volgende:
[..]
Als je na de POST een print_r van $_FILES doet, staat het bestand er dan wel?
Zo ja:
Pak je het bestand direct vanuit de tmp map uit? Of verplaats je het bestand eerst naar een "vaste" locatie op de server? (move_uploaded_file)
Ik zou dat laatste doen, en dan het bestand uitpakken.
Ondanks dat het al opgelost is een opmerking, een verkeerd ingestelde max_post_size wil ook wel eens voor problemen zorgen. Als die bijvoorbeeld op 2M staat kun je je max filesize wel op een terabyte zetten, als je het niet naar je server toe mag posten houdt het op.quote:Op donderdag 8 september 2011 15:24 schreef MrNiles het volgende:
[..]
fijn als je dat weet maar je kan me toch ook zeggen dat dat in phpinfo te vinden is
thanx remi
het is dus
upload_max_filesize 10M
blijft mijn vraag staan..waarom de zipfile niet kan worden geupload
lijkt mij dan een rechtenprobleem?quote:Op vrijdag 9 september 2011 09:26 schreef Chandler het volgende:
Ik heb het zelfde gezeur met een website van een klant, uploaden gaat goed (move_uploaded_file geeft geen error en zegt dat het bestand is 'gemoved') maar als ik dan op de volgende pagina kom en in de directory kijk waar het bestand zou moeten staan staat er niets!!!!
Hoster heeft wel meer vage problemen dus gaan we eerst een verhuizen en het dan nog eens proberen! (toch geen pcextreme hé)
1 2 3 | <?php echo '<img src=".$album."/thumbs/klein_".$files[$rand]. "title=".$afbeelding['basename'] ."alt=".$afbeelding['basename']. "class='thumbs' "> '; ?> |
quote:Op vrijdag 9 september 2011 20:21 schreef MrNiles het volgende:
bij deze
[ code verwijderd ]
krijg ik
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'
ik zie m niet..iemand anders wel?
1 2 3 4 5 6 7 8 9 10 | <?php printf('<img src="%s" title="%s" alt="%s" class="%s">', array( $album.'/thumbs/klein_'.$files[$rand] , $afbeelding['basename'] , $afbeelding['basename'] , 'thumbs' )); ?> |
dat heb ik dus gedaan..maar ik ben ff de draad kwijtquote:Op vrijdag 9 september 2011 20:24 schreef Tegan het volgende:
Lekker inconsequent gebruik van ' en ". Loop die allemaal maar eens na.
Hou eens op met developen in notepad.exe.quote:Op vrijdag 9 september 2011 20:21 schreef MrNiles het volgende:
bij deze
[ code verwijderd ]
krijg ik
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'
ik zie m niet..iemand anders wel?
In HTML tags altijd "" gebruiken, en strings met daarin HTML tags moeten dus tussen '' staan.quote:Op vrijdag 9 september 2011 20:29 schreef MrNiles het volgende:
[..]
dat heb ik dus gedaan..maar ik ben ff de draad kwijt
sorryquote:Op vrijdag 9 september 2011 20:29 schreef KomtTijd... het volgende:
[..]
Hou eens op met developen in notepad.exe.
Zelfs de syntaxhighlighter van FOK! pikt 'm er feilloos uit.
ik zit in plesk te klooien omdat ik ook in een vrij uurtje op het werk iets kan doen..daar mag ik niets installeren op de pc en geen eigen laptop op het netwerk kan aansluitenquote:Op vrijdag 9 september 2011 20:33 schreef KomtTijd... het volgende:
SRSLY?
Ik dacht ik maak een grapje
Probeer geany of notepad++. Voor PHP vind ik geany relaxter.
Je kunt ook offline programmeren. Sterker nog, dat zou je moeten doen. En pas online gooien als je jezelf hebt overtuigd dat het wel gaat werken.quote:Op vrijdag 9 september 2011 20:37 schreef MrNiles het volgende:
[..]
ik zit in plesk te klooien omdat ik ook in een vrij uurtje op het werk iets kan doen..daar mag ik niets installeren op de pc en geen eigen laptop op het netwerk kan aansluiten
NP++ laat zich heel makkelijk portable installeren. Geany is volgens mij ook een portable variant van.quote:Op vrijdag 9 september 2011 20:37 schreef MrNiles het volgende:
[..]
ik zit in plesk te klooien omdat ik ook in een vrij uurtje op het werk iets kan doen..daar mag ik niets installeren op de pc en geen eigen laptop op het netwerk kan aansluiten
thanx voor de tipsquote:Op vrijdag 9 september 2011 20:44 schreef KomtTijd... het volgende:
[..]
NP++ laat zich heel makkelijk portable installeren. Geany is volgens mij ook een portable variant van.
en anders: http://www.cdolivet.com/editarea/
http://nl3.php.net/manual/en/function.highlight-string.phpquote:Op vrijdag 9 september 2011 20:29 schreef KomtTijd... het volgende:
[..]
Zelfs de syntaxhighlighter van FOK! pikt 'm er feilloos uit.
Voor het geval je er nog niet uit bent.quote:Op vrijdag 9 september 2011 20:29 schreef MrNiles het volgende:
[..]
dat heb ik dus gedaan..maar ik ben ff de draad kwijt
1 2 3 | <?php echo '<img src="'.$album.'/thumbs/klein_'.$files[$rand]. '"title="'.$afbeelding['basename'] .'" alt="'.$afbeelding['basename']. '" class="thumbs"> '; ?> |
het is min of meer geluktquote:Op zaterdag 10 september 2011 02:10 schreef boem-dikkie het volgende:
[..]
Voor het geval je er nog niet uit bent.
".$album."/thumbs/klein_".$files[$rand]. "
Kijk daar nog eens goed naar.
Je sluit je stukje php met " waardoor /thumbs/klein_ nergens meer tussen staat.
Dit moet wel werken denk ik.
[ code verwijderd ]
ik vraag er toch ook niet om, leg alleen even uit waar ik mee bezig benquote:Op zondag 11 september 2011 21:03 schreef Tegan het volgende:
Wij kunnen het wel weer voorkauwen maar wellicht kun je het hele project beter uitbesteden.
Wat voor aangepast script wat erbij stond?quote:Op zondag 11 september 2011 20:58 schreef MrNiles het volgende:
[..]
het is min of meer gelukt
alle foutmeldingen zijn verdwenen maar het script doet niet wat ik had gehoopt
http://www.phphulp.nl/php(...)h-fotoalbum-v3/1491/ is een fotoalbum die vanuit mapjes zelf "sub"albums aanmaakt
werkt prima
maar
op de voorbeeld pagina is het de overzichtspagina met linkjes EN plaatjes. In het script van phphulp heb ik alleen linkjes
Ik had gehoopt met een aangepast script wat erbij stond dit te kunnen maken..maar helaas..
ook gaat mijn php kennis lang niet vergenoeg om zoiets zelf te maken
Wat is GD? (edit: GD support = enabled)quote:Op zondag 11 september 2011 21:16 schreef KomtTijd... het volgende:
Heb je wellicht GD niet geinstalleerd staan? [/wilde suggestie]
En waarom maak je niet gewoon lekker een picasa-album ofzo?
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 | <?php // Nieuw Nieuw Nieuw Nieuw // $exts = 'jpg jpeg png gif'; $files = array(); $i = - 1; if ('' == $album) $album = './'; $handle = opendir($album); $exts = explode(' ', $exts); while (false !== ($file = readdir($handle))) { foreach ($exts as $ext) { if (preg_match('/\.' . $ext . '$/i', $file, $test)) { $files[] = $file; ++$i; } } } closedir($handle); mt_srand((double) microtime() * 1000000); $rand = mt_rand(0, $i); // Eind Eind Eind Eind Eind // echo '<img src="'.$album.'/thumbs/klein_'.$files[$rand]. '"title="'.$afbeelding['basename'] .'" alt="'.$afbeelding['basename']. '" class="thumbs"> '; echo '<a href='?pagina=fotoalbum&album=' . $album . ''>' . ucfirst(basename($album)) . '</a><br><br />' . PHP_EOL; ?> |
quote:Op donderdag 15 september 2011 12:04 schreef Catbert het volgende:
Ik vermoed dat 'ie een overzicht wil tonen van alle relaties met de omzet daarbij. Als hij geen index heeft op het veld wat die informatie bevat in de grote tabel zal 'ie voor iedere rij uit zo'n overzicht iedere keer die hele tabel door moeten ploegen.
Dan heb je niet de juiste indices geplaatst.quote:Op donderdag 15 september 2011 10:32 schreef wdn het volgende:
Maar zelfs met `indexering` op de tabel is het veel en veels te langzaam (30+ secondes) om alles bij elkaar te rapen.
Wat een snelle conclusie, een kenner?quote:Op donderdag 15 september 2011 12:30 schreef Tijn het volgende:
[..]
Dan heb je niet de juiste indices geplaatst.
Als er verder geen informatie wordt gegeven, kun je verder niet zoveel zeggen dan "je hebt het verkeerd gedaan"quote:Op donderdag 15 september 2011 12:43 schreef GlowMouse het volgende:
[..]
Wat een snelle conclusie, een kenner?
Ik heb net query gemaakt en gekeken met explain wat hij toevoegt, maar ik zie wat hij doet, maar niet waar hoeveel tijd inging zitten en hoeveel percentage de belasting van een onderdeel was. Zou wel tof zijn als hij zegt dat een bepaalde join 60% van de belasting vraagt en dat je daar kunt beginnen voor verbetering.quote:Op donderdag 15 september 2011 14:02 schreef Intrepidity het volgende:
Probeer eens een 'explain' voor je query te gooien om te kijken waar prestatiewinst te behalen valt.
http://dev.mysql.com/doc/refman/5.0/en/explain.html
MySQL geeft echt weinig informatiequote:Op donderdag 15 september 2011 14:45 schreef Catbert het volgende:
Je weet niks als hij niet post welke indices hij heeft.
De MSSQL query explain geeft overigens gewoon aan hoe zwaar een bepaald deel is.
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 | /* Drop stored procedure task_generate_sales_invoice first. */ if exists (select 1 from sysobjects where name = 'task_generate_sales_invoice' and type = 'P') drop procedure task_generate_sales_invoice go create procedure task_generate_sales_invoice ( @until_date date , @customer_id id ) as begin -- Do not count affected rows for performance SET NOCOUNT ON -- Generate sales invoice insert into sales_invoice select isnull((select max(sales_invoice_no) + 1 from sales_invoice), 1), customer_id, getdate(), dateadd(day, 30, getdate()), 0, 0, 0 from customer c where c.customer_id = @customer_id and exists (select 1 from hour h join project p on (p.project_id = h.project_id) where h.sales_invoice_id is null and p.customer_id = c.customer_id) -- Connect hours to sales invoice. update h set sales_invoice_id = (select max(sales_invoice_id) from sales_invoice i where i.customer_id = p.customer_id) from hour h join project p on (p.project_id = h.project_id) where h.sales_invoice_id is null and p.customer_id = @customer_id and h.date <= @until_date end go |
1 2 | Msg 213, Level 16, State 1, Procedure task_generate_sales_invoice, Line 16 Insert Error: Column name or number of supplied values does not match table definition. |
Kolomnaam volgens mij.quote:Op vrijdag 16 september 2011 16:05 schreef ViPeRII het volgende:
Een van je tabelnamen die geselecteerd worden, bestaat niet
Onzin. Echt.quote:Op donderdag 15 september 2011 12:30 schreef Tijn het volgende:
[..]
Dan heb je niet de juiste indices geplaatst.
Nee, de index staat op de relatie natuurlijk (als ik die niet zet gaat mysql onderuitquote:Op donderdag 15 september 2011 12:04 schreef Catbert het volgende:
Ik vermoed dat 'ie een overzicht wil tonen van alle relaties met de omzet daarbij. Als hij geen index heeft op het veld wat die informatie bevat in de grote tabel zal 'ie voor zo'n overzicht iedere keer die hele tabel door moeten ploegen.
Idee om je factuur historie tabel te gaan sharden? Dat zou de boel een stuk moeten versnellen.quote:Op vrijdag 16 september 2011 17:13 schreef wdn het volgende:
[..]
Onzin. Echt.
[..]
Nee, de index staat op de relatie natuurlijk (als ik die niet zet gaat mysql onderuit).
Het is puur de hoeveelheid data (op dit moment 12.3 miljoen records) en hoeveelheid geheugen die ik kan gebruiken.
Maar uit de discussie hier kan ik al bepalen dat mijn vraag met 'nee' beantwoord moet worden: stored procedures is niet de oplossing.
relaties kent een 1500 records.
factuur historie 12.3m records.
factuur historie wordt op bedrijf, debiteur, contract factuur, regel doorlopen (en dat is de volledige primary key met debiteur ertussen). Geforceerd met een USE INDEX.
Ik had het idee om een soort van afgeleide tabel boven op deze tabel te leggen (met een PK bedrijf, debiteur, jaar, omzet).
1 2 3 4 5 | if($pages >= 1 && $page <= $pages){ for ($x=1; $x<=$pages; $x++) { echo ($x == $page) ? "<strong><a href='/nieuws/overzicht&page=".$x."'>".$x."</a></strong> " : "<a href='/nieuws/overzicht&page=".$x."'>".$x."</a> "; } } |
Dat is erg inefficiënt, je kunt beter in die for-loop $x in 1x flink ophogen als je bij de puntjes aanbelandt.quote:Op zondag 18 september 2011 18:53 schreef Tijn het volgende:
Gewoon een ifje in je for-loop die kijkt of $x kleiner is dan 3 en een ifje die kijkt of $x groter is dan $pages - 3 toch?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | if($pages >= 1 && $page <= $pages){ if($page >= 2){ $nextpage = $page+1; $previouspage = $page-1; if($page == $pages){ echo "<a href='overzicht&page=1'>Eerste</a> | <a href='overzicht&page=$previouspage'>Vorige</a> <strong>...<a href='overzicht&page=$page'>$page</a></strong>"; } else{ echo "<a href='overzicht&page=1'>Eerste</a> | <a href='overzicht&page=$previouspage'>Vorige</a> <strong>...<a href='overzicht&page=$page'>$page</a>...</strong> <a href='overzicht&page=".$nextpage."'>Volgende</a> | <a href='overzicht&page=$pages'>Laatste</a>"; } } else{ $nextpage = $page+1; echo "<strong><a href='overzicht&page=$page'> $page</a>...</strong> <a href='overzicht&page=".$nextpage."'>Volgende</a> | <a href='overzicht&page=$pages'>Laatste</a>"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | <?php /** * * Format base_url: 'pages.php?id=1&start=%d' * The %d string is for the count element * * Decoration array parameters * - param: Boolean $add_prevnext_text * - param: String $selected_format * - param: String $base_url_html * - param: String $spacer * - param: String $breaker * * @param String $base_url * @param Integer $num_items * @param Integer $per_page * @param Integer $start_item * @param Array $add_prevnext_text * @return String */ function GeneratePagination($base_url, $num_items, $per_page, $start_item, $decoration = array()) { $add_prevnext_text = false; $selected_format = '<b>%d</b>'; $base_url_html = sprintf('<a href="%s">%s</a>', $base_url, '%s'); $spacer = ' '; $breaker = ' ... '; $previous_text = 'Previous'; $next_text = 'Next'; if ( $num_items == 0 ) { throw new Exception('mag geen 0 zijn want die kun je niet delen door een getal.'); } if ( isset($decoration['add_prevnext_text']) === true ) { $add_prevnext_text = true; } if ( isset($decoration['previous_text']) === true ) { $previous_text = $decoration['previous_text']; } if ( isset($decoration['next_text']) === true ) { $next_text = $decoration['next_text']; } if ( isset($decoration['selected_format']) === true ) { $selected_format = $decoration['selected_format']; } if ( isset($decoration['base_url_html']) === true ) { $base_url_html = sprintf($decoration['base_url_html'], $base_url, '%s'); } if ( isset($decoration['spacer']) === true ) { $spacer = $decoration['spacer']; } if ( isset($decoration['breaker']) === true ) { $breaker = $decoration['breaker']; } $total_pages = ceil($num_items/$per_page); if ( $total_pages == 1 ) { return ''; } $on_page = floor($start_item / $per_page) + 1; $page_string = ''; if ( $total_pages > 10 ) { $init_page_max = ( $total_pages > 3 ) ? 3 : $total_pages; for($i = 1; $i < $init_page_max + 1; $i++) { $page_string .= ( $i == $on_page ) ? sprintf($selected_format, $i) : sprintf($base_url_html, ( ( $i - 1 ) * $per_page ), $i); if ( $i < $init_page_max ) { $page_string .= $spacer; } } if ( $total_pages > 3 ) { if ( $on_page > 1 && $on_page < $total_pages ) { $page_string .= ( $on_page > 5 ) ? $breaker : $spacer; $init_page_min = ( $on_page > 4 ) ? $on_page : 5; $init_page_max = ( $on_page < $total_pages - 4 ) ? $on_page : $total_pages - 4; for($i = $init_page_min - 1; $i < $init_page_max + 2; $i++) { $page_string .= ($i == $on_page) ? sprintf($selected_format, $i) : sprintf($base_url_html, ( ( $i - 1 ) * $per_page ), $i); if ( $i < $init_page_max + 1 ) { $page_string .= $spacer; } } $page_string .= ( $on_page < $total_pages - 4 ) ? $breaker : $spacer; } else { $page_string .= $breaker; } for($i = $total_pages - 2; $i < $total_pages + 1; $i++) { $page_string .= ( $i == $on_page ) ? sprintf($selected_format, $i) : sprintf($base_url_html, ( ( $i - 1 ) * $per_page ), $i); if( $i < $total_pages ) { $page_string .= $spacer; } } } } else { for( (int) $i = 1; $i < $total_pages + 1; $i++ ) { $page_string .= ( $i == $on_page ) ? sprintf($selected_format, $i) : sprintf($base_url_html, ( $i - 1 ) * $per_page, $i); if ( $i < $total_pages ) { $page_string .= $spacer; } } } if ( $add_prevnext_text ) { if ( $on_page > 1 ) { $page_string = sprintf($base_url_html, ( $on_page - 2 ) * $per_page, $previous_text) . ' ' . $page_string; } if ( $on_page < $total_pages ) { $page_string .= (string) ' ' . sprintf($base_url_html, $on_page * $per_page, $next_text); } } return $page_string; } ?> |
Ik vindquote:Op zondag 18 september 2011 22:30 schreef ralfie het volgende:
isset($decoration['breaker']) === true
isset poept toch alleen maar true of false? waarom die === true ?
1 2 3 | <?php if( functie($parameter) === true ) { } ?> |
1 2 3 | <?php if( functie($parameter)) { } ?> |
Bij isset() is dat nutteloos want die returned sowieso alleen true of false.quote:Op maandag 19 september 2011 07:47 schreef Pakspul het volgende:
En de === i.p.v. de == die gebruikelijk is in een statement: http://www.php.net/manual/en/language.operators.comparison.php. Die controleert ook of het type hetzelfde is.
En dan komt reden 1 om de hoek kijkenquote:Op maandag 19 september 2011 08:17 schreef mstx het volgende:
[..]
Bij isset() is dat nutteloos want die returned sowieso alleen true of false.
Bedanktquote:Op dinsdag 20 september 2011 11:19 schreef GlowMouse het volgende:
SELECT producten.naam, COUNT(*)
FROM verkocht
LEFT JOIN producten ON verkocht.pro_id=producten.pro_id
GROUP BY producten.pro_id
Geen COUNT(*) maar COUNT(id) doen. Bij * pakt hij de index niet meequote:Op dinsdag 20 september 2011 11:19 schreef GlowMouse het volgende:
SELECT producten.naam, COUNT(*)
FROM verkocht
LEFT JOIN producten ON verkocht.pro_id=producten.pro_id
GROUP BY producten.pro_id
Oja het moet inderdaad een count zijn, foutje.quote:Op dinsdag 20 september 2011 11:19 schreef GlowMouse het volgende:
SELECT producten.naam, COUNT(*)
FROM verkocht
LEFT JOIN producten ON verkocht.pro_id=producten.pro_id
GROUP BY producten.pro_id
COUNT(*) is exact hetzelfde als COUNT(kolom die NOT NULL is)quote:Op dinsdag 20 september 2011 11:22 schreef Intrepidity het volgende:
[..]
Geen COUNT(*) maar COUNT(id) doen. Bij * pakt hij de index niet mee
En de GROUP BY is ook op een andere tabel, anders krijg je producten met 0 bestellingen niet te zien.quote:Op dinsdag 20 september 2011 11:22 schreef mstx het volgende:
[..]
Oja het moet inderdaad een count zijn, foutje.
Klopt, maar toch pakt hij een eventuele index niet mee tenzij je expliciet een kolom met index specificeert. MySQL is een hacky stuk code. Zolang je gewoon de PK in een COUNT gebruikt is er niets aan het handjequote:Op dinsdag 20 september 2011 11:34 schreef GlowMouse het volgende:
[..]
COUNT(*) is exact hetzelfde als COUNT(kolom die NOT NULL is)
Ik heb hier aardig wat mee getest en dit heb ik nog nooit gezien. Heb je een dataset, een query, en een MySQL-versienummer waarbij dit optreedt?quote:Op dinsdag 20 september 2011 11:36 schreef Intrepidity het volgende:
[..]
Klopt, maar toch pakt hij een eventuele index niet mee tenzij je expliciet een kolom met index specificeert. MySQL is een hacky stuk code. Zolang je gewoon de PK in een COUNT gebruikt is er niets aan het handje
1 2 3 4 5 6 7 8 | CREATE TABLE `comments` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `content_id` timestamp NULL DEFAULT NULL, -- timestamp ja :D *snip* hoop blabla *snip* `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `by_content_id` (`content_id`,`created_at`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
1 2 3 4 5 6 7 8 9 10 11 | SELECT COUNT(*) FROM ( SELECT 1 FROM comments GROUP BY content_id HAVING MAX(created_at) > ( SELECT MAX(created_at) FROM comments WHERE content_id = FROM_UNIXTIME(1316465786) ) ) AS predecessors |
Ik heb nu geen tijd (@ werk), maar zal vanavond eens wat gaan testenquote:Op dinsdag 20 september 2011 11:56 schreef GlowMouse het volgende:
[..]
Ik heb hier aardig wat mee getest en dit heb ik nog nooit gezien. Heb je een dataset, een query, en een MySQL-versienummer waarbij dit optreedt?
quote:Op dinsdag 20 september 2011 11:57 schreef Thomass het volgende:
GlowMouse, hoe ben jij ooit zon MySQL-baas geworden als ik mag vragen?
1 2 3 4 5 6 7 | SELECT COUNT(DISTINCT content_id) FROM comments WHERE created_at > ( SELECT MAX(created_at) FROM comments WHERE content_id = FROM_UNIXTIME(1316465786) ) |
1 2 3 4 | SELECT COUNT(DISTINCT c1.content_id) FROM comments c1 LEFT JOIN c2 ON(c1.content_id=c2.content_id AND c2.created_at>[subquery eerst uitvoeren en het resultaat hier zetten]) WHERE c2.content_id IS NULL |
Deel 3 komt eraan: http://www.xaprb.com/blog(...)mysql-third-edition/quote:Op dinsdag 20 september 2011 12:04 schreef GlowMouse het volgende:
[..]
http://shop.oreilly.com/product/9780596101718.do en http://www.mysqlperformanceblog.com/ helemaal lezen, en veel uitproberen. De meeste kennis heb ik in een maandje of 2-3 wel verworven.
Binnen je applicatie heb je er niet zo veel aan afaik. Je gebruikt het direct op MySQL om je queries te optimaliseren voordat je ze in je applicatie gaat gebruiken.quote:Op dinsdag 20 september 2011 12:51 schreef Sitethief het volgende:
Is EXPLAIN ook goed in te zetten als je een PDO class hebt opgebouwd waarmee je al je queries afhandelt?
Het is verwarrend ja maar ik bedoelde wel een groter dan. Item met meest recent comment heeft 0 predecessors, t item met het op-ena-meest recente comment heeft 1 predecessor enz.quote:Op dinsdag 20 september 2011 12:14 schreef GlowMouse het volgende:
Volgens mij bedoel je op regel 6 een < ipv een >. Voor een < kun je zoiets doen:
[ code verwijderd ]
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 | mysql> show create table comments2\G *************************** 1. row *************************** Table: comments2 Create Table: CREATE TABLE `comments2` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `content_id` int(10) unsigned DEFAULT NULL, `created_at` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `by_content_id` (`content_id`,`created_at`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> select count(*) from comments2; +----------+ | count(*) | +----------+ | 2359296 | +----------+ 1 row in set (0.02 sec) mysql> select content_id, max(created_at) from comments2 group by content_id order by max(created_at) asc; +------------+-----------------+ | content_id | max(created_at) | +------------+-----------------+ | 1 | 3 | | 2 | 6 | *snip* | 2654208 | 5308416 | | 3981312 | 7962624 | +------------+-----------------+ 95 rows in set (0.04 sec) |
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 | mysql> SELECT COUNT(DISTINCT content_id) -> FROM comments2 -> WHERE created_at > ( -> SELECT MAX(created_at) -> FROM comments2 -> WHERE content_id = 2654208 -> ); +----------------------------+ | COUNT(DISTINCT content_id) | +----------------------------+ | 1 | +----------------------------+ 1 row in set (1.58 sec) mysql> SELECT COUNT(*) -> FROM ( -> SELECT 1 -> FROM comments2 -> GROUP BY content_id -> HAVING MAX(created_at) > ( -> SELECT MAX(created_at) -> FROM comments2 -> WHERE content_id = 2654208 -> ) -> ) AS predecessors; +----------+ | COUNT(*) | +----------+ | 1 | +----------+ 1 row in set (0.01 sec) |
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 | mysql> explain SELECT COUNT(*) -> FROM ( -> SELECT 1 -> FROM comments2 -> GROUP BY content_id -> HAVING MAX(created_at) > ( -> SELECT MAX(created_at) -> FROM comments2 -> WHERE content_id = 2654208 -> ) -> ) AS predecessors; +----+-------------+-----------+-------+---------------+---------------+---------+------+------+------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+-------+---------------+---------------+---------+------+------+------------------------------+ | 1 | PRIMARY | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away | | 2 | DERIVED | comments2 | range | NULL | by_content_id | 5 | NULL | 95 | Using index for group-by | | 3 | SUBQUERY | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away | +----+-------------+-----------+-------+---------------+---------------+---------+------+------+------------------------------+ 3 rows in set (0.01 sec) mysql> explain SELECT COUNT(DISTINCT content_id) -> FROM comments2 -> WHERE created_at > ( -> SELECT MAX(created_at) -> FROM comments2 -> WHERE content_id = 2654208 -> ); +----+-------------+-----------+-------+---------------+---------------+---------+------+---------+------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+-------+---------------+---------------+---------+------+---------+------------------------------+ | 1 | PRIMARY | comments2 | index | NULL | by_content_id | 9 | NULL | 2359296 | Using where; Using index | | 2 | SUBQUERY | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away | +----+-------------+-----------+-------+---------------+---------------+---------+------+---------+------------------------------+ 2 rows in set (0.00 sec) |
quote:Op dinsdag 20 september 2011 12:51 schreef Sitethief het volgende:
Is EXPLAIN ook goed in te zetten als je een PDO class hebt opgebouwd waarmee je al je queries afhandelt?
Dat hangt er maar net vanaf. Wij werken hier bv aan een behoorlijk grote (web)applicatie met enkele duizenden query's waarvan ook een flink deel automatisch gegenereerd is. We hebben pagina's met meer dan 100 query's en dan is het nogal fijn als je niet alles met de hand hoeft na te lopen. We hebben daarom op de devservers gewoon een analyser meelopen die voor iedere query ook een explain uitvoert en deze analyseert. Als het systeem denkt dat het beter kan zet hij netjes een warnings icoontje bij onze query log die onder iedere pagina staat met de values, tijd etc. Klik je er op krijg je de explain, backtraces en nog veel meer debug informatiequote:Op dinsdag 20 september 2011 13:00 schreef Intrepidity het volgende:
[..]
Binnen je applicatie heb je er niet zo veel aan afaik. Je gebruikt het direct op MySQL om je queries te optimaliseren voordat je ze in je applicatie gaat gebruiken.
Hmm een automatische tool die een samenvatting op iedere pagina zet vs een losse tool die je handmatig moet draaien, eerst een netwerk dump maken en dan analyseren. Ik weet het welquote:Op woensdag 21 september 2011 17:40 schreef GlowMouse het volgende:
Dit werkt veel lekkerder:
http://www.mysqlperforman(...)maatkit-and-tcpdump/
Je klinkt imo als een random persoon die gewoon de laatste hype na blaat.quote:
1 | SELECT * FROM `producten` WHERE `prijs` = 15 OR `prijs` = 25; |
Dat ben ik altijd wel gelukkigquote:Op woensdag 21 september 2011 21:29 schreef Diabox het volgende:
Maakt niet uit, zolang je maar consistent blijft in gebruik ervan (wel zo netjes).
number_format();quote:Op woensdag 21 september 2011 23:45 schreef Dalando het volgende:
Ik heb een getal. 1940239315. En ik moet het leesbaar maken via PHP, dus 1.940.239.315 ofzo. Hoe?
1 2 3 4 5 | SELECT count(t2.naam) AS totaal, t1.* FROM t1 LEFT JOIN t2 ON t1.naam = t2.naam WHERE gebruiker = 1 |
1 2 3 4 5 6 | 1 - fruit - appels - aard 1 1 - fruit - appels - aard 2 1 - fruit - appels - aard 3 1 - fruit - bananen - chiqita 1 - fruit - peren - peer 1 - fruit - kiwi - kiwi |
1 2 3 4 5 6 | 1 - fruit - appels - aard 1 - 3 1 - fruit - appels - aard 2 - 3 1 - fruit - appels - aard 3 - 3 1 - fruit - bananen - chiqita - 1 1 - fruit - peren - peer - 1 1 - fruit - kiwi - kiwi - 1 |
Er zijn ook PHP classes voorquote:
In woorden: match een forward slash, dan een of meer getallen, dan een of meer niet-forward slashes, dan het einde van de string.quote:Op vrijdag 23 september 2011 11:30 schreef Chandler het volgende:
Heeft iemand een simpel regexje liggen die het volgende doet?
ik heb een blog url
http://www.blog.nl/mijnblog/123-dit-is-mijn-titel.html
nu wil ik alleen het cijfer gedeelte van 123 ophalen en niets meer en niets minder. Nu kan ik natuurlijk opzoek gaan naar de eerste - maar wil dit eigenlijk liever met een regexje doenen zoals standaard lukt het mij niet.
Regexje net gedeleted door overschrijven van paginaiemand een linkje/voorbeeldje?
Waarom?quote:Op vrijdag 23 september 2011 11:30 schreef Chandler het volgende:
Nu kan ik natuurlijk opzoek gaan naar de eerste - maar wil dit eigenlijk liever met een regexje doen![]()
gebruik strpos om de eerste - (streepje) op te zoeken en substr dan vanaf aantal karakters dat je URL lang is tot de positie van het eerste streepje.quote:Op vrijdag 23 september 2011 11:30 schreef Chandler het volgende:
Heeft iemand een simpel regexje liggen die het volgende doet?
ik heb een blog url
http://www.blog.nl/mijnblog/123-dit-is-mijn-titel.html
nu wil ik alleen het cijfer gedeelte van 123 ophalen en niets meer en niets minder. Nu kan ik natuurlijk opzoek gaan naar de eerste - maar wil dit eigenlijk liever met een regexje doenen zoals standaard lukt het mij niet.
Regexje net gedeleted door overschrijven van paginaiemand een linkje/voorbeeldje?
Of een implode van de url op / en dan het laatste resultaat imploden op - en dan de eerste pakken ?quote:Op vrijdag 23 september 2011 13:13 schreef Pakspul het volgende:
[..]
gebruik strpos om de eerste - (streepje) op te zoeken en substr dan vanaf aantal karakters dat je URL lang is tot de positie van het eerste streepje.
quote:Op vrijdag 23 september 2011 13:49 schreef GI het volgende:
[..]
Of een implode van de url op / en dan het laatste resultaat imploden op - en dan de eerste pakken ?
1 2 3 | <?php current(explode("-", end(explode("/", "http://www.blog.nl/mijnblog/123-dit-is-mijn-titel.html")))); ?> |
Ja, want leesbare code krijg je natuurlijk door op die manier te coderen...quote:Op vrijdag 23 september 2011 14:04 schreef Thomass het volgende:
[..]
[ code verwijderd ]
Zeer leesbaar uiteraard
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |