Vroeger, toen slakkie nog een jonge god was, schreven we al die tags in UPPERCASE, zie de RFC: http://tools.ietf.org/html/rfc1866quote:Op donderdag 11 september 2008 19:32 schreef mcDavid het volgende:
Als je hoofdletters gebruikt is het gewoon geen correcte HMTL. Weet niet wie dat ooit verzonnen heeft, maar 't klopt gewoon niet.
Tering, dat was, euh, 1995 ofzo?quote:Op donderdag 11 september 2008 @ 22:34 schreef slakkie het volgende:
[..]
Vroeger, toen slakkie, nog een jonge god was, schreven we al die tags in UPPERCASE, zie de RFC: http://tools.ietf.org/html/rfc1866
Ghehe idd. De goeie ouwe tijdquote:Op donderdag 11 september 2008 22:34 schreef slakkie het volgende:
[..]
Vroeger, toen slakkie nog een jonge god was, schreven we al die tags in UPPERCASE, zie de RFC: http://tools.ietf.org/html/rfc1866
Html tags zijn case insensitive, dus hoofdletters en kleine letters zijn beide toegestaan. Pas bij (echte) xhtml moeten tags in kleine letters.quote:Op donderdag 11 september 2008 19:32 schreef mcDavid het volgende:
Als je hoofdletters gebruikt is het gewoon geen correcte HMTL. Weet niet wie dat ooit verzonnen heeft, maar 't klopt gewoon niet.
quote:Op vrijdag 12 september 2008 10:09 schreef saban het volgende:
Is het mogelijk om bijvoorbeeld de dagen terug te krijgen van een week.
Bijvoorbeeld week 37 als input moet terug geven: 08/09 09/09 10/09 11/09 12/09
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 | /* Stolen from http://nl.php.net/manual/en/function.date.php#84533 */ function firstkw($year) { $wtag = date('w', mktime(0,0,0,1,1,$year)); if ($wtag <= 4) { /* Mon to Tuesday */ $day = mktime(0,0,0,1,1-($wtag-1),$year); } else { /* Friday to sunday */ $day = mktime(0,0,0,1,1+(7-$wtag+1),$year); } return $day; } function weekno2date() { $args = func_get_args(); $num = count($args); if ($num >= 1) { if ($num ==2) { $year = array_pop($args); } else { $tmp = getdate(); $year = $tmp['year']; } $week = array_pop($args); $day = firstkw($year) + (($week -1 ) * 7 * 24 * 60 * 60); $arr = array(); for ($i = 0; $i < 7; $i++) { $arr[] = date("d/m/Y", $day); $day += 24 * 60 * 60; } return $arr; } /* If we land here we have an error */ trigger_error(sprintf("%s requires at least 1 parameter", __FUNCTION__), E_USER_WARNING); return null; } print_r(weekno2date(1)); print_r(weekno2date(37)); print_r(weekno2date(37, 2006)); print_r(weekno2date(37, 2010)); ?> |
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 | include_once("/home/wesleys/sbox/php/etc/env.php"); include_once("Util.php"); // get_microtime() function get_ext_split($file) { $arr = split("\.", $file); return end($arr); } function get_ext_psplit($file) { $arr = preg_split("/\./", $file); return end($arr); } function get_ext_pathinfo($file) { $arr = pathinfo($file); return $arr['extension']; } function get_ext_test($file, $callback, $max) { $start = get_microtime(); for ($i = 0; $i < $max; ++$i) { $callback($file); } $end = get_microtime(); printf("%s [run %s time(s)]: %.5f\n", $callback, $max, $end - $start); } $bestand = "file.txt"; foreach(array("get_ext_pathinfo", "get_ext_split", "get_ext_psplit") as $v) { get_ext_test($bestand, $v, 500000); } ?> |
try { /* stuff */ } catch (Exception $e || MyException $e) { /* more stuff */ }quote:Op zondag 14 september 2008 14:08 schreef super-muffin het volgende:
In het tweede plaatje ook de index vaststellen en in de eerste controleren of die al gebruikt is?
Ik heb ook een vraagje : ik heb een try/catch blok waarin verschillende exceptions gegooid kunnen worden. Nu wil ik bij 2 soorten exceptions dat het zelfde gehandeld word, en de rest wat anders.
In het kort dus : ik wil in 1 catch blok 2 soorten exceptions vangen. Hoe dat ik dat?
Je zou eventueel gewoon 2 catchblokken kunnen maken voor beide exceptions en daar dan een functie aanroepen...quote:Op zondag 14 september 2008 16:30 schreef super-muffin het volgende:
Nope, dan krijg ik een syntax error.
Kan het ook oplossen door alles te vangen in 1 blok en dan te kijken wat voor exception het is en dan de goede actie ondernemen. Niet heel erg netjes, maar het werkt wel.
Je kan het plaatje door een script laten server, waarbij je in het script een sessie variabele zet.quote:Op zaterdag 13 september 2008 22:17 schreef Light het volgende:
En dan wordt het wat lastiger. Bij het leveren van het eerste plaatje mag er een willekeurig plaatje worden gekozen. Dat gaat goed. Het tweede plaatje moet echter bij het eerste plaatje passen, maar de tweede request is al bij de server voordat de eerste klaar is. Is er een manier om te zorgen dat het tweede request met het eerste kan communiceren?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // Maak verbinding mysql_connect("lol", "lol", "lol"); // Selecteer de database mysql_select_db("oib1", $localhost); // Maak een SQL-query $sql = 'SELECT `user_name`,`user_posts` FROM `lz_users` ORDER BY `user_posts` DESC LIMIT 0, 60 '; // Voer die query uit $resultaat = mysql_query($sql); // Aantal rijen $aantal = mysql_num_rows($resultaat); echo "$aantal Top posters op het SWC:<br>\n"; // Maak een lus om alle items te laten zien while ($record = mysql_fetch_object($resultaat)) { echo "<b>$record->user_name</b> $record->user_posts <br>\n"; } ?> |
1 2 3 4 5 6 | Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in [[hierstond een url]]test.php on line 30 Top posters op het SWC: Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in [[hierstond een url]]test.php on line 34 |
1 2 3 | $resultaat = mysql_query($sql) or die(mysql_error()); ?> |
Met mysql_select_db probeer je de database te selecteren, maar dat lukt niet, want je geeft als 2e argument een ongedefinieerde variabele mee.quote:Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in [[hierstond een url]]test.php on line 21
1 2 3 | $localhost = mysql_connect("lol", "lol", "lol"); ?> |
Ik heb het maar zo opgelost :quote:Op zondag 14 september 2008 18:41 schreef slakkie het volgende:
[..]
Je zou eventueel gewoon 2 catchblokken kunnen maken voor beide exceptions en daar dan een functie aanroepen...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | try { /* */ } catch (Exception $e) { if ($e instanceof MyException OR $e instanceof MyOtherException) { /* afhandelen */ } else { /* afhandelen */ } } ?> |
Check, dat werkt. Het gaat ook goed bij simultane requests met een verschillend id, die dan een verschillend plaatje moeten opleveren. Perfecte oplossing dus.quote:Op zondag 14 september 2008 20:22 schreef Xcalibur het volgende:
[..]
Je kan het plaatje door een script laten server, waarbij je in het script een sessie variabele zet.
Door bij allebei de plaatjes te checken of de andere al gezet is moet je ze wel bij elkaar kunnen krijgen, ongeacht welke request het eerste uitgevoerd wodt
:Xquote:Op maandag 15 september 2008 17:03 schreef Tiemie het volgende:
Doe eens
[ code verwijderd ]
En je weet precies wáár het mis gaat.
1 |
quote:Op maandag 15 september 2008 22:27 schreef Light het volgende:
[..]
Check, dat werkt. Het gaat ook goed bij simultane requests met een verschillend id, die dan een verschillend plaatje moeten opleveren. Perfecte oplossing dus.
1 2 3 4 5 6 7 8 9 10 11 | $content = file_get_contents($file); $content = explode("\n", $content); $mayprint = true; $new_content; foreach($content as $v) { if (preg_match('/<body>/', $v) { $mayprint = false; } if (preg_match('/<\/body>/', $v) { $new_content .= "New Content" . "\n" ; $mayprint = true; } if ($mayprint) { $new_content .= $v . "\n"; } } ?> |
1 2 3 4 5 6 | <!-- stuff goes here !--> <body> %DYNAMIC_CONTENT% </body> </html> |
1 2 3 4 | $content = file_get_contents($template); $content = str_replace("%DYNAMIC_CONTENT%", "New content", $content); ?> |
1 2 | vraag</td> |
Wat dacht je van str_replace("\n", "", $tekst) ?quote:Op woensdag 17 september 2008 09:54 schreef Chandler het volgende:
Super slakkie!!! dat is idd handig, dan gelijk nog een vraag.
Stel je hebt het volgende
[ code verwijderd ]
hoe kan ik zorgen dat tussen de tags geen enters mogelijk zijn?
1 2 3 4 5 | <td>korte tekst</td> <td>Heel erg lange text </td> </tr> |
1 2 3 4 | <td>korte tekst</td> <td>Heel erg lange text </td> </tr> |
1 |
Dus je wilt een hele lange tekst zonder enters??quote:Op woensdag 17 september 2008 11:14 schreef Chandler het volgende:
op zich logisch dat je dat zou zeggen maar ik wil dit alleen binnen elementen
dus bv
[ code verwijderd ]
veranderen in
[ code verwijderd ]
want op jou manier zou het er zo uit zien
[ code verwijderd ]
Gebruikers zitten nooit in de broncodequote:Op woensdag 17 september 2008 11:17 schreef ursel het volgende:
[..]
Dus je wilt een hele lange tekst zonder enters??![]()
Denk je dat dat nog wel leesbaar blijft voor je gebruikers dan??
1 2 3 4 5 6 7 8 9 10 11 | $output = "<tr> <td>korte tekst</td> <td>Heel erg lange text </td> </tr>"; $output = str_replace("\n", " ", $output); $output = preg_replace("/(>)\s+(<)/", "$1\n$2", $output); $output = preg_replace("/ {2,}/", " ", $output); ?> |
Voor luie mensen is er ook nog zoiets als Tidyquote:Op woensdag 17 september 2008 11:14 schreef Chandler het volgende:
op zich logisch dat je dat zou zeggen maar ik wil dit alleen binnen elementen
dus bv
[ code verwijderd ]
veranderen in
[ code verwijderd ]
want op jou manier zou het er zo uit zien
[ code verwijderd ]
Ware het niet dat die eerste methode niet werkte in alle gevallen en de huidige methode wel. Plus dat deze methode factor 3 sneller is..quote:Op woensdag 17 september 2008 12:16 schreef GlowMouse het volgende:
De methode van Slakkie vind ik wel mooi. Je zou alleen nog rtrim kunnen gebruiken zodat indention behouden blijft, en regel 17 staat er voor niets.
Dat weet ik. Maar sommige producten hebben verschilende afmetingen. sommige hxb of hxbxd etc.quote:Op woensdag 17 september 2008 12:26 schreef GlowMouse het volgende:
Kolom met breedte, kolom met hoogte, en dan sorteren op breedte, op hoogte, of op het product van beide.
Ja dat kán wel, het is netter om apart op te slaan, maar als het sorteren alleen op eerste characters word gedaan zou je hem kunnen casten naar een decimal ;)quote:Op woensdag 17 september 2008 12:23 schreef _GdR_ het volgende:
Hallo, ik heb een probleempje waar ik vreemd genoeg nog nooit tegenaan gelopen bent.
Ik heb een database met product informatie. Daarin komen o.a. ook de afmetingen van het product te staan.
Nu moeten die uit gelezen worden van klein naar groot.
Maar omdat de afmetingingen geschreven worden als b.v.: 100 x 50 Kan ik dus geen float tabel gebruiken maar gewoon een varchar.
Nu heb ik het volgende wat uit gespuugd wordt:
10 x 10
100 x 20
120 x 10
20 x 5
Terwijl dus 20x5 op de 2de positie zal moeten komen.
Moet ik nu dus gewoon 2tabellen aanmaken (hoogte & breedte) of is hier een sql truukje voor?
Zojah vertel het me bespaard mij weer tijd. :)
Alvast bedankt.
1 2 3 | FROM tbl_producten ORDER BY afmeting2 ASC |
ik dank u hartelijk.quote:Op woensdag 17 september 2008 12:32 schreef Tiemie het volgende:
[..]
Ja dat kán wel, het is netter om apart op te slaan, maar als het sorteren alleen op eerste characters word gedaan zou je hem kunnen casten naar een decimal![]()
[ code verwijderd ]
Ik gebruik meestal htmlMineMail voor het versturen van mail.quote:Op woensdag 17 september 2008 13:12 schreef Doc.Brown het volgende:
Ik probeer een eenvoudige bevestigings e-mail te versturen via mail(); echter komt hij niet aan? Ik heb een vermoeden dat hij als spam wordt gezien, nu las ik wat over de headers ofzo?
Iemand enig idee?
Of anders een andere eenvoudige oplossing voor het verzenden van e-mail vanuit je PHP scriptje?
Klinkt goed, maar waar kan ik hem downloaden? Bij de Downloads pagina kan ik wel door de directories bladeren, maar als ik een PHP file download krijg ik een bestand van 0kb.quote:Op woensdag 17 september 2008 13:17 schreef Tiemie het volgende:
[..]
Ik gebruik meestal htmlMineMail voor het versturen van mail.
http://tiemez.nl/htmlMimeMail5/htmlMimeMail5.tar.gzquote:Op woensdag 17 september 2008 13:30 schreef Doc.Brown het volgende:
[..]
Klinkt goed, maar waar kan ik hem downloaden? Bij de Downloads pagina kan ik wel door de directories bladeren, maar als ik een PHP file download krijg ik een bestand van 0kb.
Thanks!quote:Op woensdag 17 september 2008 13:51 schreef Tiemie het volgende:
[..]
http://tiemez.nl/htmlMimeMail5/htmlMimeMail5.tar.gz
Ik krijg een beetje het idee dat je server geregistreerd staat als spamserver. Dit heeft weinig met PHP te maken, het mailtje wordt gewoon verzonden, het wordt er alleen door de andere e-mail dienst uitgefilterd.quote:Op woensdag 17 september 2008 @ 14:06 schreef Doc.Brown het volgende:
Wil niet echt werken helaas, als ik de default instellingen gebruik ontvang ik hem alleen op een gmail adres, en dan wel in de spam map. Op mn andere accounts komt hij niet aan. Als ik $mail->send(array(...), sendmail); gebruik dan komt hij ook niet aan.
Hoe doe jij het dan precies Tiemie?
Hm, ja dat zou best kunnen, onlangs kreeg ik nog alle mail terug die ik probeerde te verzenden met een melding dat de client host geblocked was. Maar als het goed is zou dat weer opgelost moeten zijn. Maar zou kunnen van niet dan ja. Zit er dus iemand op dezelfde server de boel goed te verzieken, was namelijk eerder ook al eens gebeurd.quote:Op woensdag 17 september 2008 14:17 schreef mcDavid het volgende:
[..]
Ik krijg een beetje het idee dat je server geregistreerd staat als spamserver. Dit heeft weinig met PHP te maken, het mailtje wordt gewoon verzonden, het wordt er alleen door de andere e-mail dienst uitgefilterd.
Dat idee heb ik ook. Ik heb met die class nooit dat een mail in de spam-box in gmail OF ongewenste mail (hotmail) komt.quote:Op woensdag 17 september 2008 14:17 schreef mcDavid het volgende:
[..]
Ik krijg een beetje het idee dat je server geregistreerd staat als spamserver. Dit heeft weinig met PHP te maken, het mailtje wordt gewoon verzonden, het wordt er alleen door de andere e-mail dienst uitgefilterd.
Hou wel rekening met het limiet dat gmail aanhoud. met bedrukking tot het aantal mails per uur/dag en aantal adressen (TO)quote:Op woensdag 17 september 2008 14:20 schreef Doc.Brown het volgende:
[..]
Dan maar proberen met een externe SMTP server te verbinden, bijvoorbeeld Gmail.
Ow.. wat voor limiet moet ik dan aan denken?quote:Op woensdag 17 september 2008 14:37 schreef Tiemie het volgende:
[..]
Dat idee heb ik ook. Ik heb met die class nooit dat een mail in de spam-box in gmail OF ongewenste mail (hotmail) komt.
[..]
Hou wel rekening met het limiet dat gmail aanhoud. met bedrukking tot het aantal mails per uur/dag en aantal adressen (TO)
Het gaat om een soort inschrijvingsscriptje en diegene die inschrijft krijgt een mailtje en ik krijg een mailtje. Dus per inschrijving worden 2 mailtjes verstuurd. Hoe vaak per dag wisselt eigenlijk. Maar geen 100+ per 24 uur.quote:In een poging spam en misbruik te bestrijden, schakelt Google je account tijdelijk uit als je een bericht verzendt aan meer dan 500 ontvangers, of als je een groot aantal berichten verzendt die niet bezorgd kunnen worden. Als je een POP- of IMAP-client gebruikt (Microsoft Outlook of Apple Mail, e.g.), kun je slechts een bericht verzenden aan 100 mensen tegelijk. Je account wordt binnen 24 uur weer ingeschakeld.
Dat zou dan goed moeten gaan, zolang je maar niet mailtjes naar 100 of meer mensen tegelijk gaat sturen...quote:Op woensdag 17 september 2008 @ 14:53 schreef Doc.Brown het volgende:
[..]
Ow.. wat voor limiet moet ik dan aan denken?
Edit: is dat dit limiet?
[..]
Het gaat om een soort inschrijvingsscriptje en diegene die inschrijft krijgt een mailtje en ik krijg een mailtje. Dus per inschrijving worden 2 mailtjes verstuurd. Hoe vaak per dag wisselt eigenlijk.
Gelukkigquote:Op woensdag 17 september 2008 15:13 schreef mcDavid het volgende:
[..]
Dat zou dan goed moeten gaan, zolang je maar niet mailtjes naar 100 of meer mensen tegelijk gaat sturen...
Just to be shure zou je een nieuwe gmail account aan kunnen maken, en die koppelen aan je eigen account.
Ohja en pas op dat je je script goed beveiligd.. het zou zonde zijn als je straks geblokkeerd bent doordat één of andere spambot je mailform gevonden heeft.
alle client-side scripts e.d. kunnen aangepast worden. Dus het is altijd zaak dat je alle variabelen die je met PHP ophaalt d.m.v. $_GET, $_POST of $_REQUEST checkt of ze geen schadelijke stukjes php-code (of in dit geval e-mail header info) o.i.d. bevatten.quote:Op woensdag 17 september 2008 @ 15:54 schreef Doc.Brown het volgende:
[..]
Gelukkig![]()
Hmja beveiligen, het is niet zo zeer een mailform maar een onderdeel van een script. Heb dus een inschrijfformulier waar men hun NAW gegevens etc. kunnen invullen. Na submit wordt het weggeschreven en een standaard mailtje met enkele variabelen verstuurd naar diegene die ingeschreven heeft. Zelf ontvang ik dan ook nog een standaard mailtje.
Dus het zal wel meevallen vermoed ik met spambots?
Ik had niet zoveel tijd, maar deze is nog iets mooier omdat indention behouden blijft.quote:Op woensdag 17 september 2008 12:30 schreef slakkie het volgende:
[..]
Ware het niet dat die eerste methode niet werkte in alle gevallen en de huidige methode wel. Plus dat deze methode factor 3 sneller is..
1 2 3 | $output = preg_replace("/([^>]+)\\n([^<]+)/", "$1 $2", $output); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $output = "<tr> <td>korte tekst</td> <td>Heel erg lange text </td> <td>hello </td> </tr> <tr>"; function parse_output1($output) { $output = preg_replace("/([^>]+)\n(^<]+)/", "$1 $2", $output); return preg_replace("/(\S+) {2,}/", "$1 ", $output) . "\n"; } function parse_output2($output) { $output = str_replace("\n", " ", $output); $output = preg_replace("/(>)\s+(<)/", "$1\n$2", $output); return preg_replace("/ {2,}/", " ", $output) . "\n"; } print parse_output1($output) . "\n"; print parse_output2($output) . "\n"; ?> |
1 2 3 4 5 6 7 8 9 10 11 | <td>korte tekst</td> <td>Heel erg lange text </td> <td>hello </td> </tr> <tr> <tr> <td>korte tekst</td> <td>Heel erg lange text </td> <td>hello </td> </tr> <tr> |
Dankje voor je hulpquote:Op woensdag 17 september 2008 16:48 schreef mcDavid het volgende:
[..]
alle client-side scripts e.d. kunnen aangepast worden. Dus het is altijd zaak dat je alle variabelen die je met PHP ophaalt d.m.v. $_GET, $_POST of $_REQUEST checkt of ze geen schadelijke stukjes php-code (of in dit geval e-mail header info) o.i.d. bevatten.
http://nl.php.net/manual/en/intro.filter.php FILTER_SANITIZE_EMAIL is een handige in deze.
Kleine moeite om te zorgen dat regels die op een tag eindigen niet meegenomen mogen wordenquote:Op woensdag 17 september 2008 18:04 schreef slakkie het volgende:
je behoudt indentation, maar je breekt andere dingen:
[ code verwijderd ]
[ code verwijderd ]
1 2 3 | How is your world today? |
1 2 3 4 | <td>Hello _world_</td> <td>Hello world</td> </tr> |
1 2 3 4 5 6 7 8 9 10 | $str = '<tr> <td>Hello _world_</td> <td>Hello world</td>world world </tr>'; $str = preg_replace('/([^_])world([^_])/', '$1hoi!$2', $str); echo $str ?> |
1 2 3 4 5 | <td>Hello _world_</td> <td>Hello hoi!</td>hoi! hoi! </tr> |
http://nl.php.net/manual/en/intro.filter.phpquote:Op donderdag 18 september 2008 @ 12:51 schreef Chandler het volgende:
Ik ben dus al aardig op de goede wegen hoe is het mogelijk om alle karakters te blokken behalve tekstuele tekens??
1 |
1 2 3 4 5 6 7 8 9 10 11 | \n linefeed (LF or 0x0A [img]http://forum.fok.nl/templates/foksilver/i/p/10.gif[/img] in ASCII) \r carriage return (CR or 0x0D [img]http://forum.fok.nl/templates/foksilver/i/p/13.gif[/img] in ASCII) \t horizontal tab (HT or 0x09 (9) in ASCII) \v vertical tab (VT or 0x0B [img]http://forum.fok.nl/templates/foksilver/i/p/11.gif[/img] in ASCII) (since PHP 5.2.5) \f form feed (FF or 0x0C [img]http://forum.fok.nl/templates/foksilver/i/p/12.gif[/img] in ASCII) (since PHP 5.2.5) \\ backslash \$ dollar sign \" double-quote \[0-7]{1,3} the sequence of characters matching the regular expression is a character in octal notation \x[0-9A-Fa-f]{1,2} the sequence of characters matching the regular expression is a character in hexadecimal notation |
Of bijvoorbeeldquote:Op donderdag 18 september 2008 13:10 schreef Chandler het volgende:
Ik doelde op alle karakters behalve de tekstuele en nummerieke.
Hmm, nu kom ik achter een slash in de tekst niet mogelijk is :D ik dacht dit te verhelpen door er een \ voor te zetten maar dat werkt niet? anyone?
1/2Procent
[ code verwijderd ]
Bij welke karakters moet escapen? of hoe?
1 |
In principe "moet" je een regexp binnen /'es plaatsen: /regexp/, maar je mag het ook binnen # plaatsen, mits je dezelfde characters gebruikt. Als je bijv. een regexp met #regexp# klopt hoef je de / niet te escapen, dus ipv: /\/var\/log\/bla/ kan je dan #/var/log/bla# gebruiken. Zie http://perldoc.perl.org/perlretut.html (onder part 1 basic). Ik heb het zo 123 niet kunnen vinden in de PHP documentatie.quote:Op donderdag 18 september 2008 21:56 schreef Chandler het volgende:
huh? heb je ook een beschrijving van de #?
In PHP mag je in principe alles gebruiken, behalve de backslash (\) en alfanumerieke tekens. Zie ook http://nl.php.net/manual/en/intro.pcre.phpquote:Op donderdag 18 september 2008 22:19 schreef slakkie het volgende:
[..]
In principe "moet" je een regexp binnen /'es plaatsen: /regexp/, maar je mag het ook binnen # plaatsen, mits je dezelfde characters gebruikt. Als je bijv. een regexp met #regexp# klopt hoef je de / niet te escapen, dus ipv: /\/var\/log\/bla/ kan je dan #/var/log/bla# gebruiken. Zie http://perldoc.perl.org/perlretut.html (onder part 1 basic). Ik heb het zo 123 niet kunnen vinden in de PHP documentatie.
Dat staat gewoon in de introductie :Pquote:Op donderdag 18 september 2008 22:19 schreef slakkie het volgende:
Ik heb het zo 123 niet kunnen vinden in de PHP documentatie.
quote:The expression must be enclosed in the delimiters, a forward slash (/), for example. Any character can be used for delimiter as long as it's not alphanumeric or backslash (\)
1 |
1 |
Daar heb ik niet gekeken, zat hier te gluren: http://nl2.php.net/manual/en/reference.pcre.pattern.syntax.phpquote:Op donderdag 18 september 2008 22:45 schreef SuperRembo het volgende:
Dat staat gewoon in de introductie
niet dat het in de verste verte maar iets met PHP of MySQL te maken heeft, maar als je alle declaraties voor een psuedo-class ook aan de gewone class meegeeft, zal er weinig veranderen inderdaad.quote:Op vrijdag 19 september 2008 @ 03:22 schreef Cracka-ass het volgende:
Kan iemand mij vertellen waarom mijn button 'active' blijft? Hij blijft altijd ingedrukt zodra ie eenmaal is aangeklikt:
[ code verwijderd ]
Ok, thanks.quote:Op vrijdag 19 september 2008 06:42 schreef slakkie het volgende:
Oftewel, stel je css vragen hier: [CSS] voor dummies - deel 9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | for ($x = 0; $x < $items; $x++) { $list = mysql_fetch_object($query); $searchFor[] = '#([^_])' . $list->zoek . '([^_])#'; $searchFor[] = '#([^_])' . ucFirst(strtolower($list->zoek)) . '([^_])#'; $searchFor[] = '#([^_])' . strtolower($list->zoek) . '([^_])#'; $replace[] = '$1' . $list->vervang . '$2'; $replace[] = '$1' . $list->vervang . '$2'; $replace[] = '$1' . $list->vervang . '$2'; $text = preg_replace($searchFor, $replace, $text); } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | for ($x = 0; $x < $items; $x++) { $list = mysql_fetch_object($query); $searchFor[] = '#([^_])' . $list->zoek . '([^_])#'; $searchFor[] = '#([^_])' . ucFirst(strtolower($list->zoek)) . '([^_])#'; $searchFor[] = '#([^_])' . strtolower($list->zoek) . '([^_])#'; $replace[] = '$1' . $list->vervang . '$2'; $replace[] = '$1' . $list->vervang . '$2'; $replace[] = '$1' . $list->vervang . '$2'; } $text = preg_replace($searchFor, $replace, $text); ?> |
Je kunt kijken of case insensitve searches sneller zijn als drie losse. Verder kun je proberen je [^_]'s te vervangen door assertions ik kan me voorstellen dat met name die eerste sneller werkt als assertionquote:Op vrijdag 19 september 2008 11:03 schreef Chandler het volgende:
Mensen, ik heb een vraag over preg_replace, het is nogal een slome functieis er ook een manier om het sneller te maken? want ik moet namelijk ruim 600 queries doen met preg_replace en dit duurt echt eeuwen!
Ik heb 50% besparing weten te behalen
oude structuur
[ code verwijderd ]
nieuwe structuur:
[ code verwijderd ]
Maar volgens mij kan het nóg sneller!!!
quote:Assertions
An assertion is a test on the characters following or preceding the current matching point that does not actually consume any characters. The simple assertions coded as \b, \B, \A, \Z, \z, ^ and $ are described above. More complicated assertions are coded as subpatterns. There are two kinds: those that look ahead of the current position in the subject string, and those that look behind it.
An assertion subpattern is matched in the normal way, except that it does not cause the current matching position to be changed. Lookahead assertions start with (?= for positive assertions and (?! for negative assertions. For example, \w+(?=;) matches a word followed by a semicolon, but does not include the semicolon in the match, and foo(?!bar) matches any occurrence of "foo" that is not followed by "bar". Note that the apparently similar pattern (?!foo)bar does not find an occurrence of "bar" that is preceded by something other than "foo"; it finds any occurrence of "bar" whatsoever, because the assertion (?!foo) is always TRUE when the next three characters are "bar". A lookbehind assertion is needed to achieve this effect.
Lookbehind assertions start with (?<= for positive assertions and (?<! for negative assertions. For example, (?<!foo)bar does find an occurrence of "bar" that is not preceded by "foo". The contents of a lookbehind assertion are restricted such that all the strings it matches must have a fixed length. However, if there are several alternatives, they do not all have to have the same fixed length. Thus (?<=bullock|donkey) is permitted, but (?<!dogs?|cats?) causes an error at compile time. Branches that match different length strings are permitted only at the top level of a lookbehind assertion. This is an extension compared with Perl 5.005, which requires all branches to match the same length of string. An assertion such as (?<=ab(c|de)) is not permitted, because its single top-level branch can match two different lengths, but it is acceptable if rewritten to use two top-level branches: (?<=abc|abde) The implementation of lookbehind assertions is, for each alternative, to temporarily move the current position back by the fixed width and then try to match. If there are insufficient characters before the current position, the match is deemed to fail. Lookbehinds in conjunction with once-only subpatterns can be particularly useful for matching at the ends of strings; an example is given at the end of the section on once-only subpatterns.
Several assertions (of any sort) may occur in succession. For example, (?<=\d{3})(?<!999)foo matches "foo" preceded by three digits that are not "999". Notice that each of the assertions is applied independently at the same point in the subject string. First there is a check that the previous three characters are all digits, then there is a check that the same three characters are not "999". This pattern does not match "foo" preceded by six characters, the first of which are digits and the last three of which are not "999". For example, it doesn't match "123abcfoo". A pattern to do that is (?<=\d{3}...)(?<!999)foo
Het is natuurlijk ook geen handig syteem als elk woord mogelijk vervangen kan worden, behalve als er een underscore voor en achter staat. Kan je dat niet omdraaien? Dat zou vele malen sneller zijn.quote:Op vrijdag 19 september 2008 11:03 schreef Chandler het volgende:
Maar volgens mij kan het nóg sneller!!!
array_map("round",$Array);quote:Op dinsdag 23 september 2008 11:52 schreef Chandler het volgende:
Hoe kan ik simpel alle values in een array afronden? zonder foreach oid te gebruiken? ik heb al gekeken bij array_walk / array_map maar kan daar weinig uit wijs worden. Kan iemand mij vertellen welke functie te gebruiken is met verwijzing naar een voorbeeld oid?
http://www.php.net/manual/en/function.wordwrap.php hier staat een mooi voorbeeld daarvan. ik zoek nog even door voor die enter -> brquote:Op dinsdag 23 september 2008 @ 14:33 schreef Pizzahut het volgende:
wat ik dus zoek:
Ik ben bezig met een soort van nieuwssysteem/blog
Nu heb ik een tekst ingevoerd zoals ik nu gedaan heb. Nu wil ik dat er na zoveel woorden een <br> komt o.i.d. of dat als ik een enter invoer dat er ook daadwerkelijk een enter inkomt.
is dit mogelijk? Volgens mij moet ik iets met explode() doen als ik na een aantal woorden een br wil hebben, maar wat moet ik doen als ik automatisch een enter wil?
Ik denk dat je niet om die stof heen komt. In ieder geval, ik heb veel gehad aan het boek 'PHP5 : Objects, Patterns and Practices'quote:Op dinsdag 23 september 2008 20:23 schreef spaceninjapirate het volgende:
Ik ben al een tijdje met php bezig en wil me gaan verdiepen in het objectgeoriënteerd programeren in deze taal. Nu heb ik al wat gezocht op onze grote vriend google, maar de tutorials die ik daar vind zijn oud, incompleet of worden zo hard afgekraakt in de comments dat ik er niet eens 1 letter van wil gaan overtypen![]()
Nu vroeg ik me af of iemand hier nog een betere recource weet waar echt in de uitleg ook echt iets gebouwd word ipv de stof te bespreken. Als ik er echt iets mee kan bouwen begrijp ik het vaak stukken sneller!![]()
Iemand?
Het is een afweging die je moet maken. De ene oplossing (uit de database halen) voegt een bepaalde x tijd toe aan iedere handeling, terwijl de andere oplossing dit niet doet maar y meer schijfruimte gebruikt. Ik denk dat je in dit geval de gebruikersgegevens beter niet nog eens extra in een sessie moet gaan opslaan. Het is hergebruik van gegevens voor slechts een minimale tijdwinst.quote:Op woensdag 24 september 2008 21:33 schreef Likkende_Lassie het volgende:
Even een vraagje,
Ik doe het volgende altijd: Als een gebruiker inlogd, sla ik de gegevens als voornaam, achternaam, adres, gender etc op in een sessie. Als ik de gegevens nodig heb lees ik ze altijd uit de sessie dmv $_SESSION['gebruiker']['voornaam'].
Maar nu is het zo dat er extreem veel bezoekers gaan komen. Is het dan beter om de info uit de tabel van de database te halen (elke keer weer), of toch de sessie blijven gebruiken?
nee. eval() is sowiezo een slecht gebruik als je code optimaal wil gebruiken, ga je al je meuk voor je eval() uit een database halen ben je dubbel zo slecht bezig... Een klasse die modules bijhoudt en de benodigde php's zelf include() is vele malen efficienterquote:Op woensdag 24 september 2008 23:33 schreef Likkende_Lassie het volgende:
Ok, database dus!
Dan een ander vraagje, stop nu al mijn functies in 1 map op de webservers.
Ik zou eventueel ook de functies in een tabel kunnen zetten en ze vervolgens daar uit laden dmv Eval(), is dit een goed idee? Ik doe dit momenteel ook met al mijn php pagina's.
quote:Op donderdag 25 september 2008 15:56 schreef TommyGun het volgende:
Dat is ook weer zo ja. Maar goed, waar zou ik dan aan moeten denken?
quote:Op donderdag 25 september 2008 15:45 schreef Xcalibur het volgende:
ik zou toch wel een loginsysteem overwegen dus!
Dat vraag ik mij inderdaad ook af.. Ik denk dat het met templates werkt die je include na het scriptquote:Op vrijdag 26 september 2008 13:04 schreef mcDavid het volgende:
mensen ik heb even een praktische vraag.
Ik ben voor het eerst een iets 'groter' php-project begonnen. Mijn vraag is: wat is een handige manier om de HTML op te bouwen? Tot nu toe had ik altijd gewoon een los script, met daaronder de HTML code, waar op de goeie plekken php-regeltjes stonden om de benodigde bestanden te includen. Maar ik heb het idee dat het handiger kan
Hoe lossen jullie zoiets meestal op?
Smarty => http://www.smarty.netquote:Op vrijdag 26 september 2008 13:04 schreef mcDavid het volgende:
mensen ik heb even een praktische vraag.
Ik ben voor het eerst een iets 'groter' php-project begonnen. Mijn vraag is: wat is een handige manier om de HTML op te bouwen? Tot nu toe had ik altijd gewoon een los script, met daaronder de HTML code, waar op de goeie plekken php-regeltjes stonden om de benodigde bestanden te includen. Maar ik heb het idee dat het handiger kan
Hoe lossen jullie zoiets meestal op?
Korte uitleg en ervaring?quote:Op vrijdag 26 september 2008 13:07 schreef NikkelCobalt het volgende:
[..]
Smarty => http://www.smarty.net
Je scheidt de html van je phpcode dmv templates. Aparte bestanden waarin je gebruik maakt van de smarty code.quote:
Smarty is zeker wel interesant..quote:Op vrijdag 26 september 2008 13:30 schreef mcDavid het volgende:
ah ik zie het al. Een template file dus, met op de goeie posities {$variable}
vervolgens is het een kwestie van lekker er op los scripten, en aan het einde die template-file openen en echo'en in dubbele quotes!
Ik zal dat smarty eens proberen te installeren, ziet er interessant uit!
Euhm, dat ligt natuurlijk helemaal aan je eigen opzet.quote:Op vrijdag 26 september 2008 13:29 schreef Chandler het volgende:
Weet iemand een tutoriaal of voorbeeld code hoe je een Plugin systeem kan maken waarbij je dus gebruik kunt maken van externe plugins (die je natuurlijk ook weer zelf schrijft!)
Het is geen subproject meer. Waarom weet ik niet. Las het ook net. Schijnt weinig informatie over te zijnquote:Op vrijdag 26 september 2008 13:47 schreef ursel het volgende:
[..]
Smarty is zeker wel interesant..
Misschien ook wijs om eens bij een framework te kijken, zoals Zend Framework of Prado.
Iemand trouwens een idee waarom smarty sinds kort niet meer ondersteund wordt door PHP?
Ik gebruik nog helemaal niets, ik wil gewoon leren hoe een script interactief kan werken met externe plugins.quote:Op vrijdag 26 september 2008 14:45 schreef super-muffin het volgende:
Euhm, dat ligt natuurlijk helemaal aan je eigen opzet.Gebruik je een template systeem of iets?
Heel simpel gezegd heb ik een database waarin een aantal plugin-namen staan opgeslagen (welke geinstalleerd zijn zegmaar). Er bestaat een map/php bestand met diezelfde naam, en bij het inladen van de plugins word dat bestand geincluded. Dezelfde pluginnaam is ook de daadwerkelijke klasse-naam die je dus kunt aanroepen.quote:Op vrijdag 26 september 2008 13:29 schreef Chandler het volgende:
Weet iemand een tutoriaal of voorbeeld code hoe je een Plugin systeem kan maken waarbij je dus gebruik kunt maken van externe plugins (die je natuurlijk ook weer zelf schrijft!)
1 2 3 4 5 6 7 8 | { echo "boe"; } elseif($_POST['submit'] AND $_POST["code"] AND $_POST["mail"]) { echo "boe"; } |
1 2 3 4 5 6 | if( ( isset($_GET['activatie']) && isset($_GET['mail']) ) || ( isset($_POST['submit']) && isset($_POST['code']) && isset($_POST['mail']) ) ) { // w00t } ?> |
Het is niet mysql_connect, maar $con = mysql_connect(), en dan mysql_select_db("db", $con). voor de rest zitten er geen fouten in je codequote:Op maandag 15 september 2008 16:55 schreef Sitethief het volgende:
Ik kon, ooit, in een ver verleden php scriptjes schrijven.
Nu wou ik laatst een simpele php pagina schrijven maar nu lukt het me niet meer.
[ code verwijderd ]
Nee, lol is niet het echte wachtwoord
Ik krijg deze foutmelding:
[ code verwijderd ]
Waarschijnlijk heb ik de verkeerde functies gebruikt om te doen wat ik wil.
isset() is hier overbodigquote:Op zaterdag 27 september 2008 13:54 schreef aardappel het volgende:
Ik heb even snel een grote dummie vraagik heb nu dit:
[ code verwijderd ]
nou wil ik deze bij elkaar voegen, dus in de vorm van: "GETactivatie and GETmail moeten aanwezig zijn" OF "POSTsubmit en POSTcode en POSTmail moeten aanwezig zijn"
nou is het heel makkelijk om dat in een if te zetten, maar ik ben het gewoon kwijt en kan het niet vinden op de phpsite. Wie helpt
1 2 | } |
Wat als iemand code 0 invoert, of het e-mailadresveld leeglaat? Zoiets check je in het algemeen later pas, en dan heb je nu wel isset nodig.quote:Op zaterdag 27 september 2008 14:48 schreef illusions het volgende:
[..]
isset() is hier overbodig
[ code verwijderd ]
Als je 0 invoert of leeg laat is de $_POST of $_GET nog steeds true bij isset, aangezien deze nog wel meegegeven worden. Check dan op empty of hetgeen je er denkt te verwachten.quote:Op zaterdag 27 september 2008 14:54 schreef GlowMouse het volgende:
[..]
Wat als iemand code 0 invoert, of het e-mailadresveld leeglaat? Zoiets check je in het algemeen later pas, en dan heb je nu wel isset nodig.
Dat is ook ongeveer wat ik wil, maar ook wil ik middels de plugins bepaalde gegevens kunnen achterhalen van de hoofdmodule en bepaalde acties kunnen triggeren (bv data validatie, data streams aanpassen etc)quote:Op vrijdag 26 september 2008 19:32 schreef GVRuud het volgende:
Heel simpel gezegd heb ik een database waarin een aantal plugin-namen staan opgeslagen (welke geinstalleerd zijn zegmaar). Er bestaat een map/php bestand met diezelfde naam, en bij het inladen van de plugins word dat bestand geincluded. Dezelfde pluginnaam is ook de daadwerkelijke klasse-naam die je dus kunt aanroepen.
Aan het begin van je script zou je dus alle bestanden kunnen includen die in de plugin-tabel staan, maar in mijn eigen CMS wordt dat pas gedaan wanneer dit daadwerkelijk nodig is zodat ik niet teveel onnodige zooi in hoef te laden.
1 2 3 4 5 | FROM PRES_HOBBY P1, PRES_HOBBY P2 WHERE (SELECT COUNT(*) FROM PRES_HOBBY WHERE P1.PRES_NAME = PRES_NAME) = (SELECT COUNT(*) FROM PRES_HOBBY WHERE P2.PRES_NAME = PRES_NAME) AND NOT P1.PRES_NAME = P2.PRES_NAME AND (SELECT HOBBY FROM PRES_HOBBY WHERE PRES_NAME = P1.PRES_NAME) =ALL (SELECT HOBBY FROM PRES_HOBBY WHERE PRES_NAME = P2.PRES_NAME) |
Ondanks de argumenten van GlowMouse en mij? Heb je daar een reden voor?quote:Op zondag 28 september 2008 07:36 schreef Likkende_Lassie het volgende:
Ik vind dat hele vereiste van die isset functie maar onzin!
Uiteraard maar in de opdracht (is voor school), staat dat niet naar efficientie/performance wordt gekeken.quote:Op zondag 28 september 2008 11:36 schreef GlowMouse het volgende:
Er staat vaak PRES_NAME zonder tabelaanduiding in je queries. Het is mij onduidelijk op welke tabel dat slaat.
Die laatste where zou ik doen met verzamelingen. De ene MINUS de ander, en de ander MINUS de ene moet leeg zijn. Hier je een MINUS implementeert staat hier uitgelegd.
Ik hoop dat je wel doorhebt dat een query als deze de performance sterk beïnvloedt.
1 2 3 4 5 | FROM PRES_HOBBY P1, PRES_HOBBY P2 WHERE (SELECT COUNT(*) FROM PRES_HOBBY P4 WHERE P1.PRES_NAME = P4.PRES_NAME) = (SELECT COUNT(*) FROM PRES_HOBBY P5 WHERE P2.PRES_NAME = P5.PRES_NAME) AND NOT P1.PRES_NAME = P2.PRES_NAME AND (SELECT HOBBY FROM PRES_HOBBY P6 WHERE P6.PRES_NAME = P1.PRES_NAME) =ALL (SELECT HOBBY FROM PRES_HOBBY P7 WHERE P7.PRES_NAME = P2.PRES_NAME) |
Ik heb zelf een soort van basisplugin-klasse gemaakt via welke alle cms-brede onderdelen/gegevens (zoals db toegang, settings ed) toegankelijk zijn. Op het moment dat ik een nieuwe plugin schrijf, wordt deze afgeleid van de basisklasse en heb ik dus standaard alle basisfunctionaliteit beschikbaar zodat ik meteen aan de daadwerkelijke plugin kan beginnen.quote:Op zondag 28 september 2008 10:39 schreef Chandler het volgende:
[..]
Dat is ook ongeveer wat ik wil, maar ook wil ik middels de plugins bepaalde gegevens kunnen achterhalen van de hoofdmodule en bepaalde acties kunnen triggeren (bv data validatie, data streams aanpassen etc)
Ik was ook eens aan het kijken, wat ik hier o.a. lees over plugins, waarin alles in een database gekwakt wordt..quote:Op maandag 29 september 2008 11:19 schreef Chandler het volgende:
Maar heb je ook wat leesvoer m.b.t. een plugin systeem te maken? een opzet vanwaaruit ik iets kan proberen te maken?
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 | abstract class BasePlugin { protected $db; public function __construct() { $this->db = DatabaseSingleton::getInstance(); // Etc... } abstract public function execute(); } class BlaatPlugin extends BasePlugin { public function execute() { // Via $this->db kan ik vanalles op de database querien echo "BlaatPlugin wordt uitgevoerd!"; } } class SchaapPlugin extends BasePlugin { public function execute() { // Via $this->db kan ik vanalles op de database querien echo "SchaapPlugin wordt uitgevoerd!"; } } $plugins = array(); $plugins[] = new BlaatPlugin(); $plugins[] = new SchaapPlugin(); foreach( $plugins as &$plugin ) { $plugin->execute(); } ?> |
1 2 | SchaapPlugin wordt uitgevoerd! |
1 2 3 4 | $plugin = $pluginManager->getPluginInstance("VerifyContent"); $content = $plugin->execute($content); ?> |
1 2 3 4 5 6 7 8 | DISTINCT(keyword) as keyword, SUM(clicks) AS clicks, SUM(accounts) AS accounts, SUM(trials) AS trials, SUM(sales) AS sales FROM sales ORDER BY sales ASC;"; |
1 |
thanks het werktquote:Op dinsdag 30 september 2008 11:11 schreef DionysuZ het volgende:
SUM() is een group by functie. Als je deze zonder GROUP BY gebruikt krijg je uiteraard 1 resultaat terug
Daar voor heb je de manager.quote:Op dinsdag 30 september 2008 09:18 schreef Chandler het volgende:
Dat snap ik, maar stel ik wil plugins gebruiken op bepaalde plaatsen, bv om content te veriferen, of data uit te lezen, dan is het niet handig om het zo te executen..
Ik heb zelf nog weer een poging gedaan om hier wat over te vinden qua stof om te lezen maar helaas
Dat zou ik idd kunnen doen, denk dat ik wordpress maar eens ga doornemen qua code, deze gebruikt namelijk ook plugins die echt overal in te gebruiken zijnquote:Op dinsdag 30 september 2008 11:00 schreef GVRuud het volgende:
Je zou dan zo iets kunnen doen?
[ code verwijderd ]
In getPluginInstance laad je de betreffende plugin in met een include, en return je een instance van de betreffende class.
Als je dat eens wilt doen, super!quote:Op dinsdag 30 september 2008 12:51 schreef super-muffin het volgende:
Daar voor heb je de manager.Als ik thuis ben zal ik eens een voorbeeld posten.
En probeer zelf ook eens wat uit intussen
Bij het doorgeven van id's vooraf controleren of het daadwerkelijk een getal is, is al een prima oplossing.quote:Op dinsdag 30 september 2008 21:17 schreef Likkende_Lassie het volgende:
elke mysql query voorzien van addslashes() (magic quotes kan dan op off toch), verhelpt dat het gehele mysql injectie probleem? Of zijn er nog meer dingen om rekening mee te houden?
Als je weet dat ergens een getal in moet dan kun met idd met bijvoorbeeld intval() zorgen dat er een getal in gaat. Maar als ergens een string in moet dan heb je mysql_real_escape_string nodig. Als je strings niet controleert maakt het nauwelijks nog uit hoe goed je integers controleert, een ketting maar zo sterk als de zwakste schakel.quote:Op dinsdag 30 september 2008 21:48 schreef NikkelCobalt het volgende:
[..]
Bij het doorgeven van id's vooraf controleren of het daadwerkelijk een getal is, is al een prima oplossing.
Nee, blind addslashes() gebruiken is niet genoeg. Dat helpt alleen bij strings, niet bij numerieke waarden.quote:Op dinsdag 30 september 2008 21:17 schreef Likkende_Lassie het volgende:
elke mysql query voorzien van addslashes() (magic quotes kan dan op off toch), verhelpt dat het gehele mysql injectie probleem? Of zijn er nog meer dingen om rekening mee te houden?
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 function quote_smart($value, $type = false, $NULL = false) { if ($NULL AND (!$value OR $value == '')){ return NULL; }else{ if ($type == 'num'){ if (is_numeric($value)){ return $value; }else{ return ''; } }else{ if (get_magic_quotes_gpc()) { $value = stripslashes($value); } if(version_compare(phpversion(),"4.3.0") == "-1") { return mysql_escape_string($value); } else { return mysql_real_escape_string($value); } } } } ?> |
1 2 3 | mysql_query("INSERT INTO blabla ('name') VALUES ('".quote_smart($_POST['name'])."')"); ?> |
1 2 3 | mysql_query("SELECT name FROM blabla WHERE id = '".quote_smart($id, 'num')."' LIMIT 1"); ?> |
Ik zeg ook niet dat je strings niet moet controleren. Als je het verhaal gelezen had wat ik quotte dan stond daar ook in dat hij naar meer aanvullingen zocht bovenop het escapen.quote:Op dinsdag 30 september 2008 21:56 schreef Light het volgende:
[..]
Als je weet dat ergens een getal in moet dan kun met idd met bijvoorbeeld intval() zorgen dat er een getal in gaat. Maar als ergens een string in moet dan heb je mysql_real_escape_string nodig. Als je strings niet controleert maakt het nauwelijks nog uit hoe goed je integers controleert, een ketting maar zo sterk als de zwakste schakel.
1 2 3 | function quote_smart($value, $type, $NULL) { ?> |
1 2 3 | function quote_smart($value, $type = false, $NULL = false) { ?> |
True. Maar je moet die gegevens er ook een keer instoppen.quote:Op dinsdag 30 september 2008 22:15 schreef NikkelCobalt het volgende:
Overigens zijn mijn ervaringen met databasegestuurde applicaties zijn dat in 90% van de gevallen je gegevens ophaalt (!) aan de hand van een id.
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 function quote_smart($value, $type = false, $NULL = false) { if ($NULL AND (!$value OR $value == '')){ return NULL; }else{ if ($type == 'num'){ if (is_numeric($value)){ return $value; }else{ return ''; } }else{ if (get_magic_quotes_gpc()) { $value = stripslashes($value); } if(version_compare(phpversion(),"4.3.0") == "-1") { return mysql_escape_string($value); } else { return mysql_real_escape_string($value); } } } } ?> |
1 2 3 | mysql_query("INSERT INTO blabla ('name') VALUES ('".quote_smart($_POST['name'])."')"); ?> |
1 2 3 | mysql_query("SELECT name FROM blabla WHERE id = '".quote_smart($id, 'num')."' LIMIT 1"); ?> |
Als ik verwacht een numerieke waarde terug te krijgen, verwacht ik geen lege string.quote:Op woensdag 1 oktober 2008 11:25 schreef Chandler het volgende:
Omdat dat de type moet weergeven als in de functie die er boven staat weergegeven
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 function quote_smart($value, $type = false, $NULL = false) { if ($NULL AND (!$value OR $value == '')){ return NULL; }else{ if ($type == 'num'){ if (is_numeric($value)){ return $value; }else{ return 0; } }else{ if (get_magic_quotes_gpc()) { $value = stripslashes($value); } if(version_compare(phpversion(),"4.3.0") == "-1") { return mysql_escape_string($value); } else { return mysql_real_escape_string($value); } } } } ?> |
1 2 3 | mysql_query("INSERT INTO blabla ('name') VALUES ('".quote_smart($_POST['name'])."')"); ?> |
1 2 3 | mysql_query("SELECT name FROM blabla WHERE id = '".quote_smart($id, 'num')."' LIMIT 1"); ?> |
quote:Op woensdag 1 oktober 2008 11:10 schreef GlowMouse het volgende:
Waarom zet je in je tweede query een integer tussen quotes?
Het gaat om dit blokje code:quote:Op woensdag 1 oktober 2008 11:25 schreef Chandler het volgende:
Omdat dat de type moet weergeven als in de functie die er boven staat weergegeven :)
1 2 3 4 5 6 7 8 | if ($type == 'num'){ if (is_numeric($value)){ return $value; }else{ return ''; } ?> |
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 | function quote_smart($value, $type = false, $NULL = false) { $value = trim($value); if (strlen($value)) { # We have something if ($type == 'num'){ if (is_numeric($value)){ return $value; } else { trigger_error(sprintf("%s: '%s' is not a number!", __FUNCTION__, $value), E_USER_ERROR); return null; } } } else { if ($NULL) { return null; } } return $value; } var_dump(quote_smart(0, 'num', true)); # Hier breekt je huidige code blok op var_dump(quote_smart("Bla", 'string', true)); var_dump(quote_smart(" ", 'string')); var_dump(quote_smart("Bla", 'num', true)); # Error ?> |
De functie heet "quote_smart", maar er wordt niets ge-quote. Het is een encoding functie.quote:
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 | function secureValue($value, $html){ if (!$html){ $value = strip_tags($value, '<b>,<a>,<i>,<u>,<img>'); }else{ $value = htmlnumericentities($value); } if (!$value){ $value = NULL; } switch (gettype($value)) { case 'boolean': return $value ? '1' : '0'; case 'integer': case 'double': return (string)$value; case 'string': return "'".addslashes($value)."'"; case 'array': case 'object': return "'".addslashes($value)."'"; default: //'resource', 'NULL', 'unknown type' return 'NULL'; die(); } } ?> |
Niet alleen integers zijn numeriek. Ook floats zijn dat, om eens een voorbeeld te noemen.quote:Op woensdag 1 oktober 2008 12:06 schreef slacker_nl het volgende:
Ik zou een trigger_error gebruiken, aangezien er duidelijk wat mis is als je een integer verwacht, maar het er geen is.
Dat het mag en dat het werkt wil niet zeggen dat het good programming practice is en ook niet dat we er geen opmerkingen over mogen maken.quote:En je mag een integer gewoon binnen quotes plaatsen, dus op zich is er niks aan de hand.
Goed punt. Al vraag ik me af of alle hosters PDO ondersteunen.quote:Overigens zou ik PDO gebruiken voor dit soort shit, maar iedereen leest gewoon over SR's post heen. Dan heb je een deel van deze code niet nodig..
Wat doe je dan bij een float?quote:Ik zou je functie zo schrijven..
[ code verwijderd ]
https://devzone.zend.com/(...)revent-SQL-Injection
http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html
In reactie op je nieuwe code, ipv if is_numeric else return 0, dan kan je gelijk intval gebruiken, zie de documentatie hiervan: The integer value of var on success, or 0 on failure.
Dan gebruik je is_int().. of je retouneert intval($value);quote:Op woensdag 1 oktober 2008 17:01 schreef Light het volgende:
Niet alleen integers zijn numeriek. Ook floats zijn dat, om eens een voorbeeld te noemen.
Dit punt vervalt als je PDO gebruikt (en dat gebruik ik alleen maar icm prepared statements). Of ik nou id = '1' of id = 1 invul, zal me verder jeuken.. En je mag er wat van zeggen, maar ik mag toch ook zeggen dat het niet zo hinderlijk is als iemand het doet aangezien het gewoon verwerkt wordt (zonder warning of wat dan ook..).quote:Dat het mag en dat het werkt wil niet zeggen dat het good programming practice is en ook niet dat we er geen opmerkingen over mogen maken.
Andere hoster zoeken die wel met de tijd meegaat.quote:Goed punt. Al vraag ik me af of alle hosters PDO ondersteunen.
Zie hierboven, desnoods breidt is z'n functie uit zodat ie alle verschillende datatypes kan checken..quote:Wat doe je dan bij een float?
1 2 | $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); |
Oe.. dat zou wel flex wezen.. Ben ik ook wel benieuwd naar..quote:Op donderdag 2 oktober 2008 13:05 schreef Chandler het volgende:
Weet iemand een tootlje om 2 databases met elkaar te vergelijken en dan de verschillen in een statement kan zetten die ik kan gebruiken om een database aan te passen?
Ik ben altijd wel huiverig met software waarbij de laatste release datum al erg lang geleden is..quote:Op zaterdag 4 oktober 2008 20:21 schreef spaceninjapirate het volgende:
Ik weet niet of het om de inhoud van de tabel of om de structuur gaat, maar ik heb ver in het verleden deze wel eens gebruikt:
http://www.mysqldiff.org/index.php
quote:Version 1.5.0 (10/01/2004)
http://mirrors.kernel.org/gnu/patch/quote:Op zondag 5 oktober 2008 00:05 schreef ursel het volgende:
[..]
Ik ben altijd wel huiverig met software waarbij de laatste release datum al erg lang geleden is..
[..]
Je kunt je natuurlijk afvragen of het nog wel doet wat het moet doen. MySQL is in de afgeloen vier jaar ook behoorlijk veranderd.quote:Op zondag 5 oktober 2008 00:20 schreef GlowMouse het volgende:
[..]
http://mirrors.kernel.org/gnu/patch/
Als het doet wat het moet doen, is er weinig reden om het versienummer maar te verhogen om maar een nieuwe versie te hebben.
Als je PDO gebruikt, moet je dan nog dingen als mysql_real_escape_string gebruiken?quote:Op dinsdag 30 september 2008 21:58 schreef SuperRembo het volgende:
[..]
Nee, blind addslashes() gebruiken is niet genoeg. Dat helpt alleen bij strings, niet bij numerieke waarden.
Je kan beter geparameteriseerde query's gebruiken, bijvoorbeeld met behulp van PDO.
Als je zelf een sql string aan elkaar zou plakken dan moet dat nog steeds. Maar met PDO kan je ook geparameteriseerde query's gebruiken, en dan wordt de waarde die je aan de parameter geeft automatisch op de juiste manier verwerkt.quote:Op maandag 6 oktober 2008 00:22 schreef Tijn het volgende:
[..]
Als je PDO gebruikt, moet je dan nog dingen als mysql_real_escape_string gebruiken?
Ik ben niet zo bekend met transactions, maar zijn dit niet heel veel extra (en onnodige) handelingen per pagina? Op zich is een extra query per pagina niet zo'n ramp natuurlijk, maar je wilt ook niet teveel onnodige dingen gaan doen op iedere pageloadquote:Op maandag 6 oktober 2008 22:39 schreef Light het volgende:
Wat je wel kunt doen is transactions gebruiken (en dus innodb tables). Autocommit moet dan uiteraard uit. Eerst met een select kijken hoeveel rijen er zijn, als er 25 (of meer) zijn het laagste id deleten. Daarna kun je altijd weer een rij toevoegen, en daarna de commit doen.
Ja, dat dusquote:Op maandag 6 oktober 2008 22:39 schreef Light het volgende:
Maar waarom zou je niet gewoon alles opslaan? Je kunt bij het tonen wel instellen dat alleen de 25 laatste entries worden getoond. Als iemand z'n cookies weggooit (om wat voor reden dan ook) is je telling toch in de war. Tenzij je ook alles gaat wissen op basis van leeftijd, bijvoorbeeld alles ouder dan een week.
Extra voordeel van alles bewaren is dat je er ook weer leuke statistiekjes uit kunt halen over welke pagina's veel worden bezocht enzo.
Zie je de forums als admin wel? Zo ja, zijn ze alleen zichtbaar voor ingelogde leden bijvoorbeeld?quote:Op maandag 6 oktober 2008 22:52 schreef AC4WHEELS.NL het volgende:
Hallo allemaal.
Sinds kort heb ik een forum gemaakt: www.legotechnicfans.nl. Nu wil ik de forums aanmaken alleen worden deze niet zichtbaar op de site. Iemand een idee hoe dit op te lossen is?
En nog iets: Hoe krijg ik die letters 'proFormell' uit mijn banner?
Dank je wel.
Die letters zijn er in 'gepojecteerd'. De forums zijn nu zichtbaar, waren toch verkeerde instellingen,.quote:Op maandag 6 oktober 2008 23:10 schreef Xcalibur het volgende:
[..]
Zie je de forums als admin wel? Zo ja, zijn ze alleen zichtbaar voor ingelogde leden bijvoorbeeld?
Beetje meer info mag wel
Die letters weghalen zal niet simpel wezen, kan je niet een ander logo regelen?
Ik ga gewoon het script eruit knallenquote:Op maandag 6 oktober 2008 23:18 schreef Xcalibur het volgende:
Oh, ik zie het al ja... die tekst is het logo, die over de achtergrond heenstaat kennelijk...
Kan je het logo niet vervangen (vanuit het admin deel wellicht, of anders gewoon het bestand) met een transparante GIF of PNG? Dan is ie nog steeds clickable maar wel onzichtbaar
Het levert wel extra overhead op, al was het maar door de extra queries. En door transactions te gebruiken wordt het als atomair blok behandeld, maar dat wil ook zeggen dat de volgende query moet wachten tot de vorige klaar is. In dat opzicht kan het nog vertragend werken ook (maar daar heb je vast niet veel last van met maar weinig bezoekers tegelijkertijd).quote:Op maandag 6 oktober 2008 23:08 schreef Xcalibur het volgende:
[..]
Ik ben niet zo bekend met transactions, maar zijn dit niet heel veel extra (en onnodige) handelingen per pagina? Op zich is een extra query per pagina niet zo'n ramp natuurlijk, maar je wilt ook niet teveel onnodige dingen gaan doen op iedere pageload
True. Maar er is niets mis met meedenken. En zeker als iets lastig uitvoerbaar is, moet je je afvragen of het wel wenselijk en de beste optie is.quote:Ja, dat dus
Maar dat is de vraag niet, en dat is lang niet zo'n interessante discussie
Dan ben je best uniek. MySQL 5.2 bestaat helemaal nietquote:Op dinsdag 7 oktober 2008 16:22 schreef Chandler het volgende:
[3 Oct 20:32] Konstantin Osipov
IPV6 support was added to MySQL v.6.0
Helaas draai ik nog 5.2 oid maar andere vraag dan want die zag ik niet beantwoord worden, zal dezelfde functie INET_ATON ook gaan werken voor IPV6?
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 | function UploadImage($file, $to_url, $allowed_types = NULL, $allowed_ext = NULL, $sizes = NULL) { $lastid = DAL_VraagAanbod::GetLastID(); if(is_uploaded_file($file["tmp_name"])) { list($x, $y, $image_type) = getimagesize($file["tmp_name"]); list($gx, $gy, $ctype) = $sizes; $split_name = explode(".", $file["name"]); $split_name[0] = $lastid->vra_id; //veranderen naar laatste Id $file_name = "vra_".$split_name[0] . "." . $split_name[1]; //in else ifs splitten om foutmelding mee te sturen if((($sizes == NULL) || (($ctype == MAX_SIZE) && (($x <= $gx) && ($y <= $gy))) || (($ctype == MIN_SIZE) && (($x >= $gx) && ($y >= $gy))) || (($ctype == EXACT_SIZE) && (($x == $gx) && ($y == $gy)))) && (($allowed_types == NULL) || (array_search($image_type, $allowed_types, true) !== false)) && (($allowed_ext == NULL) || (array_search(strtolower($split_name[count($split_name) - 1]), $allowed_ext) !== false))) { move_uploaded_file($file["tmp_name"], ($to_url . $file_name)); return $file_name; } } return false; } //IN DE CONTROLLER $insertedID = DAL_VraagAanbod::GetLastID(); define("MAX_SIZE", 1); define("MIN_SIZE", 2); define("EXACT_SIZE", 3); $allowed_types = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_JPG); // array(types van: http://nl3.php.net/manual/nl/function.exif-imagetype.php) $allowed_ext = array("jpg", "png", "gif", "jpeg", "JPG", "PNG", "GIF", "JPEG"); // array(ext1, ext2, ext3) $path = "Images/"; // Str: waar die geupload moet worden. $global = $_FILES["vra_image"]; // De global. if($filename = UploadImage($global, $path, $allowed_types, $allowed_ext, $sizes)) { $split_name = explode(".", $_FILES["vra_image"]["name"]); $split_name[0] = $insertedID->vra_id; //veranderen naar laatste Id $file_name = "vra_".$split_name[0] . "." . $split_name[1]; $Merged->vra_image = $file_name; DAL_VraagAanbod::Insert($Merged); $lastId=DAL_VraagAanbod::LastId(); $obj=DAL_VraagAanbod::GetByPK($lastId); $msg=array(); $msg[]=GetMessage('VRAAGAANBOD','SAVEOK'); $crit=array('vra_id'=>$obj->id); GUI_VraagAanbod::ShowReadOnly($obj,$msg); } ?> |
Btw, plaatje wordt wel met de juiste bestandsnaam in de database opgeslagen.. lokaal werkt alles zoals ik vermeldequote:Op donderdag 9 oktober 2008 00:15 schreef Sjoe538 het volgende:
Vraagje,
Zit er verschil in de methode om plaatjes te uploaden wanneer dit lokaal of naar op een ftp server gebeurt?
Lokaal werkt mijn script namelijk wel, op mn ftp zijn alle bestanden indentiek, maar hier kan ik niet uploaden..
[ code verwijderd ]
Donequote:Op donderdag 9 oktober 2008 00:19 schreef Light het volgende:
Tip: zet je php-code tussen [php] [ /php]. Dan krijg je leuke kleurtjes, leest makkelijk
Lokaal is op een Windows systeem, en de server is een Linux-systeem? Zo te zien heb je een hoofdletter in de mapnaam waar alles naar toe gaat (Images/). Dat werkt wel, maar 'k zou voor de zekerheid alleen kleine letters gebruiken. Daarbij moet je wel de rechten hebben om in die directory te mogen schrijven (da's niet van toepassing in Windows, wel in Linux). En voor de zekerheid zou ik altijd een absoluut pad gebruiken. Kijk eens naarquote:Op donderdag 9 oktober 2008 00:15 schreef Sjoe538 het volgende:
Vraagje,
Zit er verschil in de methode om plaatjes te uploaden wanneer dit lokaal of naar op een ftp server gebeurt?
Lokaal werkt mijn script namelijk wel, op mn ftp zijn alle bestanden indentiek, maar hier kan ik niet uploaden..
[ code verwijderd ]
1 2 3 | dirname(__FILE__); ?> |
Ik had idd geen schrijfrechten toegekend, nu wel, maar het werkt nog steeds niet..quote:Op donderdag 9 oktober 2008 00:40 schreef Light het volgende:
[..]
Lokaal is op een Windows systeem, en de server is een Linux-systeem? Zo te zien heb je een hoofdletter in de mapnaam waar alles naar toe gaat (Images/). Dat werkt wel, maar 'k zou voor de zekerheid alleen kleine letters gebruiken. Daarbij moet je wel de rechten hebben om in die directory te mogen schrijven (da's niet van toepassing in Windows, wel in Linux). En voor de zekerheid zou ik altijd een absoluut pad gebruiken. Kijk eens naar
[ code verwijderd ]
Niet vrijgeven cq laten gebruiken...quote:Op zondag 12 oktober 2008 23:31 schreef spaceninjapirate het volgende:
Heeft iemand ervaring met het beveiligen van code waar veel uurtjes in gestoken zijn? Iets van een stukje wat bijhoud waar / wanneer het gebruikt word is makkelijk te maken, maar nog makkelijker te kraken door iemand die er ook maar een beetje verstand van heeft...
Ik heb eigenlijk niet zoveel trek om alle bestanden te encrypten met zend guard of dat soort dingen, maar kan momenteel niet op iets beters komen. Iemand een idee of er nog andere mogelijkheden zijn?
Bijde heb ik geprobeerd, maar de laatste (korte) optie werkt niet.quote:Op zaterdag 11 oktober 2008 22:46 schreef Xcalibur het volgende:
wat heb je zelf al geprobeerd?
het ziet er niet zo ingewikkeld uit, dus even een performance test bouwen lijkt me niet zo ingewikkeld?
quote:Op woensdag 15 oktober 2008 16:13 schreef boskameel het volgende:
Hoe kan ik met alleen mysql alle records opvragen, behalve de laatste?
1 2 3 4 | WHERE id NOT IN ( SELECT MAX(id) FROM table; ) |
ik heb lang zitten denken.. maar kan niks bedenkenquote:Op woensdag 15 oktober 2008 18:27 schreef GlowMouse het volgende:
Wanneer zou je dat willen?
Verschillende documenten voor school (projecten e.d.). Geen websites of leuke foto's dus.quote:Op woensdag 15 oktober 2008 21:00 schreef aardappel het volgende:
portfolio is nogal een ruim begrip? Wat wil je precies laten zien?
Ah, op die manier dus. Danke sjeunquote:Op woensdag 15 oktober 2008 18:19 schreef Light het volgende:
[..]
[ code verwijderd ]
Dan ga ik er wel vanuit dat max(id) het laatste record oplevert. En 'k heb getest of het werkt, niet of het efficient is/efficienter kan.
Ik zou gewoon voor een oplossing in php gaan.. De laatste entry negeren is ook makkelijkquote:Op woensdag 15 oktober 2008 18:19 schreef Light het volgende:
[..]
[ code verwijderd ]
Dan ga ik er wel vanuit dat max(id) het laatste record oplevert. En 'k heb getest of het werkt, niet of het efficient is/efficienter kan.
ok:quote:Op donderdag 16 oktober 2008 14:45 schreef Chandler het volgende:
Zou iemand een reactie willen geven op mijn post?
Helemaal mee eens.quote:Op donderdag 16 oktober 2008 12:00 schreef slacker_nl het volgende:
[..]
Ik zou gewoon voor een oplossing in php gaan.. De laatste entry negeren is ook makkelijk
quote:Op donderdag 16 oktober 2008 21:14 schreef Lente_ninja het volgende:
Er staat wel iets in de opdracht over een 'loop', maar dat is alleen voor gevorderden, whehehe
1 2 3 4 5 6 7 8 9 | for($i=1;$i<=19;$i++) { $statementcode = $i; $score = $_POST[$i]; $query = "INSERT INTO rating VALUES ( '$statementcode', '$participantcode', '$score');"; mysql_query($query); } ?> |
1 2 3 4 5 6 7 | $vraag[1] = 'asdf'; $vraag[2] = 'ghjkl'; for($i=1; $i<=2; $i++) { echo "Vraag $i is $vraag[$i] <br />"; } ?> |
Dan moet je evenquote:Op donderdag 16 oktober 2008 21:14 schreef Lente_ninja het volgende:
Ik krijg geen foutmelding, alleen een leeg scherm (wel met de juiste achtergrondkleur) als de vragenlijst verstuurd is. Ik zou een dank-je bericht moeten krijgen, en de gegevens (persoonlijk en antwoorden op enquete) zouden toegevoegd moeten worden aan de database, maar dat doet 'ie dus niet.
1 2 3 | error_reporting(E_ALL ^ E_NOTICE); ?> |
Persoonlijk zou ik dit gebruiken als je aan het devven bent:quote:Op donderdag 16 oktober 2008 21:57 schreef Light het volgende:
Ik zal die post eens wat verduidelijken (niet nu).quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | function rondaf(&$value, &$id) { $value = round($value, 5); } $benchFile = "bench/bench" . date("Ymd") . ".csv"; if (is_dir("./bench")) { $fd = fopen($benchFile, "a+"); if (filesize($benchFile) == 0) { fputs($fd, implode(";", array_keys($GLOBALS['stat'])) . "\n"); } fputs($fd, implode(";", array_walk($GLOBALS['stat'], "rondaf")) . "\n"); fclose($fd); } ?> |
1 |
Wat dacht je van round()quote:Op vrijdag 17 oktober 2008 13:28 schreef Chandler het volgende:
en eingelijk wil ik alle getallen met een punt (afkorten tot 6 cijfers na de punt). Hoe los ik dit op?
Ja, maar in het geval van de post waar ik op reageerde niet. Het gaat er mij dan vooral om dat we niet worden overspoeld met notices.quote:Op vrijdag 17 oktober 2008 10:56 schreef slacker_nl het volgende:
[..]
Persoonlijk zou ik dit gebruiken als je aan het devven bent:
error_reporting(E_ALL | E_STRICT);
Afronden bij weergeven?quote:Op vrijdag 17 oktober 2008 13:28 schreef Chandler het volgende:
en eingelijk wil ik alle getallen met een punt (afkorten tot 6 cijfers na de punt). Hoe los ik dit op?
1 2 3 | printf('%.6f', $myfloat); ?> |
array_map wellicht?quote:Op vrijdag 17 oktober 2008 14:47 schreef Chandler het volgende:
Dat werkt idd, tnx Light, echter werkt het niet als ik Array Walk probeer maar wel als ik zelf een foreach doe...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | for ($i = 0; $i < 5; ++$i) { $arr[] = 0.111111111111; } function rondaf(&$val) { $val = sprintf("%.6f", $val); } array_walk($arr, "rondaf"); /* Of function rondaf($val) { return sprintf("%.6f", $val); } $arr = array_map("rondaf", $arr); */ ?> |
1 2 3 4 | //[url=(http://blaat.nl)]Website[/url] // :/ is dus een smilie en wordt vervangen door de afbeelding ?> |
Je zou kunnen overwegen om :/ geen smilie te maken. Andere optie is om met preg_replace aan de slag te gaan en :/ niet te vervangen als er een / achter staat.quote:Op vrijdag 17 oktober 2008 23:00 schreef Pelgrim het volgende:
Ik heb een vraagje. Ik ben bezig met een UBB-parser en voordat ik me ga verdiepen in stackbased parsen heb ik jullie hulp nodig bij het escapen van smilies uit ubb-tags met attributen. Voorbeeld:
[ code verwijderd ]
Hoe moet ik dit aanpakken.
Ja, http://www.euronet.nl/users/wesleys/dig/ADOnline.phpquote:Op donderdag 16 oktober 2008 15:31 schreef WyriHaximus het volgende:
Heeft iemand hier ook authenticatie met active directory gedaan? Ben voor me werk er mee bezig maar lukt niet echt. Iemand een voorbeeldje hoe hij/zij het gedaan heeft?
Heeft niet echt met Cake te makenquote:Op zondag 19 oktober 2008 19:34 schreef BaggerUser het volgende:
Hoi ik ben net met cakePHP begonnen echter is het een beetje een geworstel omdat niet alles netjes is gedocumenteerd. Nu ben ik tegen een probleem aangelopen waarvan ik niet snap hoe ik het moet oplossen, of dat ik het juist anders moet aanpakken.
De situatie is als volgt:
[ afbeelding ]
nu wil ik dus op de pagina:
http://localhost/subcategories/view/1 informatie ophalen uit de tabel categories. Ik wil namelijk de naam weten die bij het id 1 van categories hoort. Hoe moet ik dit nu oplossen? en kan (hoort) het wel op deze manier?
ps het zijn tabellen geen apparte databases![]()
1 2 3 | $array = array ( "a", "b", "c", "d", "e", "f", "g", "h", "i" ); ?> |
Waarom niet in één foreach en de eerste 5 aan $var1 hangen en de rest aan $var2?quote:Op maandag 20 oktober 2008 12:39 schreef wobbel het volgende:
Ik heb een array die er zo uitziet:
[ code verwijderd ]
Nu wil ik deze in een foreach gooien, maar ik wil alleen de eerste 4 uit deze array in de foreach hebben.
En hoe maak ik een foreach voor de 5e t/m 8e uit deze array?
Je bedoelt een counter maken, en als de counter boven een bepaald getal uitkomt dat je dan het aan een andere $var gaat toewijzen?quote:Op maandag 20 oktober 2008 12:44 schreef CraZaay het volgende:
[..]
Waarom niet in één foreach en de eerste 5 aan $var1 hangen en de rest aan $var2?
Een foreach pakt per definitie de hele array. Om de eerste 5 elementen te pakken kun je het volgende doen:quote:Op maandag 20 oktober 2008 12:39 schreef wobbel het volgende:
Ik heb een array die er zo uitziet:
[ code verwijderd ]
Nu wil ik deze in een foreach gooien, maar ik wil alleen de eerste 4 uit deze array in de foreach hebben.
En hoe maak ik een foreach voor de 5e t/m 8e uit deze array?
1e foreach heeft als output:
a
b
c
d
e
2e foreach heeft als output:
f
g
h
i
1 2 3 4 5 6 | for($i = 0; $i < 5; $i++) { $a = $array[$i]; ... doe hier vanalles } ?> |
Juist, of zoals Light zegt een for() gebruiken.quote:Op maandag 20 oktober 2008 12:50 schreef wobbel het volgende:
[..]
Je bedoelt een counter maken, en als de counter boven een bepaald getal uitkomt dat je dan het aan een andere $var gaat toewijzen?
1 2 3 | RewriteRule ^test$ /?blaat=1 RewriteRule ^test$ index.php?blaat=1 |
array_slicequote:Op maandag 20 oktober 2008 12:39 schreef wobbel het volgende:
Ik heb een array die er zo uitziet:
[ code verwijderd ]
Nu wil ik deze in een foreach gooien, maar ik wil alleen de eerste 4 uit deze array in de foreach hebben.
En hoe maak ik een foreach voor de 5e t/m 8e uit deze array?
1e foreach heeft als output:
a
b
c
d
e
2e foreach heeft als output:
f
g
h
i
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $arr = range(0,8); $arr_zero2four = array_slice($arr, 0,4); $arr_four2end = array_slice($arr, 4,count($arr)); print_r($arr); print_r($arr_zero2four); print_r($arr_four2end); /* Of array_splice */ $arr_zero2four = array_splice($arr, 0,4); print_r($arr_zero2four); print_r($arr); ?> |
Dit in een ander topic neerzetten. Dit heeft helemaal niks met php of mysql te maken.quote:Op maandag 20 oktober 2008 16:53 schreef spaceninjapirate het volgende:
Snap een rewrite rule even niet meer, misschien dat een van jullie het aan me kan uitleggen
ik wil dat www.site.nl/test herschreven wordt naar www.site.nl/?blaat=1
nu heb ik de volgende 3 geprobeerd:
[ code verwijderd ]
maar dat komt uit op:
www.site.nl/test?blaat=1
Hoe moet ik dit wel doen?
Ik heb het ook niet zo in de .htaccess gezet, maar elke regel een keer (los) erin gezet. Ze gaven alle 3 precies het zelfde resultaat. Het leek me beter zo neer te zetten dan 3 code blokken. voor 3 zinnen.quote:Op maandag 20 oktober 2008 17:16 schreef CraZaay het volgende:
Je matcht sowieso 3 keer op "RewriteRule ^test$". Waarom denk je dat 'ie na de eerste match nog iets met die andere twee doet?
quote:Op maandag 20 oktober 2008 17:27 schreef slacker_nl het volgende:
[..]
Dit in een ander topic neerzetten. Dit heeft helemaal niks met php of mysql te maken.
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 | $reservedIpRanges = array( ip2long("0.0.0.1") => ip2long("0.255.255.255"), ip2long("10.0.0.0") => ip2long("10.255.255.255"), ip2long("14.0.0.0") => ip2long("14.255.255.255"), ip2long("24.0.0.0") => ip2long("24.255.255.255"), ip2long("127.0.0.0") => ip2long("127.255.255"), ip2long("169.254.0.0") => ip2long("169.254.255.255"), ip2long("172.16.0.0") => ip2long("172.31.255.255"), ip2long("192.0.2.0") => ip2long("192.0.2.255"), ip2long("198.18.0.0") => ip2long("198.19.255.255"), ip2long("192.88.99.0") => ip2long("192.88.99.255"), ip2long("192.168.0.0") => ip2long("192.168.255.255"), ip2long("224.0.0.0") => ip2long("239.255.255.255"), ip2long("240.0.0.0") => ip2long("247.255.255"), ); $ip = "192.168.1.21"; foreach ($reservedIpRanges AS $from => $to) { if ($from <= ip2long($ip) && $to >= ip2long($ip)) { echo $ip . ' in de range van ' . $from . " tot " . $to; } } ?> |
Ik ken niet al die ranges uit m'n hoofd, maar je hebt iig een behoorlijke lijstquote:Op dinsdag 21 oktober 2008 21:40 schreef Chandler het volgende:
Ik was even bezig met een scriptje om te detecteren of iemand een reserved ip adres gebruikt (bv voor lokaal te testen van een site).
[ code verwijderd ]
Mis ik nog een IP adres range? anyone?
1 2 3 4 5 6 7 8 9 10 | ---------------------------------------- 1 | 1 | 1224453600 | 8 2 | 1 | 1224626400 | 9 3 | 1 | 1224712800 | 5 4 | 1 | 1224799200 | 8 5 | 2 | 1224453600 | 8 6 | 2 | 1224540000 | 6 7 | 2 | 1224626400 | 5 8 | 2 | 1224799200 | 7 |
1 2 3 4 | --------------------------------------------------------------------------- 1 | 8 | | 9 | 5 | 8 2 | 8 | 6 | 5 | | 7 |
Ik denk dat je niet helemaal aan geneste loops ontkomt.quote:Op woensdag 22 oktober 2008 18:13 schreef Tijn het volgende:
Nu wil ik hier graag dmv PHP per week een overzichtje van tonen in een webpagina. Ik doe dan een query waarbij ik alle resultaten opvraag die binnen een timestamp op maandag en een timestamp op vrijdag vallen. Dit wil ik dan graag als volgt weergeven:
[ code verwijderd ]
Hier heb ik dus de activiteit en de timestamps van maandag t/m vrijdag op de eerste regel geplaatst en daaronder ingevuld welke activiteit ik hoeveel uur op welke dag heb gedaan.
Is er een manier van querien dat de data al op deze manier uit de database komt rollen? En zo niet, wat zou dan een handige constructie zijn om in PHP deze data op de juiste manier weer te laten geven?
Ik heb al veel zitten proberen, maar ik eindig elke keer met een puinzooi van ontzettend veel geneste loops waar geen touw meer aan vast te knopen is en dat moet vast beter kunnen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $days = array(1224453600, 1224540000, etc); // timestamps die in het overzicht staan $query = 'SELECT * FROM table WHERE timestamp BETWEEN begin AND eind'; //zelf aanpassen $result = mysql_query($query); while($row = mysql_fetch_assoc($result) { // uitlezen database $activiteiten[$row['activiteit_id']][$row['timestamp']] = $row['hours']; } foreach($activiteiten as $id => $activiteit) { echo '<tr><td>'.$id.'</td>'; foreach($days as $day) { echo '<td>'; if(isset($activiteit[$day])) { echo $activiteit[$day]; } else { echo ' ' } echo '</td>'; } echo '</tr>'; } ?> |
Ik gebruik eigenlijk altijd timestamps als ik ergens de datum en/of tijd van wil opslaan. Voornamelijk omdat ik niet weet hoe de datum-functies van MySQL werkenquote:Op woensdag 22 oktober 2008 20:51 schreef Xcalibur het volgende:
Waarom sla je je datum als timestamp op, en niet als datum?
En welk moment op de dag is je timestamp? Altijd 9:00 's ochtends, of het moment waarop je ergens aan begint? of wat? Het lijkt mij knap onhandig om dat op basis van een timestamp te doen als je een datum wilt weten iig
Als je nou ook even laat zien hoe, dan heb ik er misschien nog wat aanquote:Op woensdag 22 oktober 2008 21:25 schreef Xcalibur het volgende:
Datums / tijden en timestamps kun je vrij eenvoudig in elkaar omrekenen...
Ik hoor het wel als het gelukt isquote:Op woensdag 22 oktober 2008 21:02 schreef Tijn het volgende:
Bedankt Light! Ik zal eens even bestuderen wat je precies hebt bedacht
Op www.mysql.com kun je voldoende documentatie vinden over de datumfuncties. En er is in MySQL ook een functie UNIX_TIMESTAMP() om een DATE naar een timestamp om te zetten. Ik gebruik zelf ook meestal timestamps, maar de datum/tijd dingen in MySQL kunnen best handig zijn.quote:Ik gebruik eigenlijk altijd timestamps als ik ergens de datum en/of tijd van wil opslaan. Voornamelijk omdat ik niet weet hoe de datum-functies van MySQL werkenIk gebruik vervolgens altijd strftime() om de datum weer te geven. Ik zou niet weten hoe ik bv het weeknummer of de dag van de week moest weergeven van een datum als ik het anders dan een timestamp opsla.
Ja, ik wil ook niet beweren dat timestamps zo geniaal zijn of dat dat de beste manier is. Het is puur luiheid dat ik de datum-functies van MySQL nooit heb uitgezocht. Als ik zou weten hoe ik met DATE of DATETIME velden kan werken, zou ik dat waarschijnlijk gebruiken.quote:Op donderdag 23 oktober 2008 10:13 schreef CraZaay het volgende:
Ik gebruik altijd DATE of DATETIME. Je wilt toch altijd een data type gebruiken wat zo goed mogelijk het soort data wat je op gaat slaan omschrijft?
Zie hier je huiswerk voor vanavondquote:Op donderdag 23 oktober 2008 10:53 schreef Tijn het volgende:
Ja, ik wil ook niet beweren dat timestamps zo geniaal zijn of dat dat de beste manier is. Het is puur luiheid dat ik de datum-functies van MySQL nooit heb uitgezocht. Als ik zou weten hoe ik met DATE of DATETIME velden kan werken, zou ik dat waarschijnlijk gebruiken.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 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 | <html> <body> $connect = mysql_connect("localhost","root","wachtwoord") or die ("Could not connect to database."); mysql_select_db("urendatabase"); $query1 = mysql_query( "SELECT `userid`, `voornaam`, `achternaam` FROM `werknemers` ORDER BY `achternaam` ASC" ) or die (mysql_error()); echo "<form name='form1' method='post' action='insert.php'>\n"; echo "Werknemer: <select name='werknemer'>\n"; while ($data = mysql_fetch_assoc($query1)) { echo "<option value='".$data['userid']."'>".$data['voornaam']." ".$data['achternaam']."</option>\n"; } echo "</select> <br><br>\n"; echo "<table border=\"1\" bordercolor=\"#FFCC00\" style=\"background-color:#FFFFCC\" width=\"100%\" cellpadding=\"3\" cellspacing=\"3\"> <tr> <td>Gerelateerd</td> <td>Afdeling</td> <td>Tijd gewerkt (hr)</td> <td>Call nummer</td> <td>Omschrijving</td> </tr> <tr> <td width=\"10%\">";include("spec.php");echo "</td> <td width=\"20%\">";include("afd.php");echo "</td> <td width=\"10%\"><input type=\"text\" size=\"5\" name=\"uren\" /></td> <td width=\"10%\"><input type=\"text\" size=\"10\" name=\"callnr\" /></td> <td width=\"50%\"><input type=\"text\" size=\"90\" name=\"omschrijving\" /></td> </tr> <tr> <td width=\"10%\">";include("spec.php");echo "</td> <td width=\"20%\">";include("afd.php");echo "</td> <td width=\"10%\"><input type=\"text\" size=\"5\" name=\"uren\" /></td> <td width=\"10%\"><input type=\"text\" size=\"10\" name=\"callnr\" /></td> <td width=\"50%\"><input type=\"text\" size=\"90\" name=\"omschrijving\" /></td> </tr> <tr> <td width=\"10%\">";include("spec.php");echo "</td> <td width=\"20%\">";include("afd.php");echo "</td> <td width=\"10%\"><input type=\"text\" size=\"5\" name=\"uren\" /></td> <td width=\"10%\"><input type=\"text\" size=\"10\" name=\"callnr\" /></td> <td width=\"50%\"><input type=\"text\" size=\"90\" name=\"omschrijving\" /></td> </tr> <tr> <td width=\"10%\">";include("spec.php");echo "</td> <td width=\"20%\">";include("afd.php");echo "</td> <td width=\"10%\"><input type=\"text\" size=\"5\" name=\"uren\" /></td> <td width=\"10%\"><input type=\"text\" size=\"10\" name=\"callnr\" /></td> <td width=\"50%\"><input type=\"text\" size=\"90\" name=\"omschrijving\" /></td> </tr> <tr> <td width=\"10%\">";include("spec.php");echo "</td> <td width=\"20%\">";include("afd.php");echo "</td> <td width=\"10%\"><input type=\"text\" size=\"5\" name=\"uren\" /></td> <td width=\"10%\"><input type=\"text\" size=\"10\" name=\"callnr\" /></td> <td width=\"50%\"><input type=\"text\" size=\"90\" name=\"omschrijving\" /></td> </tr> </table>"; echo "<br>"; echo "<input type='submit' name='submit' value='Submit'>\n"; echo "</form>\n"; </body> </html> ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $con = mysql_connect("localhost","root","wachtwoord"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("urendatabase", $con); $sql="INSERT INTO uren (userid, specid, afdelingid, uren, omschrijving, callnr) VALUES ('$_POST[werknemer]','$_POST[afdeling]','$_POST[uren]','$_POST[specificatie]','$_POST[omschrijving]','$_POST[callnr]')"; if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } echo "1 record added"; mysql_close($con) ?> |
Wat ursel zegt. Jij werkt niet in een ontwikkelteam neem ik aan?quote:Op donderdag 23 oktober 2008 12:25 schreef Mordreth het volgende:
Ook wel een stukje voorkeur lijkt mij. Ik gebruik zelf altijd timestamps.. puur omdat ik het makkelijker vind rekenen.
Jawelquote:Op donderdag 23 oktober 2008 13:52 schreef CraZaay het volgende:
[..]
Wat ursel zegt. Jij werkt niet in een ontwikkelteam neem ik aan?
Rand misschien..quote:Op donderdag 23 oktober 2008 17:07 schreef hello_moto1992 het volgende:
Waar moet ik ook alweer op zoeken als ik met php steeds een foto wil laten veranderen? Dus dat er bij een afbeelding steeds een andere afbeelding komt.
Tof thanks, maar eens proberen van het weekendquote:Op zaterdag 18 oktober 2008 10:47 schreef slacker_nl het volgende:
[..]
Ja, http://www.euronet.nl/users/wesleys/dig/ADOnline.php
Het werd ook wel eens in het ajax-topic gebruikt.quote:Op donderdag 23 oktober 2008 17:12 schreef ursel het volgende:
[..]
Rand misschien..![]()
Snap niet zozeer waar je nu echt op doelt..
of (netzoals bij fok denk ik) pas omzetten naar een smiley als de code voorafgegaan wordt door een spatiequote:Op vrijdag 17 oktober 2008 23:05 schreef Light het volgende:
[..]
Je zou kunnen overwegen om :/ geen smilie te maken. Andere optie is om met preg_replace aan de slag te gaan en :/ niet te vervangen als er een / achter staat.
1 2 | http:// niet parsen omdat ie niet voorafgegaan wordt door een spatie |
Dat script ken ik niet, maar een random element uit een array plukken is niet zo lastig. Zie bijvoorbeeld rand() en array_rand(). Het lezen en doorgeven van een bestand kan bijvoorbeeld met readfile().quote:Op donderdag 23 oktober 2008 18:10 schreef hello_moto1992 het volgende:
[..]
Het werd ook wel eens in het ajax-topic gebruikt.
De afbeelding "foto.php" wordt gewoon geladen. Maar er wordt gewoon steeds een andere afbeelding gebruikt. Dus bij een F5 is het weer een ander plaatje etc.
1 2 3 4 5 6 7 8 9 10 | // We'll be outputting a PDF header('Content-type: application/pdf'); // It will be called downloaded.pdf header('Content-Disposition: attachment; filename="downloaded.pdf"'); // The PDF source is in original.pdf readfile('original.pdf'); ?> |
Ah, dat kreeg ik niet meequote:Op donderdag 23 oktober 2008 20:36 schreef Dzy het volgende:
Ja maar dan kun je hem niet meer embedden, ging erom om een dynamische avatar te maken.
Het lukt me nietquote:Op donderdag 23 oktober 2008 13:51 schreef Darkomen het volgende:
<td width=\"10%\"><input type=\"text\" size=\"5\" name=\"uren[]\" /></td>
<td width=\"10%\"><input type=\"text\" size=\"10\" name=\"callnr[]\" /></td>
<td width=\"50%\"><input type=\"text\" size=\"90\" name=\"omschrijving[]\" /></td>
</tr>
En dan de array doorlopen/php leren
Ik blijf me erover verbazen dat zo weinig mensen kaas hebben gegeten van debuggen. Niet om deze specifieke vraag te bashen; ik merk het ook dagelijks in de beroepspraktijk.quote:Op donderdag 23 oktober 2008 22:28 schreef GlowMouse het volgende:
Kijk eens naar een print_r($_POST)![]()
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |