1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class secure{ public $data; public function __construct($data){ $mstring = Array(); foreach($data as $key=>$val){ if($val !== ""){ $val = trim($val); $val = stripslashes($val); $val = htmlentities($val, ENT_QUOTES); $mstring[$key] = $val; $this->data = $mstring; } } return $data; } } ?> |
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 | class Secure { public function stripSearch(&$inputStripSearch) { foreach($inputStripSearch as $key=>&$val) { if($val !== "") { $val = trim($val); $val = stripslashes($val); $val = htmlentities($val, ENT_QUOTES); } } return; } public function validateEmail(&$inputValidateEmail) { if (preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$inputValidateEmail['email'])) return true; else return false; } } ?> |
1 2 3 | filter_var('bob@example.com', FILTER_VALIDATE_EMAIL); ?> |
Kun je ze dan even laten melden hoe dat dan kan (in hun ogen?)quote:Op maandag 14 december 2009 20:52 schreef xaban06 het volgende:
[..]
Ah dus ik doe niks fout Thanks.
Op werk namelijk een discussie gehad dat ik fout bezig ben en dat het veel veiliger en makkelijker kan.
mjah.. zijn expression om te checken is ook nog aan de wat simpele kant.quote:Op donderdag 17 december 2009 14:55 schreef Chandler het volgende:
@hamkaastosti; wil alleen even melden dat die filter ook niet 100% werkt, zelfs niet 50%
http://www.google.nl/search?hl=nl&q=php+FILTER_VALIDATE_EMAIL+bugs&meta=&aq=f&oq=
Het is al weer maanden geleden dat hij zoiets gescript heeft, dus hij kon er niet opkomen. Dat was zijn verdediging.quote:Op donderdag 17 december 2009 14:57 schreef Chandler het volgende:
[..]
Kun je ze dan even laten melden hoe dat dan kan (in hun ogen?)
1 2 3 4 5 6 7 8 9 | $query = $this->db->select() ->from('news', '*') ->join('users', '*', 'news.author_id = users.id') ->order('news.date ASC') ->limit(0, $limit); $result = $this->db->fetchAll($query); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | private $select; private $from; private $join; private $limit; //enz public function limit($startrow, $numrows) { $this->limit = ' LIMIT ' . $startrow . ', ' . $numrows; return $this; } public function fetchall($query) { $doquery = $this->query($query); $result = $doquery->fetchAll(PDO::FETCH_ASSOC); return $result; } ?> |
const char regexp[] = "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([A-Za-z0-9_][A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\=\\?\\^\\`\\|\\{\\}]*(\\.[A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\=\\?\\^\\`\\|\\{\\}]*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?(\\.(?=[A-Za-z0-9\\-]))?)+[A-Za-z]+))$/D"quote:Op donderdag 17 december 2009 16:50 schreef hamkaastosti het volgende:
[..]
mjah.. zijn expression om te checken is ook nog aan de wat simpele kant.
Ik zou gewoon filter_var gebruiken.
kijk maar eens op regel 475 welke regex php zelf gebruikt
http://svn.php.net/viewvc/php/php-src/trunk/ext/filter/logical_filters.c?revision=290791&view=markup
Waarom dan niet gewoon 2 losse queries? je wil toch niet alles aan elkaar koppelen? en heb je bv een voorbeeld van 2 queries?quote:Op zaterdag 19 december 2009 11:25 schreef hamkaastosti het volgende:
ik ben me aan het verdiepen in method chaining.
Nu wil ik mijn database op de volgende manier aanroepen:
[ code verwijderd ]
in de database class werkt het zoiets:
[ code verwijderd ]
Nu werkt dit prima zolang ik maar 1 query heb. Wil ik een tweede query in dezelfde request doen zonder bijvoorbeeld een join terwijl de eerste dat wel had dan wil hij mijn tweede query ook joinen omdat $this->join niet leeg is.
hoe los ik dat netjes op?
In zend gebruiken ze ook zoiets maar daar zit vast een handigheidje achter
2 queries:quote:Op zaterdag 19 december 2009 15:01 schreef Chandler het volgende:
[..]
Waarom dan niet gewoon 2 losse queries? je wil toch niet alles aan elkaar koppelen? en heb je bv een voorbeeld van 2 queries?
1 2 3 | $this->db->insert('table', $array); ?> |
1 2 3 | ->where('field = ?', $array); ?> |
1 2 3 | $this->db->select()->from('table', 'id,title,text')->join('users, 'table.id = users.id)->where(title = ?, 1)->limit(0,10); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | /* * @author Michel Everts */ class Secure{ /* * Strip function for arrays * @param array with text * @return array */ public function stripArray(&$inputStripArray){ foreach($inputStripArray as $key=>&$val){ if($val !== ""){ $val = trim($val); $val = stripslashes($val); $val = htmlentities($val, ENT_QUOTES); } } return; } /* * Strip function for strings * @param string with text * @return string */ public function stripSingle(&$inputStripSingle){ if($inputStripSingle !== ""){ $inputStripSingle = trim($inputStripSingle); $inputStripSingle = stripslashes($inputStripSingle); $inputStripSingle = htmlentities($inputStripSingle, ENT_QUOTES); } return; } /* * E-mail validate function * @param string with text * @return string or die */ public function validateEmail(&$inputValidateEmail){ if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$inputValidateEmail)){ die ("".$inputValidateEmail." <br> Is ongeldig. Gebruik het juiste e-mailadres formaat"); } else{ return; } } /* * URL validate function * @param string with text * @return string or die */ public function validateURL(&$inputValidateURL){ if (!preg_match("/(https?:\/\/+[\w\-]+\.[\w\-]+)/i",$inputValidateURL)){ die ("".$inputValidateURL." <br> is ongeldig. Gebruik het juiste URL formaat"); } else{ return; } } /* * Name validate function * @param string with text * @return string or die */ public function validateName(&$inputValidateName){ $this->stripSingle($inputValidateName); if (preg_match("/[^a-zA-Z]( )'/",$inputValidateName)){ die ("".$inputValidateName." <br>bevat illegale karaters. Alleen alfabetisch karaters zijn toegestaan"); } else{ return; } } /* * Telephone number validate function * @param string with text * @return string or die */ public function validateTel(&$inputValidateTel){ $this->stripSingle($inputValidateTel); if (preg_match("/[^0-9\-]/",$inputValidateTel)){ die ("".$inputValidateTel." <br>bevat illegale karaters. Alleen cijfers en '-' zijn toegestaan "); } else{ return; } } /* * PostCode validate function * @param string with text * @return string or die */ public function validatePostCode(&$inputValidatePostCode){ $this->stripSingle($inputValidatePostCode); if (!preg_match("/^[0-9]{4}( )?[A-Za-z]{2}$/",$inputValidatePostCode)){ die ("".$inputValidatePostCode." <br> is ongeldig. Een postcode bevat alleen alfanumerieke karakters."); } else{ return; } } } ?> |
Je hebt gelijk, ik zou niet zomaar moeten stoppen bij zoiets triviaals als een verkeerd ingevoerd e-mail adres.quote:Op dinsdag 22 december 2009 09:47 schreef hamkaastosti het volgende:
ik snap die die(); elke keer als een field niet klopt niet zo goed. Het lijkt me handiger om gewoon een array met errors bij te houden en een array met gecheckte velden. Die errors gebruik je om je form opnieuw weer te geven met de fout onder elk veld en de array met gecheckte velden gebruik je om je database te vullen.
Verder is het handig om trim te gebruiken om per ongeluk ingevulde spaties te verwijderen.
Mijn validator gebruikt trouwens op meer plekken filter_var en heeft private functions al required() en length()
Zelfs dan, je hebt van die tijdelijke e-mailadressen. Maar goed, dit gaat vooral om klantbestanden e.d. dus dit wordt intern gebruikt.quote:Op dinsdag 22 december 2009 15:40 schreef hamkaastosti het volgende:
het probleem met het valideren van email is dat je 's werelds beste filter nog om de tuin kunt leiden door gewoon een valide mailadres in te vullen terwijl het adres misschien niet eens werkt. Wil je echt iemands mail aan iets koppelen dan zul je hem een mailtje moeten sturen met een link erin die de gebruiker moet volgen
Ja daar zitten ze wel in, maar hoe weet je welke de geselecteerde waarde is in de dropdown?quote:Op woensdag 23 december 2009 09:16 schreef hamkaastosti het volgende:
als het goed is zitten alle waarden van je form in de $_POST array
http://www.w3schools.com/php/php_forms.asp
thx voor je reactie weer. Mijn code is:quote:Op woensdag 23 december 2009 12:48 schreef hamkaastosti het volgende:
door alle waarden die je in de dropdown ziet ook in value="" te zetten
<option value="12-12-2009">12-12-2009</option>
1 2 3 4 5 6 7 8 9 10 11 12 | <?php { //connectie ophalen $query = "select distinct(Datum)from wedstrijd"; $result = mysql_query ($query); echo "<select name=datum value=''>Datum</option>"; while($nt=mysql_fetch_array($result)) echo "<option value=$nt[Datum]>$nt[Datum]</option>"; } <input type="submit" /> </form> |
1 2 3 4 5 6 7 8 | echo <select name="datum\">; while($query) { echo <option value=\"$nt['datum']\">$nt['datum']</option>; } echo </select>; ?> |
mijn html is drama ik hebwel een boek gelezen over mysql en php. Mijn website bevat wel wat data maar ik ben er al teringlang mee bezig en snap er nog steeds geen zak van. Zou je me kunnen uitleggen wat ik nu verkeerd doe? Ik wil in principe alleen de geselecteerde waarde van de dropdown doorgeven en vervolgens op basis van de doorgegeven waarde 2 tabellen opbouwen.quote:Op woensdag 23 december 2009 16:52 schreef hamkaastosti het volgende:
je bouwt je select niet goed op.
[ code verwijderd ]
wel erg basic html hoor
thx tosti het werkt! Ik ga nu proberen de includes aan de praat te krijgen.quote:Op woensdag 23 december 2009 17:08 schreef hamkaastosti het volgende:
een select list is in zijn simpelste vorm:
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
om de ingevulde waarde in php uit te lezen vul je de eerste regel aan met:
<select name="datum">
vervolgens kun je de ingevulde waarde met php uitlezen als $_POST['datum']
1 |
1 |
1 |
1 |
Niet.quote:Op donderdag 24 december 2009 22:47 schreef Tijn het volgende:
Hoe skip je een parameter? Ik bedoel dat je bijvoorbeeld wel de 4e parameter aan een functie meegeeft, maar niet de derde.
Als je de vierde parameter wilt meegeven, moet je ook de derde meegeven. Zo staat het ook in de documentatie.quote:Neem bijvoorbeeld de functie array_slice(). Die heeft twee optionele parameters: de 3e parameter geeft de lengte van de array aan en de 4e parameter geeft aan of je de keys wil behouden of niet.
1 |
Tenzij je resultset minder dan 10 rijen heeft.quote:Op vrijdag 25 december 2009 19:23 schreef xaban06 het volgende:
Wie kan mij een schop geven in de juiste richting.
Ik heb een SELECT query, met LIMIT 10 aan het einde. Dus ik heb altijd 10 'rows'.
Zoiets?quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | content1 = array(); content2 = array(); for($i = 1; $i <= count($datarows); $i++) { if($i % 2 != 0) // $i is oneven { $content1[] = $datarows[$i]; } else // $i is even { $content2[] = $datarows[$i]; } } ?> |
Ja okay, maar omdat in het voorbeeld van xaban06 zijn "data rows" bij 1 begonnen, dacht ik: dat hou ik dan ook maar even aan.quote:Op zaterdag 26 december 2009 01:49 schreef GlowMouse het volgende:
arrays beginnen in PHP met 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | if(isset($_POST['send'])) { echo "Accessing username using POST : " . $_POST['username'] . "<br>"; echo "Accessing username using REQUEST : " . $_REQUEST['username'] . "<br>"; $password = $_POST['password']; echo "Password is $password"; } else { echo "<form method='post' action='$_SERVER['PHP_SELF']'>"; echo "<input name='password' type='password'><br>"; echo "<input name='username' type='username'><br>"; echo "<input name='send' type='submit' value='Send!'>"; echo "</form>"; } ?> |
1 |
al opgelost.Ik weet niet precies wat foutzat. Ik denk dat er een quotje fout stond of zo.quote:Op zaterdag 26 december 2009 14:21 schreef jakees het volgende:
hallo,
ik probeer te werken met PHP_SELF maar het lukt niet erg. Ik heb de volgende code:
[ code verwijderd ]
Als ik de action laat staan krijg ik een lege pagina. Wanneer ik de code
[ code verwijderd ]
weghaal werkt het wel. Weet iemand wat ik verkeerd doe?
thx alvast.
Je hoort zo'n unique constraint in dit geval dan ook te leggen op de combinatie Parent ID + Naam i.p.v. alleen Naam. Je wilt immers toch de unieke namen per parent.quote:Op zondag 27 december 2009 19:18 schreef wobbel het volgende:
Oke, deze is voor mij lastig en ik kom er ook niet uit
Ik ben een CMS systeem aan het bouwen die met nette pagina url's overweg kan (bijv. http://www.example.com/grafisch/folders/verspreiding)
Dit krijg ik voor elkaar dmv een hierarchische tabel (als ik het zo goed spel ) Hiervoor heb ik gebruik gemaakt van de volgende tutorial op mysql.com => http://dev.mysql.com/tech(...)erarchical-data.html
Alleen loop ik nu tegen een probleem aan, er kunnen geen dubbele namen aanwezig zijn (in de tutorial is het de veld "name").
Hoe los ik dat op?
http://www.example.com/grafisch/folders/verspreiding kan dus wel, maar http://www.example.com/overig/verspreiding kan niet omdat verspreiding al gebruikt is als "name" en dubbele names dan loopt de boel zeg maar vast
Maar hoe ga ik dat doen met SQL dan?quote:Op zondag 27 december 2009 19:21 schreef Tuvai.net het volgende:
[..]
Je hoort zo'n unique constraint in dit geval dan ook te leggen op de combinatie Parent ID + Naam i.p.v. alleen Naam. Je wilt immers toch de unieke namen per parent.
1 2 3 4 5 6 | FROM C_pages AS node, C_pages AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.name = 'verspreiding' ORDER BY parent.lft; |
Eerst met een regex de datum er uit halen, dis via strtotime omzetten in een unix time string, daar het aantal seconden af halen, en dan weer via date omzetten naar je formaat?quote:Op maandag 28 december 2009 01:00 schreef xaban06 het volgende:
Voor mijn 'lastonline' field gebruik het volgende formaat:
JaarMaandDagUurMinuut
Een voorbeeld zou zijn:
200929120105 (29 december 2009, 01:05).
Hoe is het mogelijk om na te gaan hoe die field 10 minuten terug er uit zou zien?
Ik weet het, ik heb voor een foute formaat gekozen
Ik heb het gevonden, het kan makkelijker!quote:Op maandag 28 december 2009 01:02 schreef PiRANiA het volgende:
[..]
Eerst met een regex de datum er uit halen, dis via strtotime omzetten in een unix time string, daar het aantal seconden af halen, en dan weer via date omzetten naar je formaat?
Maar dat is op basis van de huidige tijd, niet op basis van de tijdstring die je al hebt.quote:Op maandag 28 december 2009 01:20 schreef xaban06 het volgende:
[..]
Ik heb het gevonden, het kan makkelijker!
date('YmdHi', strtotime('-10 minutes'));
Mja, mijn fout Verkeerd uitgelegt.quote:Op maandag 28 december 2009 01:21 schreef Tijn het volgende:
[..]
Maar dat is op basis van de huidige tijd, niet op basis van de tijdstring die je al hebt.
quote:Op maandag 28 december 2009 01:24 schreef xaban06 het volgende:
[..]
Mja, mijn fout Verkeerd uitgelegt.
Da's niet hetzelfde formaat als in je voorbeeldstring 200929120105, dat was YdmHi.quote:Op maandag 28 december 2009 01:20 schreef xaban06 het volgende:
[..]
Ik heb het gevonden, het kan makkelijker!
date('YmdHi', strtotime('-10 minutes'));
1 2 3 4 5 6 | {s:6:"inhoud";s:0:"";s:5:"error";s:25:"Uw email adres is onjuist";}}}status|s:0:""; userID|s:1:"1";auth|a:4:{s:2:"id";s:1:"1";s:8:"username";s:13:"administrator";s:2:"ip";s:10:"127.0.0.48"; s:7:"browser";s:173:"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)";} |
Spelfoutjequote:Op maandag 28 december 2009 07:17 schreef Light het volgende:
[..]
Da's niet hetzelfde formaat als in je voorbeeldstring 200929120105, dat was YdmHi.
Ik geef aan iedere record altijd een unieke ID mee, of het nou wel of niet noodzakelijk is. Stiekem denk ik daar eigelijk niet over na.quote:Op dinsdag 29 december 2009 20:59 schreef hamkaastosti het volgende:
de indeling van je tabellen daargelaten vind ik je naamgeving raar. Bij een poll geef je geen points en een answer maar kies je een option dmv een vote oid
en ook de id bij je poll_log lijkt me niet echt nodig.. je selecteer rijen in die tabel op poll_id of op ip en als je een poll verwijderd kun je dat log ook leeggooien door alle rijen met het poll_id of 1 rij dmv van het ip
Leuke website! Nicequote:Op dinsdag 29 december 2009 20:31 schreef Chandler het volgende:
lijkt me erg goed; gebruik zo'n opzet voor www.gfxpoll.nl en natuurlijk www.gfxpoll.com al zou ik je wel aanraden als je echt de database wilt optimaliseren het best handig is om een apparte tabel te gebruiken voor het ip adres en deze in je poll_log tabel te verbinden middels een ID, scheelt ietsje pietsje data.
1 |
1 2 | Implicit conversion from data type datetime to int is not allowed. Use the CONVERT function to run this query. |
Controlleer je veld types eens, ziet er naar uit dat je daart een verschil in hebtquote:Op woensdag 30 december 2009 08:46 schreef DaFan het volgende:
SQL:
Ik heb een 20-tal databases, en deze bevatten allen exact dezelfde tabellen (met andere informatie). Er is een tabel die ik heb gemaakt in DB 005, en die wil ik kopiëren naar alle andere databases.
Ik heb er 10 gedaan met de volgende statement:
[ code verwijderd ]
Gaat allemaal goed, tot de laatste 10, daar krijg ik foutmelding:
[ code verwijderd ]
Enig idee?
Yup, met de select * geef je die volgorde direct door aan je insert into.quote:Op woensdag 30 december 2009 08:52 schreef DaFan het volgende:
Hm kan het ermee te maken hebben dat de kolommen in de laatste 10 tabellen 'verkeerd' staan?
Zeg maar in DB 005 is het A B C D
en in (bv) DB 022 en verder is het A B D C
Fantastisch, het werktquote:Op woensdag 30 december 2009 09:02 schreef ursel het volgende:
Je kan natuurlijk ook ipv select * de kolom volgorde in je select zetten
Sorry, moest effe mijn nieuwste botje testen.quote:Op woensdag 30 december 2009 18:52 schreef PiRANiA het volgende:
[ afbeelding ]
Servertje heeft het zwaar
Test geslaagdquote:Op woensdag 30 december 2009 19:02 schreef Tuvai.net het volgende:
[..]
Sorry, moest effe mijn nieuwste botje testen.
waaruit blijkt dat?quote:Op woensdag 30 december 2009 18:52 schreef PiRANiA het volgende:
[ afbeelding ]
Servertje heeft het zwaar
Jij zal het niet veel vinden (als je de FOK! stats hebt gezien), maar ik vind 60 queries per seconde vrij veelquote:
Ik was eigenlijk meer aan het kijken naar je 'Failed attempts". 60 queries per seconden vind ik niet zo heel gek veel, meer dan 1000 failed connection attempts in een uur tijd echter wel.quote:Op woensdag 30 december 2009 19:28 schreef PiRANiA het volgende:
[..]
Jij zal het niet veel vinden (als je de FOK! stats hebt gezien), maar ik vind 60 queries per seconde vrij veel
Hoe kom ik er achter waar het fout gaat?quote:Op woensdag 30 december 2009 19:29 schreef Tuvai.net het volgende:
[..]
Ik was eigenlijk meer aan het kijken naar je 'Failed attempts". 60 queries per seconden vind ik niet zo heel gek veel, meer dan 1000 failed connection attempts in een uur tijd echter wel.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |