Niet helemaal waar, het is wel mogelijk om een functie door te geven aan een andere functie. Maar de manier waarop ziet er niet uit, en 't is geen mooie optie. Verder is er geen functie om te bepalen of een string als "string" of als 'string' gedefinieerd is. Er zit ook geen verschil in die definities, behalve bij het aanmaken van de string zelf.quote:Op zondag 20 december 2015 20:35 schreef n8n het volgende:
[..]
Ja dacht ik al, net als dat je geen functie kan doorgeven maar alleen het resultaat. Helaas.
1 2 3 4 5 6 7 8 9 | <script> a = document.getElementById(id); b = ' " ' + a + ' " '; if (b) { //met enkele aanhalingstekens (want b = " ' value ' " --> geen error) } else { // met dubbele aanhalingstekens (want b = " " value " " --> wel error) } </script> |
dit is js lieverd (al ga ik deze functie later ook daarmee schrijven). Ik heb als 'hack' al geprobeerd een regex door te sturen maar ook dat moet als string. Ik zal zo even de functie neerplempen.quote:Op maandag 21 december 2015 11:55 schreef Ser_Ciappelletto het volgende:
Is er geen manier om daarvoor wat gewoonlijk een error zou zijn te gebruiken? Je invoerveld/script zodanig samenstellen met wat gewoonlijk een syntax-error zou geven, dat invoer met een " een bepaalde output geeft en invoer met een ' een andere.
Naïef voorbeeld dat allicht niet werkt om een idee te geven:
[ code verwijderd ]
It's not an error, it's a feature.
Ja, ik weet dat het JS is, maar zoals gezegd werkt dat niet met PHP omdat die strings niet opslaat met de eigen aanhalingstekens. Je kunt dat altijd ajax-en.quote:Op maandag 21 december 2015 12:11 schreef n8n het volgende:
[..]
dit is js lieverd (al ga ik deze functie later ook daarmee schrijven). Ik heb als 'hack' al geprobeerd een regex door te sturen maar ook dat moet als string. Ik zal zo even de functie neerplempen.
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 | <?php // create elements from array function el(array $element = null, $item = null){ foreach ($element as $key => $value){ if ($key === 0){ $tag = $value; } // set tag elseif (is_numeric($key)){ // text content and/or html element if (gettype($value) === 'string' || is_numeric($value)) $content.= $value; else $content.= el($value, $data); } else $attributes.= attribute($key, $value, $item); // element attributes } // create html element and set attributes if any if (!$attributes) $result.= '<'.$tag.'>'; else $result.= '<'.$tag.' '.trim($attributes).'>'; // add contents if any and close element if ($content) $result.= $content.'</'.$tag.'>'; return $result; } // create element list from $data function html(array $element, array $data = null){ if (!$data) $result.= el($element); else foreach($data as $item){ $result.= el($element, $item); } return $result; } // create element attribute function attribute($name, $value, $item = null){ if ($value === true) return ' '.$name; if (gettype($value) === 'array') $value = find($value, $item); if (gettype($value) === 'string' || is_numeric($value)) { $quote = (preg_match('/^\w+$/', $value) ? null : '"'); return ' '.$name.'='.$quote.$value.$quote; } } // check for key in element $item array function find($keys, array $item = null){ if ($item && $match = $item[$keys[0]]) return $match; elseif ($item) $keys[0] = null; foreach($keys as $key => $value){ if ($value) return $value; } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php // <header class=test><h1>Title</h1></header> echo el(['header', 'class'=>'test', ['h1', "Title"] ]); // <p>Text</p> echo el(['p', "Text"]); // data for the next template $pages = [ ['path'=>"one", 'name'=>"Page One",'title'=>"A page" ], ['path'=>"two", 'name'=>"Page Two", 'alt'=>"Another page" ] ]; // <ul><li><a href=one title="A Page">test</a><a href=two title="Another Page">test</a></li></ul> echo el(['ul', html(['li', ['a', 'href'=>['path'], 'title'=>['title'], "test" ] ], $pages)]); ?> |
Het eerste dat me bij die code opvalt is dat de functie el() 2 optionele argumenten heeft, waarbij de eerste een array moet zijn als je 'm opgeeft en anders gewoon null is. Vervolgens gebruik je die parameter alsof het altijd een array is, dat gaat vroeg of laat fout.quote:Op maandag 21 december 2015 13:13 schreef n8n het volgende:
Laat het echte probleem wel ff zien met de functie. Het gaat voornamelijk om el(), de andere zijn helper functies. html() is om een lijst van element uit te poepen, attribute om een attribute te maken, en find() om waarden uit de optionele $item te vinden.
De PHP
[ code verwijderd ]
De templating werkt met de data uit arrays.
Dit:
[ code verwijderd ]
Wat ik wil is waar in de laatste plaats "test" staat, er ook een key van $pages ingevuld kan worden.
Sorry voor de enorme lap code
edit: simpelere voorbeelden, door te nesten kan je een hele DOM opbouwen.
1 2 3 4 5 | <?php function el(array $element = null, $item = null){ foreach ($element as $key => $value){ ?> |
1 2 3 4 5 | <?php function el(array $element = array(), $item = null){ foreach ($element as $key => $value){ ?> |
1 2 3 4 5 | <?php function el(array $element, $item = null){ foreach ($element as $key => $value){ ?> |
Je genereert invalid html, al bij het eerste voorbeeld.quote:Op maandag 21 december 2015 13:13 schreef n8n het volgende:
Dit:
[ code verwijderd ]
Wat ik wil is waar in de laatste plaats "test" staat, er ook een key van $pages ingevuld kan worden.
Sorry voor de enorme lap code
edit: simpelere voorbeelden, door te nesten kan je een hele DOM opbouwen.
1 2 3 4 5 6 | <?php // <header class=test><h1>Title</h1></header> echo el(['header', 'class'=>'test', ['h1', "Title"] ]); ?> |
1 | <header class="test"><h1>Title</h1></header> |
ah dit is leerzaam, ga morgen even goed reageren.quote:Op zaterdag 26 december 2015 22:54 schreef Light het volgende:
[..]
Het eerste dat me bij die code opvalt is dat de functie el() 2 optionele argumenten heeft, waarbij de eerste een array moet zijn als je 'm opgeeft en anders gewoon null is. Vervolgens gebruik je die parameter alsof het altijd een array is, dat gaat vroeg of laat fout.
Dus in plaats van
[ code verwijderd ]
zou ik kiezen voor
[ code verwijderd ]
of voor
[ code verwijderd ]
Verder is het niet duidelijk wat $item voor type moet/mag zijn.
En de functies attribute() en find() hebben niet altijd een return statement. Afhankelijk van wat er aan parameters in gaat, wordt er iets of niets geretourneerd. En je gebruikt op verschillende plekken variabelen die niet eerst geïnitialiseerd zijn. Niet direct fout, maar wel een potentieel risico. Een tikfout in een variabelenaam kan tot ongewenst of onverklaarbaar gedrag leiden, dus wil je bij voorkeur geen enkele notice zien.
Goed, nu eens kijken naar het probleem
Altijd quotes gebruiken is makkelijker, dat scheelt ook in de code omdat je niet hoeft te bepalen of je ze wel of niet moet gebruiken.quote:Op zaterdag 26 december 2015 23:52 schreef n8n het volgende:
Bij enkele woorden zonder speciale karakters kan je de quotes weglaten maar dat is een implementatie-detail.
Ja klopt, ik dacht als ik toch minified html uitpoep kan ik net zo goed quotes weglaten wanneer deze ‘obsolete’ zijn. Ik denk er nog even over na (het is ook maar 1 regel dus zo gewijzigd).quote:Op zondag 27 december 2015 00:26 schreef Light het volgende:
[..]
Altijd quotes gebruiken is makkelijker, dat scheelt ook in de code omdat je niet hoeft te bepalen of je ze wel of niet moet gebruiken.
Ik ben voor de tweede gegaan, een lege array is niet de bedoeling.quote:Op zaterdag 26 december 2015 22:54 schreef Light het volgende:
[..]
Het eerste dat me bij die code opvalt is dat de functie el() 2 optionele argumenten heeft, waarbij de eerste een array moet zijn als je 'm opgeeft en anders gewoon null is. Vervolgens gebruik je die parameter alsof het altijd een array is, dat gaat vroeg of laat fout.
Dus in plaats van
[ code verwijderd ]
zou ik kiezen voor
[ code verwijderd ]
of voor
[ code verwijderd ]
Dat moet ook een array zijn, bij html() kan daar een array met $item's in om een nodelist te renderen, in el() is $item een data rij met named keys waar content in zit. Dit is waar het hele probleem om draait, want het lukt niet om onderscheid te maken tussen een html ‘nodelist’ array of de naam van een key in $item.quote:Verder is het niet duidelijk wat $item voor type moet/mag zijn.
Klopt, dat is nu een silent error omdat ik niet wilde dat wanneer niks gevonden werd er een error kwam, maar een element simpelweg leeg zou zijn. Ik zal een return null toevoegen.quote:En de functies attribute() en find() hebben niet altijd een return statement. Afhankelijk van wat er aan parameters in gaat, wordt er iets of niets geretourneerd.
Hoe bedoel je?quote:En je gebruikt op verschillende plekken variabelen die niet eerst geïnitialiseerd zijn.
Ik ga de eerste batch fixes vast patchen. dankjewel!quote:Niet direct fout, maar wel een potentieel risico. Een tikfout in een variabelenaam kan tot ongewenst of onverklaarbaar gedrag leiden, dus wil je bij voorkeur geen enkele notice zien.
Goed, nu eens kijken naar het probleem
Als voorbeeld de foreach loop in de el() functie.quote:Op zondag 27 december 2015 15:20 schreef n8n het volgende:
[..]
Hoe bedoel je?
[..]
Ik ga de eerste batch fixes vast patchen. dankjewel!
1 2 3 4 5 6 7 8 9 10 | <?php foreach ($element as $key => $value){ if ($key === 0){ $tag = $value; } // set tag elseif (is_numeric($key)){ // text content and/or html element if (gettype($value) === 'string' || is_numeric($value)) $content.= $value; else $content.= el($value, $data); } else $attributes.= attribute($key, $value, $item); // element attributes } ?> |
1 2 3 | <?php $content .= $value; ?> |
1 2 3 4 | <?php if (!$attributes) $result.= '<'.$tag.'>'; else $result.= '<'.$tag.' '.trim($attributes).'>'; ?> |
1 2 3 4 | <?php if (!$attributes) $result = '<'.$tag.'>'; else $result = '<'.$tag.' '.trim($attributes).'>'; ?> |
Een IDE die zulke dingen aangeeft, helpt ook.quote:Op zondag 27 december 2015 18:51 schreef n8n het volgende:
Zal dat nog even aanpassen, die concatenation was nog legacy van een probeersel, scherp.
Light.app bedankt voor je feedback, een IDE is nog even een brug te ver, schrijf meestal JS.quote:Op zondag 27 december 2015 19:07 schreef Light het volgende:
[..]
Een IDE die zulke dingen aangeeft, helpt ook.
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 | <?php $bcm_pin = 4; $huidige_tijd = date ( "U" ); $opkomst = date_sunrise ( time ( ), SUNFUNCS_RET_TIMESTAMP ); $ondergang = date_sunset ( time ( ), SUNFUNCS_RET_TIMESTAMP ); if ( $huidige_tijd > $opkomst AND $huidige_tijd < $ondergang ) { system ("gpio -g mode " . $bcm_pin . " out"); $huidig = exec ("gpio -g read " . $bcm_pin ); if ( $huidig == "1" ) { system ("gpio -g write " . $bcm_pin . " 0" ); echo "Zon opgekomen en status nog 1, op 0 gezet :-)"; } else { echo "Het is licht en de lamp is al uit"; } } else { system ("gpio -g mode " . $bcm_pin . " out"); $huidig = exec ("gpio -g read " . $bcm_pin ); if ( $huidig == "0" ) { system ("gpio -g write " . $bcm_pin . " 1" ); echo "Zon ondergegaan en status nog 0, op 1 gezet :-)"; } else { echo "Het is donker maar de lamp is al aan"; } } ?> |
Ook daarvoor is een IDE geen overkill hoor, zeker als je ook nog wat frameworks oid gebruikt. Kijk bijvoorbeeld eens naar Webstorm:quote:Op zondag 27 december 2015 19:58 schreef n8n het volgende:
[..]
Light.app bedankt voor je feedback, een IDE is nog even een brug te ver, schrijf meestal JS.
Lijkt leuk (afgezien van de overvloed aan spaties) maar ik zou 't script niet afhankelijk maken van de standaardwaarden voor lengte- en breedtegraad. Die zijn bij een standaardinstallatie niet eens in de buurt van je huidige locatie.quote:Op dinsdag 29 december 2015 22:01 schreef wobbel het volgende:
Help, klopt dit zo? Het testen duurt iets te lang Script draait elke minuut via crontab
Het script moet de GPIO op 1 zetten als de zon is ondergegaan en de GPIO nog geen 1 is.
Het script moet ook de GPIO op 0 zetten als de zon is opgekomen en dit nog niet gebeurd is.
[ code verwijderd ]
Ja wel, het is een raspberry in m'n meterkast waar ik de timezone (en lat/long) netjes heb ingevuldquote:Op woensdag 30 december 2015 12:26 schreef Light het volgende:
[..]
Lijkt leuk (afgezien van de overvloed aan spaties) maar ik zou 't script niet afhankelijk maken van de standaardwaarden voor lengte- en breedtegraad. Die zijn bij een standaardinstallatie niet eens in de buurt van je huidige locatie.
Dat was ik inderdaad ook altijd gewend en bovendien werkte ik bij voorgaande werkgevers ook vaak met mensen die de Nederlandse taal niet beheersten. Bij mijn huidige werkgever is het vrij irritant dat de helft van de domeinspecifieke terminologie in het Nederlands is en dat in veel projecten ook in de code is doorgevoerd.quote:Op maandag 18 januari 2016 18:47 schreef Tijn het volgende:
Alles Engels, want je wet nooit met wie je je code later nog wil delen.
Dit.quote:Op maandag 18 januari 2016 18:47 schreef Tijn het volgende:
Alles Engels, want je wet nooit met wie je je code later nog wil delen.
Ik kwam in de documentatie al 3.1 tegen idd, voorlopig blijf ik wel bij 2.8.2quote:Op maandag 18 januari 2016 18:58 schreef robin007bond het volgende:
Wat gaat Symfony 3.0 snel met versienummers zeg.
Misschien handig voor de collega-symfony-developersquote:Op maandag 18 januari 2016 18:58 schreef robin007bond het volgende:
Wat gaat Symfony 3.0 snel met versienummers zeg.
Leuk, maar die short closures komen er niet.quote:Op maandag 11 januari 2016 11:43 schreef Aether het volgende:
There Will Be Many Features Coming For PHP 7.1
PHP 7 was just released over one month ago but there is already much work going into PHP 7.1, the next major update to this widely-used web programming language.
• PHP Cryptography Objects (PCO) for better encryption/decryption/signing.
• Short closures.
• Generic types and functions.
• HTTP/2 and server push support.
Other proposals for future releases of PHP (not necessarily PHP 7.1) can be found via the RFC Wiki area. Stay tuned for more coverage of PHP 7.1 as its release approaches later in the year.
Erg onoverzichtelijk ook, had anders sowieso liever wat meer getypt om het leesbaar te houden.quote:Op maandag 18 januari 2016 19:20 schreef Light het volgende:
[..]
Leuk, maar die short closures komen er niet.
Ach, zoals op die pagina ook al staat komt het er (mogelijk) wel in maar dan in een net iets andere syntax.quote:Op maandag 18 januari 2016 19:20 schreef Light het volgende:
[..]
Leuk, maar die short closures komen er niet.
https://stackoverflow.com(...)upload-with-symfony2quote:Op zondag 31 januari 2016 14:19 schreef henrivo het volgende:
Hey guys! Even een vraagje voor de mensen die werken met Symfony(2/3).
Ik heb onlangs een UploadBundle gemaakt, so far so good. Voor single files. Nu wil ik echter de mogelijkheid om _meerdere_ files tegelijk te uploaden, en dat lijkt in de praktijk net een stuk lastiger te zijn. Mijn vraag is, voor degenen die eerder in deze situatie hebben gezeten, hebben jullie tips of advies mbt de Entity/Controller? Ik loop hier nu op vast en de officiële documentatie is gebaseerd op het uploaden van _single_ files.
Bedankt alvast!
Wat?quote:Op woensdag 3 februari 2016 10:50 schreef richolio het volgende:
Hallo,
Ik werk met ExpressionEngine, maar heb voor deze even PHP aangezet in mijn template. De URL is hoofdlettergevoelig, en die case sensitivity is nou net niet wat ik wil. Ik heb 6 segments, en als {segment_5} bijvoorbeeld "Rotterdam" is, dan doet "rotterdam" het niet. Nja, goed, hoofdlettergevoelig dus.
Het internet heeft niet geholpen. Misschien iemand hier die wat weet?
Ik had er misschien iets aan als ik em zelf niet was tegengekomenquote:Op woensdag 3 februari 2016 20:16 schreef robin007bond het volgende:
[..]
https://stackoverflow.com(...)upload-with-symfony2
Heb je hier wat aan?
1 | The class 'Symfony\Component\HttpFoundation\File\UploadedFile' was not found in the chain configured namespaces UserBundle\Entity, BlogBundle\Entity, |
Waarvan akte.quote:Op donderdag 4 februari 2016 00:05 schreef robin007bond het volgende:
PHP is een smerige taal. Dat moest ik toch nog even kwijt.
Ongeacht symfony zou ik sowieso de ontvanger niet meerdere files tegelijk laten opvangen, maar gewoon 1 route die 1 bestand ontvangt en dat verwerkt. Hetzij direct, of beter, in een queue/worker. Laat de voorkant dan maar lekker bestanden er in pompen.quote:Op zondag 31 januari 2016 14:19 schreef henrivo het volgende:
Hey guys! Even een vraagje voor de mensen die werken met Symfony(2/3).
Ik heb onlangs een UploadBundle gemaakt, so far so good. Voor single files. Nu wil ik echter de mogelijkheid om _meerdere_ files tegelijk te uploaden, en dat lijkt in de praktijk net een stuk lastiger te zijn. Mijn vraag is, voor degenen die eerder in deze situatie hebben gezeten, hebben jullie tips of advies mbt de Entity/Controller? Ik loop hier nu op vast en de officiële documentatie is gebaseerd op het uploaden van _single_ files.
Bedankt alvast!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Host: 127.0.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4 Cookie: PHPSESSID=u0gn1n80b3v6ipkbstoi0fct41 DNT: 1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36 X-CookiesOK: I explicitly accept all cookies HTTP/1.1 200 OK Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection: Keep-Alive Content-Type: image/png Date: Tue, 16 Feb 2016 18:16:18 GMT Expires: Thu, 19 Nov 1981 08:52:00 GMT Keep-Alive: timeout=5, max=100 Pragma: no-cache Server: Apache/2.4.6 (Win32) PHP/5.4.17 Transfer-Encoding: chunked X-Powered-By: PHP/5.4.17 |
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $fp = fopen($foto_origineel, 'rb'); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); //keeps ie happy header('Content-Transfer-Encoding: binary'); header("Content-type: " . $headertype); header('Content-Length: ' . filesize($foto_origineel)); ob_end_clean();//required here or large files will not work fpassthru($fp); fclose($fp); exit; ?> |
De PHP binary + dll's vervangen?quote:Op dinsdag 16 februari 2016 19:21 schreef Chandler het volgende:
En weet iemand hoe ik gemakkelijk USBWEBSERVER van een nieuwe versie van PHP kan voorzien? zit nu met versie 5.2.nogwat maar wil graag ietsje hoger ivm password_hash functie...
quote:Op woensdag 17 februari 2016 08:34 schreef Chandler het volgende:
Dank robin007bond, ik ga het proberen!
En niemand een andere oplossing voor mijn probleem? zie niets raars aan de headers!
-edit-
Ik had al zo'n gevoel dat er een BOM in mijn bestanden moest zitten en ja hoor, 1 van mijn php bestanden bevatte BOM... nu werkt alles naar behoren!
Ik laat ze altijd weg als ik met headers e.d. werk, dan kan dat iig nooit gebeuren.quote:Many older text editors always inject a trailing newline. And trailing whitespace led to "headers already sent" errors. The PHP interpreter actually circumvents this problem, and eats up a SINGLE trailing \r and \n newline after the ?> closing tag. Some unpracticed programmers however errornously added two or more trailing newlines or spaces, tabs after ?>. That's why it's considered good newbie guidance to omit the PHP close marker. It's however not indicative of good coding style.
Dit. Gewoon standaard UTF-8. Geen gezeik.quote:Op woensdag 17 februari 2016 13:34 schreef KomtTijd... het volgende:
Ik laat ze sowieso altijd weg. Waarom zou je sluittags plaatsen die geen enkel nut hebben en mogelijk wel problemen veroorzaken?
omdat het voor sommige mensen nooit problemen zal veroorzaken, waardoor het dus puur een esthetische afweging wordt. vooral als je richting ocd neigt is het irritant als html en php vol met open+sluiten zit en er vervolgens geheel overbodig een uitzondering wordt gemaaktquote:Op woensdag 17 februari 2016 13:34 schreef KomtTijd... het volgende:
Ik laat ze sowieso altijd weg. Waarom zou je sluittags plaatsen die geen enkel nut hebben en mogelijk wel problemen veroorzaken?
Het gaat om de volgende code:quote:Status Code: 400
This error indicates that a required parameter is missing or a parameter has a value that is out of bounds or otherwise incorrect. This status code is also returned when image uploads fail due to images that are corrupt or do not meet the format requirements.
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 | <?php $client_id = "2bc14449"; $search = array('/', '+', '='); $replace= array('%2F', '%2B', '%3D'); $imgtest = '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'; $imgconv = str_replace($search, $replace, $imgtest); echo "$imgtest<br>"; echo $imgconv; $data = array( 'image' => $imgconv, 'type' => 'base64' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.imgur.com/3/image.json'); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . $client_id )); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); $reply = curl_exec($ch); curl_close($ch); $reply = json_decode($reply); echo "<h3>API Debug</h3><pre>"; var_dump($reply); ?> |
Heb even snel gekeken, maar ik krijg een foutmelding door de manier waarop ik de client_id erin zet, maar zodra ik thuis ben kan ik het beter testen.quote:Op donderdag 25 februari 2016 18:30 schreef KomtTijd... het volgende:
Wat heb je zelf al getest? Werkt je request met dezelfde data wel als je een api-tester gebruikt?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php $imgtest = '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'; $pvars = array('image' => $imgtest, 'type' => 'base64'); $timeout = 30; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://api.imgur.com/3/image.json'); curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . $client_id)); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $pvars); $out = curl_exec($curl); curl_close ($curl); $output = json_decode($out,true); $url=$output['data']['link']; if($url!=""){ echo "<img src='$url'/><br/>$url"; }else{ echo 'Nope, errorrrr; '.$output['data']['error']; } ?> |
Dus doel je op het gebruiken van ACL. Op zich niet een groot probleem om in te bouwen hoor, alleen zit veel meer werk aan dan een simpeler rechten systeem En vroeg mij af of er niet meer soorten rechten systemen zijn... oh en met bitwise hoef ik in de database per gebruiker maar 1 'getal' in te voeren die daarmee gelijk alle rechten aan de gebruiker geeft.quote:Op maandag 14 maart 2016 22:58 schreef KomtTijd... het volgende:
Bitvelden zou ik per definitie met een zo groot mogelijke boog omheen werken, tenzij je écht niet anders kan (maar gezien dit het PHP topic is lijkt me niet dat je op een microcontroller met een paar kB geheugen zit).
Wat ik zelf een handige structuur vindt:
- gebuikers kunnen tot 1 of meerdere groepen behoren
- groepen kunnen verschillende rechten hebben
Op die manier hoef je niet per user tig vinkjes door te werken maar heb je wel alle flexibiliteit om iedereen precies de juiste rechten te geven, door een gebruiker aan een combinatie van groepen te hangen.
Ik zit er al een tijdje niet meer in, maar een beetje PHP framework heeft toch wel gewoon standaard een ACL-achtig systeem?quote:Op dinsdag 15 maart 2016 18:43 schreef Igen het volgende:
Zó ingewikkeld is het maken van een ACL toch ook weer niet.
(Nou ja, ik weet niet wat de prestaties zijn van wat ik heb gemaakt als je miljoenen diep in elkaar geneste objecten hebt...)
Vast wel. Nou weet ik niet wat Chandler wil maar misschien kan die ook wel gewoon WordPress gebruiken o.i.d.quote:Op dinsdag 15 maart 2016 18:48 schreef Monolith het volgende:
[..]
Ik zit er al een tijdje niet meer in, maar een beetje PHP framework heeft toch wel gewoon standaard een ACL-achtig systeem?
1 2 3 | <?php /* niet relevant meer */ ?> |
Dat geeft ie wel, heb daarop getest.. rare is dat beide queries daarna wel gedraaid worden maar niets veranderd in de database...quote:Op dinsdag 22 maart 2016 20:35 schreef Monolith het volgende:
Zo op het eerste oog vermoed ik dat je query->rowCount() geen 1 teruggeeft.
1 | SELECT msg.id, m.login, msg.date_sent FROM mail_msg msg, members m WHERE msg.user_id = $auth AND ((msg.user_from = $auth AND msg.user_to = m.id) OR (msg.user_to = $auth AND msg.user_from = m.id)) AND m.id != $auth GROUP BY m.id ORDER BY msg.date_sent DESC |
Zonder echt naar de query te hebben gekeken: zou het niet ORDER BY msg.date_sent DESC moeten zijn? Je wilt de datum immers aflopend (DESC = descending) in plaats van oplopend (ASC = ascending) hebben...quote:Op dinsdag 10 mei 2016 14:27 schreef schwa78 het volgende:
Ik probeer een lijst te krijgen van users met wie je berichten uitgewisseld uit hebt, gesorteerd op datum van het laatste bericht dat ze hebben uitgewisseld.
Momenteel heb ik dit als query:
[ code verwijderd ]
Hierbij is $auth de variabele is met je persoonlijke user_id.
Helaas pakt ie bij deze query niet de datum van de laatste berichtuitwisseling maar van de eerste. ORDER BY msg.date_sent ASC maakt het er niet beter op.
Als je naar zijn query gekeken had, had je gezien dat dat precies is wat er staat..quote:Op dinsdag 10 mei 2016 14:30 schreef Rockfire het volgende:
Zonder echt naar de query te hebben gekeken: zou het niet ORDER BY msg.date_sent DESC moeten zijn?
Ik heb in de query ook DESC staan. Het voorbeeld erna met ASC is alleen om aan te geven dat daar het probleem niet in schuilt.quote:Op dinsdag 10 mei 2016 14:30 schreef Rockfire het volgende:
[..]
Zonder echt naar de query te hebben gekeken: zou het niet ORDER BY msg.date_sent DESC moeten zijn? Je wilt de datum immers aflopend (DESC = descending) in plaats van oplopend (ASC = ascending) hebben...
1 2 | SELECT msg.id, m.login, MAX(msg.date_sent) AS most_recent_message FROM mail_msg msg, members m WHERE msg.user_id = $auth AND ((msg.user_from = $auth AND msg.user_to = m.id) OR (msg.user_to = $auth AND msg.user_from = m.id)) AND m.id != $auth GROUP BY m.id ORDER BY most_recent_message DESC |
Volgens mij doet ie het nu perfect! Thanks!!quote:Op dinsdag 10 mei 2016 14:35 schreef Monolith het volgende:
Het lijkt me dat het aan je group by ligt. Volgens mij moet het zoiets zijn:
[ code verwijderd ]
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.Als het een match is doordat de opgegeven parameter(?) voorkomt in de credentials.username moet er niks worden opgehaald voor de keywords.keyword kolom. Heeft iemand een idee hoe ik dit voor elkaar krijg?No citizen has a right to be an amateur in the matter of physical training...what a disgrace it is for a man to grow old without ever seeing the beauty and strength of which his body is capable.
Dan zou ik na het uitvoeren van de query nog een stuk logica moeten schrijven om te kijken of de data opgehaald is gebruikmakende van de keywords of niet en dan de opgehaalde keywords niet te gebruiken. Alleen denk ik dat het netter en sneller zou zijn om die selectie op dbms niveau te doen dan na het ophalen nog eens een selectie uit te voeren in mijn software. (Bedankt voor het meedenken alvast!)quote:Op maandag 16 mei 2016 22:17 schreef KomtTijd... het volgende:
Je kunt dat veld dan toch gewoon niet gebruiken
quote:Op maandag 16 mei 2016 21:44 schreef esv7 het volgende:
Hopende in het juiste topic te zijn heb ik de volgende vraag:
Ik heb een query waarbij ik data ophaal uit twee tabellen gebruikmakende van een JOIN, echter wil ik bij bepaalde situaties niks ophalen uit een kolom. De query ziet er als volgt uit:Zo uit m'n hoofd kun je gewoon een if statement in je group concat zetten, al krijg je dan wellicht wel wat onnodige whitespaces:SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.Als het een match is doordat de opgegeven parameter(?) voorkomt in de credentials.username moet er niks worden opgehaald voor de keywords.keyword kolom. Heeft iemand een idee hoe ik dit voor elkaar krijg?
1
2
3
4
5
6
7
8
9
10SELECT DISTINCT credentials.id, credentials.username, credentials.password
GROUP_CONCAT(if((UPPER(credentials.keyword) LIKE UPPER(?),keywords.keyword,'') SEPARATOR ' ')
FROM credentials
JOIN keywords
ON credentials.id = keywords.credentials_id
WHERE (UPPER(credentials.keyword) LIKE UPPER(?)
OR UPPER(credentials.username) LIKE UPPER(?))
AND CHAR_LENGTH(?) > 0
GROUP BY credentials.id
ORDER BY credentials.matches;
Het is sowieso wel een beetje een rommelige query en ik vraag me ook af wat je exact probeert te bereiken, functioneel gezien.
De DISTINCT op credentials.id is sowieso overbodig aangezien je er al een GROUP BY op doet.Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
Het distinct keyword ben ik inderdaad vergeten te verwijderen nadat ik de GROUP BY clausule toegevoegd heb.quote:Op dinsdag 17 mei 2016 10:22 schreef Monolith het volgende:
[..]
Zo uit m'n hoofd kun je gewoon een if statement in je group concat zetten, al krijg je dan wellicht wel wat onnodige whitespaces:
[ code verwijderd ]
Het is sowieso wel een beetje een rommelige query en ik vraag me ook af wat je exact probeert te bereiken, functioneel gezien.
De DISTINCT op credentials.id is sowieso overbodig aangezien je er al een GROUP BY op doet.
1 2 3 4 | $db = JFactory::getDBO(); $db->setQuery("SELECT SUM((`FieldValue`)) FROM popkoor_rsform_submission_values WHERE `FieldName`='Totaal' AND `FormId`='3'"); $directoryLayout.=" Aantal verkocht: " . "$" . $db->loadResult() . "<br/>"; |
Dat leek me heel logisch, maar helaas werkt het niet. Ik krijg de foutmelding"1054quote:
1 2 3 4 | $db = JFactory::getDBO(); $db->setQuery("SELECT SUM((`FieldValue`)) FROM popkoor_rsform_submission_values WHERE `FieldName`='Totaal' AND `_STATUS` = 1 AND `FormId`='3'"); $directoryLayout.=" Aantal verkocht: " . "$" . $db->loadResult() . "<br/>"; |
Ja, ik had het daar ook al uitgeprobeerd.quote:Je weet trouwens dat je in Phpmyadmin gewoon een zoekactie kunt doen en de query kunt kopiëren?
Dat werkt natuurlijk niet. Status is geen kolom in de tabel, maar een aparte rij.quote:Op vrijdag 20 mei 2016 20:07 schreef KomtTijd... het volgende:
AND `_STATUS` = 1
Je weet trouwens dat je in Phpmyadmin gewoon een zoekactie kunt doen en de query kunt kopiëren?
1 | SELECT SUM((p1.`FieldValue`)) FROM popkoor_rsform_submission_values p1 WHERE p1.`FieldName`='Totaal' AND p1.`FormId`='3' AND EXISTS (SELECT * FROM popkoor_rsform_submission_values p2 WHERE p2.`FieldName`='_Status' AND p2.`FieldValue` = "1" AND p1.SubmissionId = p2.SubmissionId) |
1 2 3 4 5 6 7 | SELECT SUM(t1.fieldvalue) FROM popkoor_rsform_submission_values AS t1 JOIN popkoor_rsform_submission_values as t2 ON t1.submissionid = t2.submissionid WHERE t1.fieldname = "totaal" AND t2.fieldname = "_STATUS" AND t2.fieldvalue = 1 |
Ik denk dat het probleem in PHP wordt veroorzaakt omdat je dubbele quotes om de 1 hebt staan.quote:Op zaterdag 21 mei 2016 13:56 schreef Wedden het volgende:
[..]
Allen dank voor het meedenken!
Het werkt nog niet helemaal. Als ik deze code van Monolith gebruik, lukt het wel in phpMyAdmin.
Zie plaatje
[ afbeelding ]
Als die code plak in de code waar ik mee begon krijg ik:
[ code verwijderd ]
Dan ziet de webpagina er echter zo uit:
[ afbeelding ]
Wordt nog even puzzelen waar het mis gaat!
Jullie zijn helden! Bedankt!quote:Op zaterdag 21 mei 2016 14:04 schreef Tijn het volgende:
[..]
Ik denk dat het probleem in PHP wordt veroorzaakt omdat je dubbele quotes om de 1 hebt staan.
Gezien de staat van 'vanilla PHP' zou ik eigenlijk voor elk serieus project een framework gebruiken. Wil je een simpel scriptje bouwen, dan is het wellicht overkill, maar een beetje applicatie ontwikkelen gaat tien keer sneller met een fatsoenlijk framework, al is er vaak wel een initiële leercurve.quote:Op woensdag 25 mei 2016 12:55 schreef JortK het volgende:
Hoeveel mensen van jullie gebruiken trouwens een framework als bijvoorbeeld Laravel?
Ik ben er nu een aantal maal een project mee gestart, maar de overheid die het met zich meebrengt zorgt er eigenlijk altijd voor dat ik al snel overstap naar een project zonder framework.
Ik gebruik tegenwoordig altijd een framework. Meestal Laravel, lumen of silex.quote:Op woensdag 25 mei 2016 12:55 schreef JortK het volgende:
Hoeveel mensen van jullie gebruiken trouwens een framework als bijvoorbeeld Laravel?
Ik ben er nu een aantal maal een project mee gestart, maar de overheid die het met zich meebrengt zorgt er eigenlijk altijd voor dat ik al snel overstap naar een project zonder framework.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |