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: |