Vind het prettiger in gebruik dan mysqli in OOP.quote:Op maandag 16 december 2013 16:39 schreef rekenwonder het volgende:
Om er maar eens eentje in te gooien: waarom zie ik deze topics zoveel gebruik van mysql_* of mysqli_* en zo weinig van PDO?
Voor een beginner lijkt het me op zich wel goed om te beginnen met mysql_( i ) en daarna PDO.quote:Op maandag 16 december 2013 16:39 schreef rekenwonder het volgende:
Om er maar eens eentje in te gooien: waarom zie ik deze topics zoveel gebruik van mysql_* of mysqli_* en zo weinig van PDO?
Mij niet. Alleen maar nadelen.quote:Op maandag 16 december 2013 17:24 schreef Baghdaddy het volgende:
[..]
Voor een beginner lijkt het me op zich wel goed om te beginnen met mysql_(i) en daarna PDO.
Hoezo?quote:Op maandag 16 december 2013 17:24 schreef Baghdaddy het volgende:
Voor een beginner lijkt het me op zich wel goed om te beginnen met mysql_( i ) en daarna PDO.
Nee ik trek mijn bewering terug. In mijn geval vond ik het handig om kennis te maken met PHP en MySQL m.b.v. mysql_i omdat het mij wat simpeler leek om te begrijpen. Als ik terugkijk had ik PDO liever eerder ontdektquote:
haal die haakjes eens weg.quote:Op maandag 16 december 2013 17:24 schreef Baghdaddy het volgende:
[..]
Voor een beginner lijkt het me op zich wel goed om te beginnen met mysql_( i ) en daarna PDO.
Onzinreden. Gelijk met PDO beginnen. Leer je het in een keer goed, kan je ook makkelijk meenemen naar andere talen waar ze soortgelijke dingen hebben zoal DBI in Perl.quote:Op maandag 16 december 2013 17:24 schreef Baghdaddy het volgende:
[..]
Voor een beginner lijkt het me op zich wel goed om te beginnen met mysql_( i ) en daarna PDO.
De mysql_* functies moet je sowieso niet meer gebruiken (tenzij je een fix gaat doen in bestaande code die van die functies gebruik maakt). Die zijn officieel deprecated en gaan er in de toekomst helemaal uit.quote:Op maandag 16 december 2013 16:39 schreef rekenwonder het volgende:
Om er maar eens eentje in te gooien: waarom zie ik deze topics zoveel gebruik van mysql_* of mysqli_* en zo weinig van PDO?
Er zit ook helemaal geen voordeel aan, en mysqli is niet ingewikkelder ofzo.quote:Op maandag 16 december 2013 20:54 schreef Light het volgende:
[..]
De mysql_* functies moet je sowieso niet meer gebruiken (tenzij je een fix gaat doen in bestaande code die van die functies gebruik maakt). Die zijn officieel deprecated en gaan er in de toekomst helemaal uit.
True, maar ik had het er specifiek over dat je niet mysql_ moet gebruiken. mysqli_ kan prima, maar ik zou PDO aanraden.quote:Op maandag 16 december 2013 23:02 schreef RetRy32 het volgende:
[..]
Er zit ook helemaal geen voordeel aan, en mysqli is niet ingewikkelder ofzo.
Wel als je geen OOP ervaring hebt.quote:Op maandag 16 december 2013 23:02 schreef RetRy32 het volgende:
[..]
Er zit ook helemaal geen voordeel aan, en mysqli is niet ingewikkelder ofzo.
Ook dan is PDO makkelijker. De syntax is prima in procedurele code te verwerken zonder enige kennis van OOP.quote:Op dinsdag 17 december 2013 10:16 schreef Devolution het volgende:
[..]
Wel als je geen OOP ervaring hebt.
Klopt.quote:Op dinsdag 17 december 2013 10:49 schreef KomtTijd... het volgende:
[..]
Ook dan is PDO makkelijker. De syntax is prima in procedurele code te verwerken zonder enige kennis van OOP.
1 2 3 4 | <form method="request" action="http://www.xxx.nl/cms/requests/request.php?func=Search&" id="searchform"> <h1>Artiest</h1> <input type="text" name="searchtext" /> </form> |
Waarom werk je via get variabelen in je URL om een zoek functie uit te voeren? Je kunt toch sowieso gewoon in je cms/request/search.php?query=artiestnaam doen en aan de achterkant uitzoeken of er op een artiest moet worden gezocht of een combinatie van variabelen?quote:Op vrijdag 3 januari 2014 22:27 schreef DenS het volgende:
Ik heb een probleempje!
Het volgende heb ik op dit moment:
[ code verwijderd ]
Het bovenstaande moet naar http://www.xxx.nl/cms/req(...)h&searchtext=artiest gaan, maar dat doet ie niet![]()
Hij maakt er nu dit van: http://www.xxx.nl/cms/requests/request.php?searchtext=Misss
Dus het mist ?func=Search&
Iemand hier die kan helpen?
Gehele map /request/ wordt aangeleverd door de software maker van onze playout systeem. Dus wil er niet teveel in veranderen binnen die code vanwege updates etc. Voor nu de makkelijkste optie.quote:Op vrijdag 3 januari 2014 22:49 schreef boem-dikkie het volgende:
[..]
Waarom werk je via get variabelen in je URL om een zoek functie uit te voeren? Je kunt toch sowieso gewoon in je cms/request/search.php?query=artiestnaam doen en aan de achterkant uitzoeken of er op een artiest moet worden gezocht of een combinatie van variabelen?
Daarom houdt je altijd een UPDATE log bijquote:Op vrijdag 3 januari 2014 22:51 schreef DenS het volgende:
[..]
Gehele map /request/ wordt aangeleverd door de software maker van onze playout systeem. Dus wil er niet teveel in veranderen binnen die code vanwege updates etc. Voor nu de makkelijkste optie.
Protip: patch-files.quote:Op zaterdag 4 januari 2014 03:02 schreef Chandler het volgende:
[..]
Daarom houdt je altijd een UPDATE log bijde updates die je zelf maakt kunnen in het geval van een template update zo weer aangepast worden.
Juist. Url? verwijzing?quote:
http://lmgtfy.com/?q=how+to+create+a+patchquote:
Ik doe:quote:Op maandag 6 januari 2014 17:47 schreef zoem het volgende:
Ik volg het niet helemaal. De functie rawurlencode() geeft een string terug. Wat wil je er mee kunnen doen? Want ik snap niet wat MySQL en/of html hiermee te maken heeft
Geeft niet, alleen je verhaal was ietwat wazigquote:Op maandag 6 januari 2014 17:59 schreef Skunk-m het volgende:
Ja ik begrijp er ook niks van anders had ik het hier niet gevraagd..
Ah kijk, dan heb je iig een aanknopingspunt. Je kunt beter var_dump() gebruiken ipv echo, omdat dan de weergave (beter) overeenkomt met de inhoud van je variabele en kijk bij voorkeur naar de bron van je pagina ipv de pagina zelf.quote:EDIT: ah.. als je em echoed word ie uberhaupt gedecode.. dus waarschijnlijk doet rawurldecode uberhaupt niks.. kzal wel een andere functie nodig hebben ofzo..
Ja ik had em al tussen script tags gezet en daarna in de bron gekeken..quote:Ah kijk, dan heb je iig een aanknopingspunt. Je kunt beter var_dump() gebruiken ipv echo, omdat dan de weergave (beter) overeenkomt met de inhoud van je variabele en kijk bij voorkeur naar de bron van je pagina ipv de pagina zelf.
HTML <script> tags bedoel je? Dat is een manier om javascript code te embedden, heb je ook niets aan. <pre> tags kunnen soms nuttig zijn, maar om je rauwe output te zien moet je altijd gewoon de paginabron bekijken inderdaad.quote:Op maandag 6 januari 2014 18:12 schreef Skunk-m het volgende:
[..]
Ja ik had em al tussen script tags gezet en daarna in de bron gekeken..
schijnbaar was ie gehtmlentitied nu heb k html_entity_decode() gebruikt en dat werkt.
iig bedankt
oja in de bron kijken had misschien ook gekunt, maar ik keek bij element bekijken gebeuren in chrome zeg maar en daar was het ook gewoon gedecode, maar ik moest bij phpbb in een javascript code hebben en daar stond ie wel verkeerd, dus had ik bij mn testbestandje ook maar even script tags eromheen gezet.. maar het is iig opgelost ja.quote:HTML <script> tags bedoel je? Dat is een manier om javascript code te embedden, heb je ook niets aan. <pre> tags kunnen soms nuttig zijn, maar om je rauwe output te zien moet je altijd gewoon de paginabron bekijken inderdaad.
iig bug gevonden dus![]()
Ik moet het toch even vragen: Die mysql_ functie was alleen voor het voorbeeld toch hoop ik?
http://www.php.net/manual/en/function.delete.phpquote:delete
delete — See unlink() or unset()
Description ¶
This is a dummy manual entry to satisfy those people who are looking for unlink() or unset() in the wrong place.
quote:Op donderdag 9 januari 2014 01:15 schreef KomtTijd... het volgende:
Bheheh.
[..]
http://www.php.net/manual/en/function.delete.php
Volgens mij staat dat aardig beschreven, omdat de unlink functie ook in C gebruikt wordt... oh en delete oftewel del is een 'dos' commandoquote:Op donderdag 9 januari 2014 01:36 schreef zoem het volgende:
Waarom noemt php het dan ook unlink ipv delete
Omdat delete() ook voor directory's is (dan roept die eigenlijk rmdir() op) unlink is enkel voor files.quote:Op donderdag 9 januari 2014 01:36 schreef zoem het volgende:
Waarom noemt php het dan ook unlink ipv delete
Omdat je de inode pointer breekt en dus de link verbreekt. Je verwijderd de file niet, maar de link naar de file.quote:Op donderdag 9 januari 2014 01:36 schreef zoem het volgende:
Waarom noemt php het dan ook unlink ipv delete
Unlink() is een Posix-functie en is een variant op de C-functie remove(). Over het algemeen zijn C runtime functies zoals remove() meer portable dan Posix-functies. Beide functies bestaan overigens in de C runtime headers in Windows. Dat del een dos-commando is en unlink een Linux commandlinefunctie heeft er verder weinig mee te maken, omdat dat system utilities zijn en geen C/Posix-functies.quote:Op donderdag 9 januari 2014 03:07 schreef Chandler het volgende:
[..]
Volgens mij staat dat aardig beschreven, omdat de unlink functie ook in C gebruikt wordt... oh en delete oftewel del is een 'dos' commando![]()
Maar dit zal noobs helpen (hoop ik)
Het klopt inderdaad dat unlink() (en ook remove()) alleen bestanden kunnen 'verwijderen'. System utilities als del (delete zit niet in ms-dos) hebben weinig te maken met de C/Posix-functies.quote:Op donderdag 9 januari 2014 03:18 schreef d4v1d het volgende:
[..]
Omdat delete() ook voor directory's is (dan roept die eigenlijk rmdir() op) unlink is enkel voor files.
http://stackoverflow.com/a/15124886
Klopt, maar in ruime zin mag het bestand na unlink niet meer (op normale wijze) vindbaar zijn. Voor een taal als php maakt het niet veel uit of het beestje nu unlink, delete, erase of remove heet, omdat het enige doel het 'verwijderen' van het bestand is. Hoe dat low-level gebeurt is voor een taal als php niet interessant, zolang het maar portable is en een consistent gedrag vertoont tussen de verschillende besturingssystemen. Zoals ik hierboven al zei kunnen ze dan beter focussen op een consiste naming convention ipv bij verschillende talen wat functienamen bij elkaar te grabbelen.quote:Op donderdag 9 januari 2014 10:00 schreef slacker_nl het volgende:
[..]
Omdat je de inode pointer breekt en dus de link verbreekt. Je verwijderd de file niet, maar de link naar de file.
http://perldoc.perl.org/functions/unlink.html
http://linux.die.net/man/2/unlink
PHP is gebasseerd op Perl, en in perl heet het unlink en Perl is weer in C geschreven, waar het ook unlink is. Dus de naming convention is correct.quote:Op donderdag 9 januari 2014 12:49 schreef zoem het volgende:
Klopt, maar in ruime zin mag het bestand na unlink niet meer (op normale wijze) vindbaar zijn. Voor een taal als php maakt het niet veel uit of het beestje nu unlink, delete, erase of remove heet, omdat het enige doel het 'verwijderen' van het bestand is. Hoe dat low-level gebeurt is voor een taal als php niet interessant, zolang het maar portable is en een consistent gedrag vertoont tussen de verschillende besturingssystemen. Zoals ik hierboven al zei kunnen ze dan beter focussen op een consiste naming convention ipv bij verschillende talen wat functienamen bij elkaar te grabbelen.
eensch.quote:Op donderdag 9 januari 2014 13:18 schreef KomtTijd... het volgende:
Ze zouden voor PHP6 of 7 gewoon een goeie naming convention moeten ontwerpen, en al die duizenden aliases de deur uit doen.
Dat is historisch zo gegroeid inderdaad, maar dat wil niet zeggen dat de naming convention in php als geheel klopt (waar het me om ging). Ik denk dat iedereen deze inmiddels wel kent: PHP: a fractal of bad designquote:Op donderdag 9 januari 2014 13:15 schreef slacker_nl het volgende:
[..]
PHP is gebasseerd op Perl, en in perl heet het unlink en Perl is weer in C geschreven, waar het ook unlink is. Dus de naming convention is correct.
Dan heb je mijn eerste alinea niet gelezenquote:Ik ben het 100% met je eens dat ze in PHP een betere conventie moeten gaan hanteren, idem voor needle-haystack conventies, maar om dan unlink als voorbeeld te nemen is ridicuul.
quote:Op donderdag 9 januari 2014 12:49 schreef zoem het volgende:
Mijn opmerking was eigenlijk meer een sneer naar php. Ik vond het wel ironisch dat de manual poogt grappig te zijn door te impliceren dat de php-functieset logisch in elkaar zit. Ze jatten functies en conventies van verschillende talen bij elkaar - waaronder inderdaad van C.
Wat werkt er precies niet?quote:Op donderdag 9 januari 2014 13:29 schreef n8n het volgende:
Ik heb een class::functie() die een return geeft van een array of null. Nu werkt het alleen niet als ik if (empty(class::functie()) doe. Waarom is dat?
Zowel null als een lege array zijn empty. Kun je wat meer info geven?quote:Op donderdag 9 januari 2014 13:29 schreef n8n het volgende:
Ik heb een class::functie() die een return geeft van een array of null. Nu werkt het alleen niet als ik if (empty(class::functie()) doe. Waarom is dat?
quote:
helaasquote:Op donderdag 9 januari 2014 14:30 schreef ViPeRII het volgende:
quote van php.net
Prior to PHP 5.5, empty() only supports variables; anything else will result in a parse error. In other words, the following will not work: empty(trim($name)). Instead, use trim($name) == false.
Ik doe een email query dmv een functie, als deze niet gevonden wordt return ik een null. ik maak nu een variabele van de functie die ik later gebruik. Was achteraf sowieso handiger omdat ik anders bij meerdere if statements de functie (en dus query) moet laten lopen en dat leek me onnodige overhead geven.quote:Op donderdag 9 januari 2014 14:07 schreef zoem het volgende:
[..]
Zowel null als een lege array zijn empty. Kun je wat meer info geven?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php // check email input if (empty($email)) { $error['email'] = 'empty'; } elseif (filter_var($email, FILTER_VALIDATE_EMAIL) == false) { $error['email'] = 'invalid'; } elseif (isset(user::check($email)) && (isset($register))) { $error['email'] = 'taken'; } elseif (empty(user::check($email)) && (isset($login))) { $error['email'] = 'absent'; } ?> |
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 | <?php // check email input if (empty($email)) { $error['email'] = 'empty'; } elseif (filter_var($email, FILTER_VALIDATE_EMAIL) == false) { $error['email'] = 'invalid'; } else { // check if email input exists $user = user::check($email); if (isset($user['email']) && (isset($register))) { // registration: email already exists in database $error['email'] = 'taken'; } elseif (empty($user['email']) && (isset($login))) { // login: email address not in database $error['email'] = 'absent'; } } ?> |
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 | <?php class user { static function check($email) { global $connect; $query = $connect->prepare("select id, email, userkey, password from user where email = :email"); $query->bindParam(':email', $email, PDO::PARAM_STR); $query->execute(); $user = $query->fetch(); if (empty($user)) { return null; } else { return $user; } } } ?> |
1 2 3 4 | $query = $connect->prepare("select id, email, userkey, password from user where email = :email"); $query->bindParam(':email', $email, PDO::PARAM_STR); $query->execute(); $user = $query->fetch(); |
1 2 3 4 5 6 7 8 | user::getUserByEmailAdress(email) implementatie: checkEmailAdress(email) true: getUserbyEmailAdress(email) false: null |
1 2 3 4 5 6 7 8 9 | function assert_valid_email($meuk) { # $VALID_EMAIL_REGEXP is dan gewoon een constante, maar ik weet niet hoe dat eruit ziet in php if (preg_match($VALID_EMAIL_REGEXP, $meuk)) { return 1; } else { throw Exception("Invalid e-mail"); } } |
Je kan een exceptie afvangen. Een invalide e-mailadres moet niet opgegeven zijn door je front-end en dient dus te klappen. De frontend kan ook wat met je Exception doen en klaar. Plus het test makkelijk.quote:Op vrijdag 10 januari 2014 22:23 schreef zoem het volgende:
Het heeft inderdaad wel zo zijn voordelen, omdat je minder logic hoef te schrijven in het daadwerkelijke proces. Echter betwijfel ik of het gebruik van exceptions in elke validatie/conditionele case wel the way to go is. Ik zet ze zelf pas in bij de wat kritischere functies of externe aanroepen/services. Een vrij basale true/false case lijkt het me wel wat overkill.
1 2 3 4 5 | sub get_user_by_email { my $args = check({email => {allow => VALID_EMAIL_REGEXP, required => 1},},{@_}); $db->resultset('User')->search({%$args})->single(); } |
Eens.quote:Op vrijdag 10 januari 2014 22:26 schreef slacker_nl het volgende:
[..]
Je kan een exceptie afvangen. Een invalide e-mailadres moet niet opgegeven zijn door je front-end en dient dus te klappen. De frontend kan ook wat met je Exception doen en klaar. Plus het test makkelijk.
Als fout: dan klappen, als goed, dan doorgaan.
Tuurlijk kan je ook een boolean value checken, maar als je get_user_by_email($email) doet en je mailadres is fout dan ga je geen null returnen omdat je mogelijk geen users vind en dan is een exception echt wel een betere oplossing. Daarom is het ook een assert_
Bij het gebruik van asserts ben ik het volledig met je eens. Je beweert (assert) dan dat iets waar is. Zo niet: bam, exception!quote:Op vrijdag 10 januari 2014 22:26 schreef slacker_nl het volgende:
[..]
Je kan een exceptie afvangen. Een invalide e-mailadres moet niet opgegeven zijn door je front-end en dient dus te klappen. De frontend kan ook wat met je Exception doen en klaar. Plus het test makkelijk.
Als fout: dan klappen, als goed, dan doorgaan.
Tuurlijk kan je ook een boolean value checken, maar als je get_user_by_email($email) doet en je mailadres is fout dan ga je geen null returnen omdat je mogelijk geen users vind en dan is een exception echt wel een betere oplossing. Daarom is het ook een assert_
In sommige gevallen is het wel degelijk een Exception als je naar iets zoekt en je vind er geen of meer dan een. Je database kan dan vervuild zijn en wat moet je dan geloven? In dit geval zouden er nul of een resultaten moeten zijn, je kan niet meerdere users met hetzelfde adres hebben. Vind je meer dan twee users dan moet je m.i. een exceptie rond gaan gooien.quote:Op vrijdag 10 januari 2014 22:53 schreef zoem het volgende:
Bij het gebruik van asserts ben ik het volledig met je eens. Je beweert (assert) dan dat iets waar is. Zo niet: bam, exception!
Maar stel: een admin zoekt naar een user op e-mailadres, dan heb je geen zekerheid dat het adres bestaat. In zo'n geval zou ik eerder een false/null/leeg iets verwachten ipv een exception. Het zit hem ook in de naam: een exception gaat om een uitzonderingsgeval of een onverwachte situatie. Zolang het proces binnen het verwachtingskader verloopt verwacht je geen exception. En in mijn voorbeeld kún je verwachten dat er geen user matcht op het ingegeven e-mailadres.
Uiteindelijk maakt het niet uit tot welk niveau je exceptions inzet, zolang je maar consequent bent want dat is veel waardevoller
1 2 3 4 5 | getuser_by_email { assert_valid_email($email); my @res = $db->search('User', email => $email); throw("Multiple users found where one or less expected") if @res > 1; } |
omdat ik de informatie wil gebruiken om het wachtwoord te validerenquote:Op vrijdag 10 januari 2014 17:26 schreef Chandler het volgende:
waarom NULL? waarom niet gewoon false? if (($value == class::function()) != false) { // do dit } oid..
hoop dat ik het goed geschreven heb, want met deze syntax zit ik nog wel eens fout...
-edit-
dit gaat ook nergens over, waarom niet gewoon functies gebruiken die specifiek geschreven zijn om te kijken of er een resultaat is?
[ code verwijderd ]
http://nl1.php.net/manual/en/pdostatement.rowcount.php
in principe kan het toch niet voorkomen, sowieso is elk email adres in de tabel uniek.quote:Op zaterdag 11 januari 2014 14:19 schreef xzaz het volgende:
Ik gooi altijd dat Exceptions in situaties die eigenlijk niet mogen voorkomen.
Dat er een gebruiker niet kan worden gevonden op een e-mail adres is prima. Dat kan voorkomen, bijvoorbeeld bij een check als de gebruiker al eens in aangemeld. De hoeveelheid e-mail adressen mogen niet meerdere keren voorkomen omdat dit als PK / ID wordt gezien. In het geval dat er 2 gebruikers worden geretourneerd door de methode getUserByEmail() is er iets mis met 1) de DB (itegriteit) en 2) de Code. In dat geval zal ik echt, boem een Exception gooien. Hence de naam 'Exception'.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |