1 2 3 4 5 6 7 8 9 10 | <?php $str = '>2500 <5000 >2500 <5000 >2500 <5000 >2500 <5000 >2500 <5000'; $values = explode(' ', $str); foreach($values AS &$value){ $value = substr($value, 1); } //even snel uit het hoofd. ?> |
Je bedoelt CMS, MVC is een design pattern .quote:Op donderdag 11 april 2013 10:37 schreef Crutch het volgende:
<?php echo 'FiPo'; ?>
Volgende week op gesprek komen bij een bedrijf met eigen MVC, ben benieuwd.
Ik bedoel MVC.quote:Op donderdag 11 april 2013 10:58 schreef A-mineur het volgende:
[..]
Je bedoelt CMS, MVC is een design pattern .
en nu heeft hij een array met allemaal nullen, ik denk dat die -1 een 1 moet zijnquote:Op donderdag 11 april 2013 10:52 schreef A-mineur het volgende:
Als er een spatie tussen zit gebruik je gewoon explode, en vervolgens een substr om de < of > weg te halen.
edit: zie dat je hem al had, maar ik denk dat mijn methode sneller, en een better practice is.
[ code verwijderd ]
Je hebt gelijk, dat moet idd een 1 zijn ipv -1.quote:Op donderdag 11 april 2013 11:17 schreef Rockfire het volgende:
[..]
en nu heeft hij een array met allemaal nullen, ik denk dat die -1 een 1 moet zijn
Een eigen MVC? Hoe ziet een eigen en niet-eigen MVC eruit dan?quote:Op donderdag 11 april 2013 10:37 schreef Crutch het volgende:
<?php echo 'FiPo'; ?>
Volgende week op gesprek komen bij een bedrijf met eigen MVC, ben benieuwd.
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.
quote:Op donderdag 11 april 2013 13:54 schreef Maringo het volgende:
[..]
Een eigen MVC? Hoe ziet een eigen en niet-eigen MVC eruit dan?Ze hebben een eigen MVC `framework` ontwikkeld, denk dat dat is wat ze bedoelen.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.
Dus niet op een bestaand iets gebaseerd als Cake of CodeIgniter, o.i.d.Je moeder is een hamster
Een eigen framework dan Ik kan met 4 pagina's een MVC pattern opzettenquote:Op donderdag 11 april 2013 13:57 schreef Crutch het volgende:
[..]
Ze hebben een eigen MVC `framework` ontwikkeld, denk dat dat is wat ze bedoelen.
Dus niet op een bestaand iets gebaseerd als Cake of CodeIgniter, o.i.d.
JAMAAR ze noemen het een 'eigen' MVC. Dan kan ik wijs gaan lopen en doen en zeggen dat dat een design pattern is, maar goed dat gaat mij niet echt helpen op hun loonlijst te komen.quote:Op donderdag 11 april 2013 14:38 schreef A-mineur het volgende:
[..]
Een eigen framework dan Ik kan met 4 pagina's een MVC pattern opzetten
True. Toch zou ik graag willen weten wat ze ermee bedoelen.quote:Op donderdag 11 april 2013 14:41 schreef Crutch het volgende:
[..]
JAMAAR ze noemen het een 'eigen' MVC. Dan kan ik wijs gaan lopen en doen en zeggen dat dat een design pattern is, maar goed dat gaat mij niet echt helpen op hun loonlijst te komen.
Ja ik ook, maar dat zien we dus binnenkort.quote:Op donderdag 11 april 2013 15:40 schreef Maringo het volgende:
[..]
True. Toch zou ik graag willen weten wat ze ermee bedoelen.
ok.quote:Op donderdag 11 april 2013 15:25 schreef StM het volgende:
Ik zou een ander bedrijf opzoeken om bij te soliciteren
Succes in ieder geval.quote:Op donderdag 11 april 2013 15:40 schreef Crutch het volgende:
[..]
Ja ik ook, maar dat zien we dus binnenkort.
Een eigen framework waarschijnlijk.quote:Op donderdag 11 april 2013 15:40 schreef Maringo het volgende:
[..]
True. Toch zou ik graag willen weten wat ze ermee bedoelen.
Nou ja, die dingen worden ook wel "MVC frameworks" genoemd, dus dat je het dan afkort als "we gebruiken ons eigen MVC" kan ik wel begrijpen.quote:Op donderdag 11 april 2013 17:11 schreef Maringo het volgende:
[..]
Dat dacht ik eerst ook, maar dan noem je het toch niet je 'eigen MVC'?
Dat ligt eraan wie die term gebruikt. Een recruiter die een buzzword gehoord heeft en daar indruk mee wil maken? Een HR persoon die niet technisch onderlegd is? Een architect / lead developer?quote:Op donderdag 11 april 2013 17:11 schreef Maringo het volgende:
[..]
Dat dacht ik eerst ook, maar dan noem je het toch niet je 'eigen MVC'?
Dat zou ik helemaal kansloos vinden. Als een niet technisch aangelegd persoon, zonder overstemming hoe het product heet, maar wat neerplempt in een advertentie.quote:Op zaterdag 13 april 2013 01:21 schreef Light het volgende:
[..]
Dat ligt eraan wie die term gebruikt. Een recruiter die een buzzword gehoord heeft en daar indruk mee wil maken? Een HR persoon die niet technisch onderlegd is? Een architect / lead developer?
Dat is mij verteld door iemand van werving en selectie. Dus zal wel een loze kreet zijn.quote:Op zaterdag 13 april 2013 01:58 schreef Maringo het volgende:
[..]
Dat zou ik helemaal kansloos vinden. Als een niet technisch aangelegd persoon, zonder overstemming hoe het product heet, maar wat neerplempt in een advertentie.
quote:Op maandag 15 april 2013 09:35 schreef Juicyhil het volgende:
Had laatst ook iemand die vroeg of ik ervaring had met het MVC-framework
Lol, je baas flikkert je eruit, maar wil wel een opleiding voor je betalen?quote:Op maandag 15 april 2013 13:20 schreef Darkomen het volgende:
Heren, een serieuze vraag.
Ik ben recent mn baan kwijt geraakt (boventallig) en wil graag verder gaan met programmeren in php en asp.
Nu ben ik op zoek naar php en asp cursussen, mijn oude baas wil deze namelijk wel betalen.
Kunnen jullie mij een aantal cursussen aanbevelen?
Op wat voor niveau/budget.quote:Op maandag 15 april 2013 13:20 schreef Darkomen het volgende:
Heren, een serieuze vraag.
Ik ben recent mn baan kwijt geraakt (boventallig) en wil graag verder gaan met programmeren in php en asp.
Nu ben ik op zoek naar php en asp cursussen, mijn oude baas wil deze namelijk wel betalen.
Kunnen jullie mij een aantal cursussen aanbevelen?
Overname, boventallig geworden na 13 jaar trouwe dienst, dus het hoort bij mn 'deal'.quote:Op maandag 15 april 2013 13:23 schreef Crutch het volgende:
[..]
Lol, je baas flikkert je eruit, maar wil wel een opleiding voor je betalen?
Basis kennis heb ik wel, ik rotzooi al 13 jaar met php en mysql.quote:Op maandag 15 april 2013 13:28 schreef ursel het volgende:
[..]
Op wat voor niveau/budget.
Eduvision heeft de nodige cursussen, maar niet goedkoop.
Welnee.quote:Op maandag 15 april 2013 14:05 schreef Darkomen het volgende:
Zend is misschien nog een beetje te hoog gegrepen.
Kwestie van goed lerenquote:Op maandag 15 april 2013 14:05 schreef Darkomen het volgende:
Zend is misschien nog een beetje te hoog gegrepen.
Zend hanteert ook MVC.quote:Op maandag 15 april 2013 14:05 schreef Darkomen het volgende:
Zend is misschien nog een beetje te hoog gegrepen.
Ja die hebben ook een eigen mvcquote:
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.Op donderdag 2 juli 2009 22:41 schreef RTB het volgende:
als ik elk rap"liedje" een kans moest geven was ik aan het eind van dit millennium nog bezig met het tempo waarin die kotshoop uitgebraakt wordt.
👾
quote:Op maandag 15 april 2013 14:26 schreef mstx het volgende:
[..]
Ja die hebben ook een eigen mvcSPOILEROm 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.Je moeder is een hamster
ASP? Word in bedrijfsleven niet meer actief gebruikt, al zo een jaar of 8 niet meer.quote:Op maandag 15 april 2013 13:20 schreef Darkomen het volgende:
Heren, een serieuze vraag.
Ik ben recent mn baan kwijt geraakt (boventallig) en wil graag verder gaan met programmeren in php en asp.
Nu ben ik op zoek naar php en asp cursussen, mijn oude baas wil deze namelijk wel betalen.
Kunnen jullie mij een aantal cursussen aanbevelen?
quote:Op maandag 15 april 2013 14:26 schreef mstx het volgende:
[..]
Ja die hebben ook een eigen mvcondanks het hoge offtopicgehalte, moet ik deze hier neer gooien: DIG / USB geplet..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.
http://www.pixelzdesign.com/blog_view.phpquote:Op dinsdag 16 april 2013 10:33 schreef Crutch het volgende:
Ik zit even met het volgende.
Voor het onderhoudgedeelte(CMS) van een verhuursite wil ik de mogelijkheid bieden om afbeeldingen aan een product toe te voegen die ze vervolgens kunnen scalen en croppen.
Nu zal dat dus gecombineerd html/css/javascript en php moeten worden, maar is daar al iets voor?
Ik kom wel wat image resizers tegen, maar geen complete oplossing met UI en alles.
Ben bang dat ik het zelf allemaal moet gaan maken.
Wtf? Da's snel.quote:Op dinsdag 16 april 2013 10:38 schreef boem-dikkie het volgende:
[..]
http://www.pixelzdesign.com/blog_view.php
Onze volledige leverstraat voor zo'n 350k klanten en hun klachten was in asp geschreven, werkte perfect, effcient.quote:Op maandag 15 april 2013 15:09 schreef raptorix het volgende:
[..]
ASP? Word in bedrijfsleven niet meer actief gebruikt, al zo een jaar of 8 niet meer.
PHP, tjah, ik weet dat ik me hier in hol van leeuw begeeft, maar ik zou dan toch .NET gaan, veel meer werk in te vinden, en over algemeen nog beter betaald ook, bovendien een stuk fijner om in te programmeren als je het mij vraagt.
Ik zou als ik jou was eerst wat zelf studie doen, en dan een wat gerichtere cursus doen, ik vind dit echt een supergoed leerboek (gratis): http://www.csharpcourse.com/quote:Op dinsdag 16 april 2013 13:11 schreef Darkomen het volgende:
[..]
Onze volledige leverstraat voor zo'n 350k klanten en hun klachten was in asp geschreven, werkte perfect, effcient.
Bedrijf dat ons overgenomen heeft wilde die volledige leverstraat hebbebn, maar zijn er naar 2 jaar achtergekomen dat het hun te veel kost om hun oude troep met zo'n 1.5 milioen klanten om te zetten naar onze leverstraat
Wat zou je me aan kunnen raden wat .NET opleidingen?
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.mailer.php is alsvolgt: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.Het probleem is dat als ik op verzend klik zonder iets in te vullen wordt mailer.php geopened en laat daar het onderste deel van de php zien:
1
2
3
4
5
6
7
8
9
10
11
12Uw bericht is verstuurd. Indien nodig neem ik z.s.m. contact met u op.
'; } else { echo '
Er ging iets fout. Probeer het opnieuw.
'; } } else if ($_POST['submit'] && $spam != '4') { echo '
Uw antwoord op 2+2= klopt niet, probeer het opnieuw...
'; } } else { echo '
Vul de verplichte velden in.
'; } } ?>
Hij zou dus moeten controleren of de verplichte velden zijn ingevuld (naam / email / bericht) en hij moet controleren of de spamvraag juist is in gevuld.
Beide zijn dus niet gebeurd.
Een mail komt nooit aan, of ik is ingevuld heb of niet. Iemand die mij kan vertellen wat er fout is?
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 | <?php $name = $_POST['name']; $email = $_POST['adres']; $pcp = $_POST['pcp']; $email = $_POST['email']; $mobiel = $_POST['mobiel']; $telefoon = $_POST['telefoon']; $message = $_POST['message']; $from = 'From: contactformulier'; $to = 'email@hotmail.com'; $subject = 'contactformulier'; $body = "From: name: $name\n adres: $adres\n pcp:\n $pcp name: $name\n email: $email\n mobiel: $mobiel\n telefoon: $telefoon\n message: $message\n"; if ($_POST['submit']) { ifif ($name != '' && $email != '' && $message != '' ) { if ($human == '4') { if (mail ($to, $subject, $body, $from)) { echo '<p>Uw bericht is verstuurd. Indien nodig neem ik z.s.m. contact met u op.</p>'; } else { echo '<p>Er ging iets fout. Probeer het opnieuw.</p>'; } } else if ($_POST['submit'] && $spam != '4') { echo '<p>Uw antwoord op 2+2= klopt niet, probeer het opnieuw...</p>'; } } else { echo '<p>Vul de verplichte velden in.</p>'; } } ?> |
1 2 3 4 5 6 7 8 9 10 | <?php $to = "testaccount@gmail.com"; $subject = "onderwerp"; $email = "ditisdeafzender@blaat.com"; $message = "testmailtje"; $headers = "From:" . $email; if(mail($to, $subject, $message, $headers)){ echo "ok";} else {echo "derp";} ?> |
1 2 3 4 5 6 7 | smtp_server=smtp.gmail.com smtp_port=587 error_logfile=error.log debug_logfile=debug.log auth_username=testaccount@gmail.com auth_password=<wachtwoord> force_sender=testaccount@gmail.com |
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 | [mail function] ; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury SMTP = smtp.gmail.com smtp_port = 587 ; For Win32 only. ; http://php.net/sendmail-from sendmail_from =testaccount@gmail.com ; XAMPP IMPORTANT NOTE (1): If XAMPP is installed in a base directory with spaces (e.g. c:\program filesC:\xampp) fakemail and mailtodisk do not work correctly. ; XAMPP IMPORTANT NOTE (2): In this case please copy the sendmail or mailtodisk folder in your root folder (e.g. C:\sendmail) and use this for sendmail_path. ; XAMPP: Comment out this if you want to work with fakemail for forwarding to your mailbox (sendmail.exe in the sendmail folder) sendmail_path = “\"C:\xampp\sendmail\sendmail.exe\" -t" ; XAMPP: Comment out this if you want to work with mailToDisk, It writes all mails in the C:\xampp\mailoutput folder ; sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe" ; Force the addition of the specified parameters to be passed as extra parameters ; to the sendmail binary. These parameters will always replace the value of ; the 5th parameter to mail(), even in safe mode. ;mail.force_extra_parameters = ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename mail.add_x_header = Off ; Log all mail() calls including the full path of the script, line #, to address and headers ;mail.log = "C:\xampp\php\logs\php_mail.log" |
mail.log geeft niet veel boeiende info:quote:Op zondag 21 april 2013 16:43 schreef papernote het volgende:
Zet mail.log eens aan. Heb je display_errors aan staan in PHP, met error_reporting op -1?
Dat ie niet aankomtquote:Op zondag 21 april 2013 17:04 schreef papernote het volgende:
Blijkbaar wordt de mail verzonden. Wat is dan het probleem?
Heb je al in je junk folder van gmail gekeken?quote:
Jep, het is een leeg account, dus ik zou hem toch (ofwel in hoofdmap, ofwel in een spam/trashmap) moeten zien.quote:Op zondag 21 april 2013 17:23 schreef Maringo het volgende:
[..]
Heb je al in je junk folder van gmail gekeken?
En als je deze veranderd naar een ander emailadres in je php.ini?quote:Op zondag 21 april 2013 17:24 schreef BlueNumber het volgende:
[..]
Jep, het is een leeg account, dus ik zou hem toch (ofwel in hoofdmap, ofwel in een spam/trashmap) moeten zien.
1 | sendmail_from =testaccount@gmail.com |
Ook dan geeft ie aan dat het verstuurd wordt...quote:Op zondag 21 april 2013 17:41 schreef Maringo het volgende:
[..]
En als je deze veranderd naar een ander emailadres in je php.ini?
[ code verwijderd ]
ik zie in je sendmail.ini ook hetzelfde emailadres. ook als afzender.quote:Op zondag 21 april 2013 17:53 schreef BlueNumber het volgende:
[..]
Ook dan geeft ie aan dat het verstuurd wordt...
quote:Op zaterdag 20 april 2013 18:36 schreef KomtTijd... het volgende:
Ik zou zeggen begin eens met de syntax-fouten (ifif). Heb je error-reporting wel aan staan?
Probleem is opgelost. Stom dat ik daar overheen heb gekeken, highlighting stond overigens wel gewoon aan. Dank voor de hulp in ieder geval!quote:
Thanks voor het meedenken, maar het werkte helaas niet.quote:Op zondag 21 april 2013 17:59 schreef Maringo het volgende:
[..]
ik zie in je sendmail.ini ook hetzelfde emailadres. ook als afzender.
Ik weet dat Spamassassin bijvoorbeeld, standaard emails eruit filtert die van hetzelfde en naar hetzelfde emailadres maar via andere mailservers gaan oid. En volgens mij doet Google dat ook. Je kan dus proberen om in de sendmail.ini ook de adressen te veranderen naar een ander (gmail)adres
De broncode van PHP staat op github, je kunt zelf dingen toevoegenquote:Op zondag 21 april 2013 13:19 schreef boem-dikkie het volgende:
Alsals, misschien moeten ze dat maar implementeren in PHP.
quote:Op zondag 21 april 2013 22:35 schreef Light het volgende:
[..]
De broncode van PHP staat op github, je kunt zelf dingen toevoegen
Pluxboxquote:Op maandag 22 april 2013 21:03 schreef d4v1d het volgende:
Wie heeft die website voor het koningslied gemaakt? Dik xss lek
http://bit.ly/17SFXrk
Wtf, waarom wil die url niet goed?
1 2 3 4 5 6 7 | <?php if (preg_match('/$IP/', $blocked_ips)) { echo "A match was found."; } else { echo "A match was not found."; } ?> |
probeer je nou letterlijk '$ip' te matchen? daar heb je geen regex voor nodig... (gaat ook fout met een regex aangezien $ een line-ending matcht en niet een dollarteken).quote:Op donderdag 25 april 2013 18:19 schreef xaban06 het volgende:
Ik wil weten of een bepaald woord/string voorkomt in een string.
Dit doe ik met preg_match, maar werken wil het niet.
[ code verwijderd ]
Ik krijg een false terug terwijl het er echt in voorkomt.
Zoiets als een IQ-test?quote:Op woensdag 24 april 2013 09:27 schreef Crutch het volgende:
Een logicatest voor programmeurs.
Wat moet ik me daar bij voorstellen?
http://nl1.php.net/strposquote:Op donderdag 25 april 2013 18:19 schreef xaban06 het volgende:
Ik wil weten of een bepaald woord/string voorkomt in een string.
Dit doe ik met preg_match, maar werken wil het niet.
[ code verwijderd ]
Ik krijg een false terug terwijl het er echt in voorkomt.
Ah natuurlijk, je hebt gelijk.quote:Op woensdag 1 mei 2013 12:52 schreef KomtTijd... het volgende:
implode() werkt niet, dan maakt'ie er één string van ipv losse parameters als je hem prepared.
Hoe doe ik het dan als ik een array met ID's heb? Rechtstreeks die array erin knallen zal niet zo goed gaanquote:Op woensdag 1 mei 2013 12:52 schreef KomtTijd... het volgende:
implode() werkt niet, dan maakt'ie er één string van ipv losse parameters als je hem prepared.
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.Edit: nevermind, 10 seconden nadat ik postte is het opgelost. Ik dacht dat ik bestanden in de mappen had staan, maar dat was op een andere server. Verder was het een kwestie van de file permissions aanpassen in de ftp client
[ Bericht 20% gewijzigd door kutkloon7 op 09-05-2013 12:48:10 ]
Andere provider nemen.quote:Op donderdag 9 mei 2013 13:12 schreef kutkloon7 het volgende:
, alleen suggesties die zeggen dat je safe mode uit moet zetten, wat ik natuurlijk niet kan.
Een cookie had ik nog niet aan gedacht.quote:Op donderdag 9 mei 2013 17:22 schreef mstx het volgende:
Als de totale hoeveelheid data niet zo groot is zou het in een cookie kunnen. Anders idd bij elke wijziging via ajax in een sessie variabele, daar zie ik verder het probleem niet zo van.
En anders misschien nog via de html5 local storage? Zelf geen ervaring mee en ik weet ook niet welke browsers dat precies ondersteunen.
Ook op mobile devices?quote:Op donderdag 9 mei 2013 19:19 schreef Tijn het volgende:
Waarom niet localStorage?
[edit] Ah, was al genoemd zie ik. LocalStorage werkt in elke enigszins moderne browser, zelfs IE8.
Ik had 't zelf ook al opgezocht. Bedankt weer voor de goede tip, hier had ik waarschijnlijk niet zelf opgekomen.quote:Op donderdag 9 mei 2013 19:54 schreef Tijn het volgende:
[..]
Ja hoor.
http://caniuse.com/#feat=namevalue-storage
Ja, dat scheelt echt inderdaad. Zoiets wil je natuurlijk het liefst client-sided houden, dus dan is dit de perfect oplossing waarschijnlijk.quote:Op donderdag 9 mei 2013 20:00 schreef Tijn het volgende:
Grootste voordeel van localStorage is dat het niet bij elke request heen en weer van client naar server wordt gestuurd. En natuurlijk het feit dat je er meer dan 4 KB in op kunt slaan.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 100 45 95 40 120 12 12 10 50 1060 72 30 10 760 441 108 48 90 30 10 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $con=mysqli_connect("tralal","tralal","tralalal","tralala"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM shop_transactions WHERE ItemID='264'"); while($row = mysqli_fetch_array($result)) { $prijs = $row['Price']; echo $prijs; echo "</br>"; } ?> |
quote:Op vrijdag 10 mei 2013 19:17 schreef Juicyhil het volgende:
SELECT AVG(Price) FROM shop_transactions
WHERE ItemID='264'
1 2 3 4 5 6 7 | $result = mysqli_query($con,"SELECT AVG(Price) FROM shop_transactions WHERE ItemID='264'"); while($row = mysqli_fetch_array($result)) { echo $row; echo "</br>"; } |
Maak er eens AVG(Price) As prijs FROM... van.quote:Op vrijdag 10 mei 2013 19:21 schreef Berend. het volgende:
[..]
[ code verwijderd ]
Ben nog niet erg bekend met php, uitkomst van het script is ''array'' , wat doe ik fout?
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/diamond/index.php on line 11quote:Op vrijdag 10 mei 2013 19:22 schreef Juicyhil het volgende:
[..]
Maak er eens AVG(Price) As prijs FROM... van.
En $row['prijs']
1 2 3 4 5 6 7 8 9 | $result = mysqli_query($con,"SELECT AVG price FROM shop_transactions WHERE ItemID='264'"); while($row = mysqli_fetch_array($result)) { echo $row['$price']; echo "</br>"; } ?> |
Dat werkt, erg bedankt. Ik moet zeggen dat ik had verwacht dat het bedrag lager zou zijn, maargoed.quote:Op vrijdag 10 mei 2013 19:28 schreef Juicyhil het volgende:
SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264'
floor() omlaag afronden of ceil() omhoog afrondenquote:Op vrijdag 10 mei 2013 19:32 schreef Berend. het volgende:
[..]
Dat werkt, erg bedankt. Ik moet zeggen dat ik had verwacht dat het bedrag lager zou zijn, maargoed.
Nu staan er nog veel komma's achter, hoe fix ik dat?
39.80050089413238
Werkt top, thanks!quote:Op vrijdag 10 mei 2013 19:34 schreef Juicyhil het volgende:
[..]
floor() omlaag afronden of ceil() omhoog afronden
1 | SELECT * FROM table WHERE column1 > SUBDATE(NOW(), INTERVAL 8 DAY) AND DAYOFWEEK(column1) >= 1; |
1 | $result = mysqli_query($con,"SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264' AND Quantity='1' > SUBDATE(NOW(), INTERVAL 8 DAY) AND DAYOFWEEK(column1) >= 1;"); |
(Zie laatste regel in tekst, de ; Na weghalen werkt het script nog steeds niet.)quote:$result = mysqli_query($con,"SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264' AND Quantity='1' > SUBDATE(NOW(), INTERVAL 8 DAY) AND DAYOFWEEK(column1) >= 1;");
1 | AND Quantity='1' > SUBDATE(NOW() |
quote:Op vrijdag 10 mei 2013 22:51 schreef KomtTijd... het volgende:
[ code verwijderd ]
lijkt me een duidelijke syntax fout, daar moet je 100% zeker een error over krijgen.
1 2 3 | <?php $result = mysqli_query($con,"SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264' AND Quantity='1' > SUBDATE(NOW), INTERVAL 8 DAY) AND DAYOFWEEK(Price) >= 1;"); ?> |
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '), INTERVAL 8 DAY) AND DAYOFWEEK(Price) >= 1' at line 1quote:Op vrijdag 10 mei 2013 22:56 schreef KomtTijd... het volgende:
Ja dat is begrijpelijk, als je SQL niet klopt geeft mysqli_query (blijkbaar) false terug. Wat is je SQL error?
quote:Op vrijdag 10 mei 2013 23:01 schreef KomtTijd... het volgende:
...oh je hebt er nu een syntaxfout bij gemaakt door het openingshaakje van NOW() weg te halen...
mysql errors beginnen altijd bij het karakter waar de fout zit.
1 2 3 | <?php $result = mysqli_query($con,"SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264' AND Quantity='1' > SUBDATENOW(), INTERVAL 8 DAY) AND DAYOFWEEK(Price) >= 1;"); ?> |
1 2 3 | <?php $result = mysqli_query($con,"SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264' AND Quantity='1' > SUBDATE NOW(), INTERVAL 8 DAY) AND DAYOFWEEK(Price) >= 1;"); ?> |
quote:Op vrijdag 10 mei 2013 23:06 schreef KomtTijd... het volgende:
Wat zit je dan ook allemaal te veranderen? Kijk naar de error die je krijgt. Daar zit je fout. Niet ergens anders.
1 2 3 | <?php SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264' AND Quantity='1' > SUBDATE(NOW), INTERVAL 8 DAY() AND DAYOFWEEK(Price) >= 1 ?> |
De plek waar dat [stukje query] begint, dáár zit je fout! Het eerste karakter! Niet ergens anders!quote:check the manual that corresponds to your MySQL server version for the right syntax to use near '[stukje query]'
1 | SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264' AND Quantity='1' AND datumkolom > SUBDATE(NOW(), INTERVAL 8 DAY) AND DAYOFWEEK(datumkolom) >= 1 |
1 2 3 4 5 | "SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264' AND Quantity='1' > SUBDATE NOW(), INTERVAL 8 DAY) AND DAYOFWEEK(Price) >= 1;" |
Dankjewel, nu werkt die perfect. Ik moet zelf nog veel van syntaxes leren.quote:Op vrijdag 10 mei 2013 23:16 schreef Rockfire het volgende:
SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264' AND Quantity='1' AND datumkolom > SUBDATE(NOW(), INTERVAL 8 DAY) AND DAYOFWEEK(datumkolom) >= 1
Je moet leren debuggen. Niet leren copy-pasten.quote:Op vrijdag 10 mei 2013 23:19 schreef Berend. het volgende:
[..]
Dankjewel, nu werkt die perfect. Ik moet zelf nog veel van syntaxes leren.
Wat KomtTijd zegt is wel waar:quote:Op vrijdag 10 mei 2013 23:19 schreef Berend. het volgende:
[..]
Dankjewel, nu werkt die perfect. Ik moet zelf nog veel van syntaxes leren.
Heb je op zijn minst gekeken naar het verschil tussen jouw query en die van mij? Zodat je ook begrijpt wat je fout deed?quote:Op vrijdag 10 mei 2013 23:19 schreef KomtTijd... het volgende:
[..]
Je moet leren debuggen. Niet leren copy-pasten.
Ja, elk haakje dat geopend wordt moet ook gesloten worden. Right?quote:Op vrijdag 10 mei 2013 23:46 schreef Rockfire het volgende:
[..]
Wat KomtTijd zegt is wel waar:
[..]
Heb je op zijn minst gekeken naar het verschil tussen jouw query en die van mij? Zodat je ook begrijpt wat je fout deed?
Doe nou die originele query nog eens runnen. En KIJK NAAR DE ERROR.quote:Op vrijdag 10 mei 2013 23:49 schreef Berend. het volgende:
[..]
Ja, elk haakje dat geopend wordt moet ook gesloten worden. Right?
Ja, dat. Maar kijk ook hier eens naar:quote:Op vrijdag 10 mei 2013 23:49 schreef Berend. het volgende:
[..]
Ja, elk haakje dat geopend wordt moet ook gesloten worden. Right?
1 | Quantity='1' > SUBDATENOW() |
Origineel was dat ook de enige fout, voordat hij random haakjes begon weg te halen en toe te voegen.quote:Op vrijdag 10 mei 2013 23:55 schreef Tijn het volgende:
[..]
Ja, dat. Maar kijk ook hier eens naar:
[ code verwijderd ]
Ik begrijp niet wat hier staat en MySQL ook niet
Kijk nou eens goed! Er is wel wat meer verschil dan alleen maar haakjes die je niet goed had gedaan:quote:Op vrijdag 10 mei 2013 23:49 schreef Berend. het volgende:
[..]
Ja, elk haakje dat geopend wordt moet ook gesloten worden. Right?
Mijn query (met de verschillen dikgedrukt en onderstreept):quote:SELECT AVG(Price) AS prijs
FROM shop_transactions
WHERE ItemID='264'
AND Quantity='1' > SUBDATE(NOW), INTERVAL 8 DAY()
AND DAYOFWEEK(Price) >= 1
quote:SELECT AVG(Price) AS prijs
FROM shop_transactions
WHERE ItemID='264'
AND Quantity='1'
AND datumkolom > SUBDATE(NOW(), INTERVAL 8 DAY)
AND DAYOFWEEK(datumkolom) >= 1
1 | RewriteRule project/(.*) project.php?id=$1 |
http://httpd.apache.org/docs/2.2/programs/apachectl.htmlquote:Op zaterdag 11 mei 2013 13:12 schreef boem-dikkie het volgende:
Ja had ik.
En ik heb de fout gevonden. Ik had ook nog een persoonlijke .conf in /apache2/users staan. Blijkbaar zat daar een typfout of iets dergelijks in. Heb hem opnieuw getypt en nu werkt het.
Hmm, ik heb inderdaad geen tabel shops, maar is dat wel nodig?quote:Op zondag 12 mei 2013 02:06 schreef Tijn het volgende:
En in de kolom "shop" in de tabel "prices" sla je dan id's op van winkels die in je tabel "shops" staan?
Je moet drie tabellen hebben:quote:Op zondag 12 mei 2013 09:24 schreef Maringo het volgende:
Lijkt mij dat je winkels niet elk een eigen tabel geeft maar met ids werkt en dat je met views regelt wie wat mag zien.
Dit inderdaad. Volgens mij had ik Tijn zn bericht ook verkeerd begrepen.quote:Op zondag 12 mei 2013 09:55 schreef Pakspul het volgende:
[..]
Je moet drie tabellen hebben:
Product
ID, EAN, Title, Image, Description, (en wat je nog meer wilt)
Shop
ID, Name, Address, Description (...)
ProductPrice (ProductID & ShopID zijn een samengesteld primary key)
ProductID
ShopID
Price
Je kan product price nog uitbreiden met datum (dit moet dan ook in de samengesteld sleutel worden opgenomen), zodat je per product, per winkel de prijs verschuiving over tijd kunt volgen.
Ik ken Head First alleen van Design Patterns, maar de stijl sprak me wel erg aan. En ze weten ook nog eens waar ze het over hebben.quote:Op zondag 12 mei 2013 17:49 schreef DutchErrorist het volgende:
Ik zit te kijken naar een boek voor PHP en MySQL, en ik kwam Head First! PHP and MySQL tegen. Is dat een beetje een goed boek?
quote:Op maandag 13 mei 2013 09:10 schreef Chandler het volgende:
Vraagje, hoe kan ik middels PHP uitlezen wat ik maximaal mag gebruiken aan geheugen?
1 | ini_get("memory_limit"); |
Kwam dit laatst tegen. Uitleg en dergelijke over het 'boek' leek me best goed!quote:Op zondag 12 mei 2013 17:49 schreef DutchErrorist het volgende:
Ik zit te kijken naar een boek voor PHP en MySQL, en ik kwam Head First! PHP and MySQL tegen. Is dat een beetje een goed boek?
Stom, had ik zelf ook kunnen bedenken! maar verder nog mensen een idee op mijn flush probleem? of moet ik nou specifiek daarvoor een andere browser gaan gebruiken?quote:
Wat ik weet van Head First is dat het prettig leest (bij Java zelfs erg grappig om te lezen) en dat je er daadwerkelijk wat van opsteekt.quote:Op zondag 12 mei 2013 17:49 schreef DutchErrorist het volgende:
Ik zit te kijken naar een boek voor PHP en MySQL, en ik kwam Head First! PHP and MySQL tegen. Is dat een beetje een goed boek?
http://stackoverflow.com/(...)ot-working-in-chromequote:Op maandag 13 mei 2013 09:17 schreef Chandler het volgende:
[..]
Stom, had ik zelf ook kunnen bedenken! maar verder nog mensen een idee op mijn flush probleem? of moet ik nou specifiek daarvoor een andere browser gaan gebruiken?
1 2 3 4 | setlocale(LC_TIME, 'NL_nl'); setlocale(LC_ALL, 'nl_NL'); print date("%e-%B-%Y", strftime($row['log'])); |
1 | print strftime("%e-%B-%Y", strtotime($row['log'])); |
1 2 3 4 5 6 7 8 9 10 11 | <?php if($productArray){ foreach($productArray as $k=>$v){ $p = $k; if($getProductData){ $p = $this->getProduct($k); } $retArr[$v] = $p; } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 | <?php if($productArray){ foreach($productArray as $k=>$v){ if($getProductData){ $retArr[$v] = $this->getProduct($k); }else{ $retArr[$v] = $k; } } } ?> |
1 2 3 4 5 6 7 | <?php if($productArray){ foreach($productArray as $k=>$v){ $retArr[$v] = $getProductData?$this->getProduct($k):$k; } } ?> |
Vertraagt? Is dat überhaupt iets om je mee bezig te houden in een simpele if-else constructie? Meten = weten.quote:Op maandag 13 mei 2013 14:26 schreef Sitethief het volgende:
Wat is eigenlijk beter, of maakt het niks uit?
Dit:
[ code verwijderd ]
Of dit:
[ code verwijderd ]
Ik vraag me af of die else nou echt zoveel vertraagt, ik vind het gewoon lelijk staan om standaard $k in $p te zetten in dit geval.
Ohjah, dies eigenlijk veel mooier, ik vergeet vaak dat er diverse shorthands zijn .quote:Op maandag 13 mei 2013 14:32 schreef mstx het volgende:
[ code verwijderd ]
Als je tussen je eigen 2 opties moet kiezen vind ik de 2e veel duidelijker.
Als je er de tijd voor hebt is het helemaal niet verkeerd om kritisch naar je eigen code te kijken.quote:Op maandag 13 mei 2013 14:58 schreef Sitethief het volgende:
[..]
Ohjah, dies eigenlijk veel mooier, ik vergeet vaak dat er diverse shorthands zijn .
Ik zit de laatste tijd een beetje te kritisch naar mijn eigen programmeerstijl te kijken... En dan komen dit soort dingen ook om de hoek kijken. Eigenlijk moet ik niet zo mierenneuken.
1 2 3 4 5 6 7 8 9 | <?php if($productArray){ if($getProductData) { foreach($productArray as $k=>$v) $retArr[$v] = $this->getProduct($k); } else { foreach($productArray as $k=>$v) $retArr[$v] = $k; } } ?> |
Mjah das vaak het probleem hier, er zit zo'n druk achter dat alles soms een brei van veel procedurele code wordt met te weinig structuur een OOP om de codebase hanteerbaar te houden. Wat uiteindelijk tot meer werk leid als er gerefeactored moet worden etc, maar goed dat is een bekend verhaal denk ik. En daar naast heb ik OOP nog niet volledig onder de knie.quote:Op maandag 13 mei 2013 14:59 schreef Rockfire het volgende:
[..]
Als je er de tijd voor hebt is het helemaal niet verkeerd om kritisch naar je eigen code te kijken.
ORquote:
Maar dan mag het toch niet allebei? Het ene of het anderequote:
Dat is XOR.quote:Op maandag 13 mei 2013 15:37 schreef wobbel het volgende:
[..]
Maar dan mag het toch niet allebei? Het ene of het andere
select * from users where ID = 5 or naam = "henk".quote:Op maandag 13 mei 2013 15:32 schreef wobbel het volgende:
Ik klop al veel te lang geen code meer, hoe selecteer ik het volgende:
tabel 'users'
ID
Naam
SELECT * FROM users WAARVAN ID = 5 EN/OF (dus mag ook allebei) Naam = henk
Kun je beargumenteren waarom het sneller zou moeten zijn?quote:Op maandag 13 mei 2013 15:02 schreef wipes66 het volgende:
[ code verwijderd ]
zo moet hij nog sneller zijn als het goed is, maar misschien iets minder goed leesbaar/duidelijk dan #2
En ook alles dat geen vijf is, maar wel henk.quote:Op maandag 13 mei 2013 15:37 schreef GI het volgende:
[..]
select * from users where ID = 5 or naam = "henk".
Dan krijg je alles met vijf, ook als het henk is
geen if statement in de loopquote:Op maandag 13 mei 2013 15:45 schreef papernote het volgende:
[..]
Kun je beargumenteren waarom het sneller zou moeten zijn?
Dat wil hij toch ook ?quote:Op maandag 13 mei 2013 15:46 schreef papernote het volgende:
[..]
En ook alles dat geen vijf is, maar wel henk.
Ja dus? Branch prediction met een constante boolean, daar ga je niets van merken in de looptijd.quote:
Die tweede foreach kun je trouwens vervangen door een array_flip().quote:Op maandag 13 mei 2013 15:02 schreef wipes66 het volgende:
[ code verwijderd ]
zo moet hij nog sneller zijn als het goed is, maar misschien iets minder goed leesbaar/duidelijk dan #2
je hebt helemaal gelijk ik heb het voor de grap eens getest en het is zelf iets langzamerquote:Op maandag 13 mei 2013 15:48 schreef papernote het volgende:
[..]
Ja dus? Branch prediction met een constante boolean, daar ga je niets van merken in de looptijd.
Het feit dat je nu tweemaal een identieke foreach hebt vind ik nadeliger qua onderhoud van je code.
Wow, nice .quote:Op maandag 13 mei 2013 15:51 schreef papernote het volgende:
[..]
Die tweede foreach kun je trouwens vervangen door een array_flip().
Iets waar gewoon een lijstje uitkomt ipv een gare array die ik nog moet parsen zou leuk zijn. Maar het is er niet he?quote:
Een oplossing die ik wel eens gezien heb is het resultaat uit information_schema.columns te halen. Dat levert iets als enum('foo','bar','baz'). Dan in php enum vervangen door array en het geheel eval()-en. Een andere mogelijkheid zou ik zo niet weten.quote:Op woensdag 15 mei 2013 19:51 schreef Tijn het volgende:
[..]
Iets waar gewoon een lijstje uitkomt ipv een gare array die ik nog moet parsen zou leuk zijn. Maar het is er niet he?
1 2 3 4 5 | <a href="../niets.html">pagina ondieper</a> <a href="./">zelfde diepte</a> <a href="/">Root pagina</a> <a href="../../../niets.html">Veel ondieper</a> <a href="/nieuws/werkend/pagina.html">Veel diepere pagina vanaf root</a> |
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 | <?php error_reporting(E_ALL); function checkUrl($baseUrl, $currentUrl, $foundUrl) { echo 'Original foundUrl: ' . $foundUrl . '<br />'; if (strtolower(substr($foundUrl, 0, 7)) != "http://") { $p = parse_url($foundUrl); if (!isset($p['host'])) { $path = ''; if (strpos($foundUrl, "../") > -1) { $dotsCount = 0; while (strpos($foundUrl, "../") > -1) { $foundUrl = substr($foundUrl, 3); $dotsCount++; } $p = parse_url($currentUrl); $dirs = explode("/", $p['path']); if (count($dirs) > 1) { foreach ($dirs AS $k=>$v) { if (strlen($v) == 0) { unset($dirs[$k]); } } unset($dirs[count($dirs)]); reset($dirs); } if (count($dirs) > $dotsCount) { for ($x = 0; $x < $dotsCount; $x++) { unset($dirs[count($dirs) - $x]); } $path = implode("/", $dirs) . "/"; // die("meer"); } } elseif (strpos($foundUrl, "./") > -1) { $foundUrl = substr($foundUrl, 2); } elseif (substr($foundUrl, 0, 1) == "/") { $foundUrl = substr($foundUrl, 1); } $foundUrl = $baseUrl . $path . $foundUrl; } } echo 'BaseUrl: ' . $baseUrl . '<br />'; echo 'CurrentUrl: ' . $currentUrl . '<br />'; echo 'FoundUrl: ' . $foundUrl . '<br />'; } $baseUrl = 'http://www.yourwebsite.com/'; $currentUrl = 'http://www.yourwebsite.com/blogs/archive/all.html'; checkUrl($baseUrl, $currentUrl, '../../../niets/test/adem.html'); echo '<hr>'; checkUrl($baseUrl, $currentUrl, '../../../../../niets.html'); echo '<hr>'; checkUrl($baseUrl, $currentUrl, '/niets.html'); echo '<hr>'; checkUrl($baseUrl, $currentUrl, './niets.html'); echo '<hr>'; checkUrl($baseUrl, $currentUrl, '../niets.html'); echo '<hr>'; checkUrl($baseUrl, $currentUrl, 'niets.html'); echo '<hr>'; ?> |
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 | Original foundUrl: ../../../niets/test/adem.html BaseUrl: http://www.yourwebsite.com/ CurrentUrl: http://www.yourwebsite.com/blogs/archive/all.html FoundUrl: http://www.yourwebsite.com/niets/test/adem.html ---- Original foundUrl: ../../../../../niets.html BaseUrl: http://www.yourwebsite.com/ CurrentUrl: http://www.yourwebsite.com/blogs/archive/all.html FoundUrl: http://www.yourwebsite.com/niets.html ---- Original foundUrl: /niets.html BaseUrl: http://www.yourwebsite.com/ CurrentUrl: http://www.yourwebsite.com/blogs/archive/all.html FoundUrl: http://www.yourwebsite.com/niets.html ---- Original foundUrl: ./niets.html BaseUrl: http://www.yourwebsite.com/ CurrentUrl: http://www.yourwebsite.com/blogs/archive/all.html FoundUrl: http://www.yourwebsite.com/niets.html ---- Original foundUrl: ../niets.html BaseUrl: http://www.yourwebsite.com/ CurrentUrl: http://www.yourwebsite.com/blogs/archive/all.html FoundUrl: http://www.yourwebsite.com/blogs/niets.html ---- Original foundUrl: niets.html BaseUrl: http://www.yourwebsite.com/ CurrentUrl: http://www.yourwebsite.com/blogs/archive/all.html FoundUrl: http://www.yourwebsite.com/niets.html |
Heb je iets van basename, dirname functies in php, dat gebruiken, scheelt je een hoop gezeik volgens mij. Je hebt ook een realpath functie. Ik zou die eens gebruiken.quote:Op woensdag 15 mei 2013 23:30 schreef Chandler het volgende:
Hey allemaal,
Ben sinds een paar dagen met een crawler aan het spelen en heb nu een functie gemaakt die kijkt of links een volledige of juist onvolledige link heeft, indien er geen http:// in voorkomt wil ik het aanpassen, dat heb ik nu met de volgende functie gedaan, maar nu de vraag aan jullie. Wat zouden jullie anders doen?
Voorbeeld links
[ code verwijderd ]
[ code verwijderd ]
uitkomst
[ code verwijderd ]
Ik hoor graag wat jullie er van vinden...
Volgens mij klopt die niet.quote:Op woensdag 15 mei 2013 23:30 schreef Chandler het volgende:
----
Original foundUrl: ./niets.html
BaseUrl: http://www.yourwebsite.com/
CurrentUrl: http://www.yourwebsite.com/blogs/archive/all.html
FoundUrl: http://www.yourwebsite.com/niets.html
----
Het gaat om parsen van links in een documentquote:Op donderdag 16 mei 2013 09:31 schreef slacker_nl het volgende:
Heb je iets van basename, dirname functies in php, dat gebruiken, scheelt je een hoop gezeik volgens mij. Je hebt ook een realpath functie. Ik zou die eens gebruiken.
Je hebt gelijk gisteren echt overheen gekeken, gelijk even proberen te fixen, maar verder nog tips? of is deze dirty manier goed genoeg?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 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 | <?php error_reporting(E_ALL); function checkUrl($baseUrl, $currentUrl, $foundUrl) { echo 'Original foundUrl: ' . $foundUrl . '<br />'; // geen HTTP gevonden? if (strtolower(substr($foundUrl, 0, 7)) != "http://") { // parse $foundURL $p = parse_url($foundUrl); // geen hostname gevonden? if (!isset($p['host'])) { $path = ''; // parse current url $p = parse_url($currentUrl); // explode directories $dirs = explode("/", $p['path']); // kijken of er subdirectories gevonden zijn?! if (count($dirs) > 1) { // verwijder lege directories (eg ///) foreach ($dirs AS $k=>$v) { if (strlen($v) == 0) { unset($dirs[$k]); } } // unset laatste directorie aangezien dat geen directory maar het aangeroepen bestand is unset($dirs[count($dirs)]); // reset array index reset($dirs); } // ../ gevonden in $foundURL? if (strpos($foundUrl, "../") > -1) { $dotsCount = 0; // verwijder alle ../ en update counter while (strpos($foundUrl, "../") > -1) { $foundUrl = substr($foundUrl, 3); $dotsCount++; } // is aantal dirs groter dan $dotsCount? if (count($dirs) > $dotsCount) { // verwijder te veel directories... for ($x = 0; $x < $dotsCount; $x++) { unset($dirs[count($dirs) - $x]); } // genereer nieuwe path; $path = implode("/", $dirs) . "/"; } } // ./ gevonden? elseif (strpos($foundUrl, "./") > -1) { // gebruik volledig path $path = implode("/", $dirs) . "/"; $foundUrl = substr($foundUrl, 2); } // / is verwijzing voor root van domein. elseif (substr($foundUrl, 0, 1) == "/") { // verwijder eerste / $foundUrl = substr($foundUrl, 1); } // combineer nieuwe $foundUrl $foundUrl = $baseUrl . $path . $foundUrl; } } // test case echo 'BaseUrl: ' . $baseUrl . '<br />'; echo 'CurrentUrl: ' . $currentUrl . '<br />'; echo 'FoundUrl: ' . $foundUrl . '<br />'; } $baseUrl = 'http://www.yourwebsite.com/'; $currentUrl = 'http://www.yourwebsite.com/blogs/archive/all.html'; checkUrl($baseUrl, $currentUrl, '../../../niets/test/adem.html'); echo '<hr>'; checkUrl($baseUrl, $currentUrl, '../../../../../niets.html'); echo '<hr>'; checkUrl($baseUrl, $currentUrl, '/niets.html'); echo '<hr>'; checkUrl($baseUrl, $currentUrl, './niets.html'); echo '<hr>'; checkUrl($baseUrl, $currentUrl, '../niets.html'); echo '<hr>'; checkUrl($baseUrl, $currentUrl, 'niets.html'); echo '<hr>'; ?> |
1 2 3 4 | Original foundUrl: ./niets.html BaseUrl: http://www.yourwebsite.com/ CurrentUrl: http://www.yourwebsite.com/blogs/archive/all.html FoundUrl: http://www.yourwebsite.com/blogs/archive/niets.html |
Dus? Ahh, kutzooit, readlink -m is niet geimplementeerd in php. Dus..quote:Op donderdag 16 mei 2013 09:57 schreef Chandler het volgende:
Het gaat om parsen van links in een document
Nee maar is wel gemakkelijk om het zo in een test case te verwerken zodat ik deze gemakkelijk kan aanpassenquote:Op donderdag 16 mei 2013 11:02 schreef Tijn het volgende:
Wil je $baseUrl echt elke keer meegeven aan de functie? Dat is (binnen de applicatie) toch altijd dezelfde waarde? Ik zou er een constante van maken die je ergens in je config-file definieert.
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 | <?php error_reporting(E_ALL); function checkUrl($currentUrl, $foundUrl) { if (!$foundUrl) { return $currentUrl; } if (preg_match('/^[a-z]+?:\/\//', $foundUrl)) { return $foundUrl; } $matches; preg_match('/^([a-z]+?:\/\/)(.+)?/', $currentUrl, $matches); $iets=$matches[1]; $baseurl= $matches[2]; if(preg_match('/^\//', $foundUrl)) { $baseurl = preg_replace('/\/.+/', '', $baseurl); return "$iets$baseurl$foundUrl"; } elseif (preg_match('/^\.\//', $foundUrl)) { $baseurl = preg_replace('/\/$/', '', $baseurl); $foundUrl = substr_replace($foundUrl, "" ,0, 2); return checkUrl("$iets$baseurl", $foundUrl); } elseif (preg_match('/^\.\.\//', $foundUrl)) { $baseurl = preg_replace('/\/\w+\/?$/', '', $baseurl); $foundUrl = substr_replace($foundUrl, "" , 0, 3); return checkUrl("$iets$baseurl", $foundUrl); } $currentUrl = preg_replace('/\/?$/', '', $currentUrl); return "$currentUrl/$foundUrl"; } function is($found, $want, $desc) { if ($want == $found) { print "OK: $desc\n"; } else { print "KO $desc: Wanted $want, got $found\n"; } } is(checkUrl("http://x.nl/deep/shizzle/cabizzle", '/x.php'), 'http://x.nl/x.php', 'absolute path with dir ending with /'); is(checkUrl("", "http://x.nl"), 'http://x.nl', "no current url"); is(checkUrl("http://x.nl", ""), 'http://x.nl', "no href found"); is(checkUrl("http://x.nl", '/x.php'), 'http://x.nl/x.php', "absolute path"); is(checkUrl("http://x.nl/deep", '/x.php'), 'http://x.nl/x.php', 'absolute path with dir'); is(checkUrl("http://x.nl/deep/", '/x.php'), 'http://x.nl/x.php', 'absolute path with dir ending with /'); is(checkUrl("http://x.nl/deep/", './x.php'), 'http://x.nl/deep/x.php', 'relative path, same dir'); is(checkUrl("http://x.nl/deep/", '../x.php'), 'http://x.nl/x.php', 'relative path, in higher/lower dir'); is(checkUrl("http://x.nl/deep/shizzle", '../../x.php'), 'http://x.nl/x.php', 'relative path, in higher/lower dir, but deeper'); is(checkUrl("http://x.nl/deep/shizzle", './../x.php'), 'http://x.nl/deep/x.php', 'relative path, another option'); |
SPOILER: nog kekkerOm 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.In theory there is no difference between theory and practice. In practice there is.
array_map gebruiken?quote:Op maandag 13 mei 2013 14:26 schreef Sitethief het volgende:
Wat is eigenlijk beter, of maakt het niks uit?
Dit:
[ code verwijderd ]
Of dit:
[ code verwijderd ]
Ik vraag me af of die else nou echt zoveel vertraagt, ik vind het gewoon lelijk staan om standaard $k in $p te zetten in dit geval.
1 2 3 | if (productdata) { array_map(this->getProduct, $je_product); } |
quote:Op donderdag 16 mei 2013 19:02 schreef slacker_nl het volgende:Tssss moet niet gekker wordenSPOILER: nog kekkerOm 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.Just say hi!
Daar lijkt het wel op, maar het doet iets anders. In de oorspronkelijke functie wordt het product gekoppeld aan de key opgehaald en in een nieuwe array op de plaats van value neergezet. Dat is dus niet per se gelijk aan wat array_map doet.quote:Op donderdag 16 mei 2013 19:19 schreef slacker_nl het volgende:
[..]
array_map gebruiken?
[ code verwijderd ]
Works for me:quote:Op donderdag 16 mei 2013 20:06 schreef papernote het volgende:
[..]
Daar lijkt het wel op, maar het doet iets anders. In de oorspronkelijke functie wordt het product gekoppeld aan de key opgehaald en in een nieuwe array op de plaats van value neergezet. Dat is dus niet per se gelijk aan wat array_map doet.
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 Class Foo { function bar($iets) { return "bar: $iets"; } } $foo = new Foo(); $hash = array( 'hello' => 'hallo', 'world' => 'wereld' ); function bla($iets) { return "bla$iets"; } $mapval = array_map('bla', $hash); print_r($mapval); $mapval = array_map(array($foo, 'bar'), $hash); print_r($mapval); ?> |
1 2 3 4 5 6 7 8 9 10 | Array ( [hello] => blahallo [world] => blawereld ) Array ( [hello] => bar: hallo [world] => bar: wereld ) |
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 | <?php // set_time_limit(10); session_start(); $t = 2; function __time() { list($usec, $sec) = explode(" ", microtime()); $t = ((float)$usec + (float)$sec); return $t; } $abort = false; $start = __time(); ignore_user_abort(true); echo 'start test<br />'; while ($abort != true) { if (isset($_SESSION['test'])) { $abort = true; unset($_SESSION['test']); echo 'abort<br />'; } if (__time() - $start > $t) { echo __time() . "<br />"; $start = __time(); } } ?> |
1 2 3 4 5 6 7 | <?php session_start(); $_SESSION['test'] = true; ?> |
Voordeel van ignore_user_abort is dat het script doorloopt als de browser gesloten wordt... dat vind ik het handige er aan. Maar stel het project loopt fout, maar blijft fout doorlopen... dan moet ik php killen en dat is niet echt praktisch als je geen server admin bent.. Dus ben ik opzoek naar een methode die wel werkt!quote:Op vrijdag 17 mei 2013 11:07 schreef slacker_nl het volgende:
Waarom zou dat het spul moeten opheven, als dat waar is doe je niks met ignore_user_abort(); Dus dat blijft gewoon zoals het is..
Maak van misschien maar, het werkt! LOLquote:edit: misschien werkt het ook gewoon al als je session_destroy() en session_start() weer aanroept.
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 | <?php function __time() { list($usec, $sec) = explode(" ", microtime()); $t = ((float)$usec + (float)$sec); return $t; } ob_start(); // set_time_limit(10); session_start(); ignore_user_abort(true); $t = 2; $abort = false; $start = __time(); if (isset($_SESSION['test'])) { unset($_SESSION['test']); } while ($abort != true) { if (isset($_SESSION['test'])) { $abort = true; unset($_SESSION['test']); echo 'abort<br />'; } if (__time() - $start > $t) { $start = __time(); echo $start;} session_destroy(); session_start(); } ?> |
1 2 3 4 | <?php session_start(); $_SESSION['test'] = true; ?> |
Daar zou ik dan een APC variabele voor gebruiken, die staat in het werkgeheugen.quote:Op vrijdag 17 mei 2013 12:00 schreef Chandler het volgende:
Zat zelf nog aan een extra bestandje (kijken of deze bestaat) te denken, die te plaatsen waardoor ALLE jobs gestopt worden, alleen weet ik niet of dat dat leuk is voor de server qua preformance?!
1 2 3 4 5 6 7 8 9 10 | <?php ignore_user_abort(1); // run script in background set_time_limit(0); // run script forever $interval=60*15; // do every 15 minutes... do{ // add the script that has to be ran every 15 minutes here // ... sleep($interval); // wait 15 minutes }while(true); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 | Array ( [0] => 172.340.194.2 [1] => 39.64.51.232 [2] => 1.2.3.4 [3] => 81.119.83.275 [4] => 15.211.81.90 ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $findIP = '1.2.3.4'; foreach ($arrIP as $IP) { if ($findIP == $IP) { echo 'IP FOUND'; echo '<br>'; } else { echo 'IP NOT FOUND'; echo '<br>'; } } ?> |
Omdat je datatypes niet gelijk zijn. Je vergelijkt 1.2.3.4 met '1.2.3.4'.quote:Op vrijdag 17 mei 2013 14:07 schreef xaban06 het volgende:
[ code verwijderd ]
[ code verwijderd ]
Waarom krijg ik geen IP FOUND te zien Alleen maar IP NOT FOUND.
Beide zijn strings, dus het moet goed zijn.quote:Op vrijdag 17 mei 2013 14:09 schreef Maringo het volgende:
[..]
Omdat je datatypes niet gelijk zijn. Je vergelijkt 1.2.3.4 met '1.2.3.4'.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $arrIP = array("123.123.123.123", "10.0.0.1", "1.2.3.4", "121.111.85.11", "onzin"); $findIP = '1.2.3.4'; foreach ($arrIP as $IP) { if ($findIP == $IP) { echo 'IP FOUND'; echo '<br>'; } else { echo 'IP NOT FOUND'; echo '<br>'; } } ?> |
maar doe zoiets:quote:Op vrijdag 17 mei 2013 14:07 schreef xaban06 het volgende:
[ code verwijderd ]
[ code verwijderd ]
Waarom krijg ik geen IP FOUND te zien Alleen maar IP NOT FOUND.
1 2 3 4 5 6 7 8 9 10 | <?php $ip_regexp = '/^1.2.3.4/$'; $found = preg_grep($ipregexp, $array_met_ip); if ($found) { print "$ip_regexp found\n"; print_r($found) } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $arrIP = array('172.340.194.2', '39.64.51.232', '1.2.3.4', '81.119.83.275', '15.211.81.90'); $findIP = '1.2.3.4'; foreach ($arrIP as $IP) { if ($findIP == $IP) { echo 'IP FOUND'; echo '<br>'; } else { echo 'IP NOT FOUND'; echo '<br>'; } } ?> |
Beide zijn sowieso strings dus niet nodig om ook het type te controleren.quote:Op vrijdag 17 mei 2013 14:13 schreef rekenwonder het volgende:
Maar == is toch geen type-safe comparison?
Omdat ik die functie niet ken ..nu wel overigensquote:Op vrijdag 17 mei 2013 14:14 schreef rekenwonder het volgende:
Waarom gebruik je niet array_search() trouwens?
quote:Op vrijdag 17 mei 2013 14:51 schreef Chandler het volgende:
probeer eens trim om het ip adres heen?
dus trim($IP)
Spaties en andere onzin van de voor- en achterkant van een string afhalen.quote:
You are so (ontiegelijk) welkom!quote:Op vrijdag 17 mei 2013 14:49 schreef xaban06 het volgende:
Volgens mij ben ik gek of ik doe iets heel erg fout.
/edit
Opgelost, thanks Chandler.
Ik zou zelf in_array() aanraden.quote:Op vrijdag 17 mei 2013 14:14 schreef rekenwonder het volgende:
Waarom gebruik je niet array_search() trouwens?
quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $dbc = mysqli_connect('localhost', 'voorbeeld', 'wachtwoord', 'aliendatabase') or die('Error connecting to MySQL server'); $query = "INSERT INTO aliens_abduction (first_name, last_name, when_it_happened, how_long, " . "how_many, alien_description, what_they_did, fang_spotted, other, email) " . "VALUES ('$first_name', '$last_name', '$when_it_happened', '$how_long', '$how_many', " . "'$alien_description', '$what_they_did', '$fang_spotted', '$other', '$email')"; $result = mysqli_query($dbc, $query) or die('Error connecting to MySQL server'); mysqli_close($dbc); ?> |
quote:Return Values
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
quote:En ik dacht dat de codes achter de "$result =" werden opgeslagen en niet werden uitgevoerd,
$dbc is geen string, zoals php.net aangeeft: " Returns an object which represents the connection to a MySQL Server. ". Na de functie te hebben uitgevoerd zit in de variabel een object die de connectie representeert.quote:Op zaterdag 18 mei 2013 21:11 schreef DutchErrorist het volgende:
[ code verwijderd ]
Ik heb even een vraagje over deze code. Ik snap waarom je de twee strings bij $dbc en $query in variabelen zet, maar voor die msqli_query in $result is dat toch niet nodig?
En ik dacht dat de codes achter de "$result =" werden opgeslagen en niet werden uitgevoerd, maar hij plaatst wel alles in de tabel. Kan iemand hier mij even duidelijkheid over geven. Sorry als ik onduidelijk ben, maar ben voor het eerst bezig met PHP.
Aangezien je nieuw bent in PHP: mysqli wegflikkeren en PDO gebruiken. Leer je het in een keer goed.quote:Op zaterdag 18 mei 2013 21:11 schreef DutchErrorist het volgende:
[ code verwijderd ]
Ik heb even een vraagje over deze code. Ik snap waarom je de twee strings bij $dbc en $query in variabelen zet, maar voor die msqli_query in $result is dat toch niet nodig?
En ik dacht dat de codes achter de "$result =" werden opgeslagen en niet werden uitgevoerd, maar hij plaatst wel alles in de tabel. Kan iemand hier mij even duidelijkheid over geven. Sorry als ik onduidelijk ben, maar ben voor het eerst bezig met PHP.
waarom?quote:Op zaterdag 18 mei 2013 23:50 schreef slacker_nl het volgende:
[..]
Aangezien je nieuw bent in PHP: mysqli wegflikkeren en PDO gebruiken. Leer je het in een keer goed.
Makkelijkere API, zeker voor beginners.quote:
Omdat het makkelijk, transparant, voor alle DB's dezelfde calls, return values, kek en het OO is. Dat ze die ouwe meuk er nog niet uitgegooid hebben snap ik niet, PDO moet gewoon omarmt worden door PHP developers.quote:
ik heb werkelijk nog nooit PDO gebruikt.. (en tot een jaar terug ofzo niet eens wat over gehoord...)quote:Op zondag 19 mei 2013 00:13 schreef slacker_nl het volgende:
[..]
Omdat het makkelijk, transparant, voor alle DB's dezelfde calls, return values, kek en het OO is. Dat ze die ouwe meuk er nog niet uitgegooid hebben snap ik niet, PDO moet gewoon omarmt worden door PHP developers.
Het wordt al een tijdje door PHP zelf aangeraden (samen met mysqli): http://nl1.php.net/manual/en/mysqlinfo.api.choosing.phpquote:Op zondag 19 mei 2013 00:16 schreef mschol het volgende:
[..]
ik heb werkelijk nog nooit PDO gebruikt.. (en tot een jaar terug ofzo niet eens wat over gehoord...)
Dat is het probleem. Ik denk dat ik er drie jaar geleden in dit topic ook vaak over heb lopen zagen. Herstel, 2008 alweer. Dat is vijf jaar..quote:Op zondag 19 mei 2013 00:16 schreef mschol het volgende:
[..]
ik heb werkelijk nog nooit PDO gebruikt.. (en tot een jaar terug ofzo niet eens wat over gehoord...)
ahaquote:Op zondag 19 mei 2013 00:21 schreef Tijn het volgende:
[..]
Het wordt al een tijdje door PHP zelf aangeraden (samen met mysqli): http://nl1.php.net/manual/en/mysqlinfo.api.choosing.php
Naaah ik volg eerst het boek maar eens.quote:Op zaterdag 18 mei 2013 23:50 schreef slacker_nl het volgende:
[..]
Aangezien je nieuw bent in PHP: mysqli wegflikkeren en PDO gebruiken. Leer je het in een keer goed.
Lees dan dit eens: http://php.net/mysqli_query. Die functie kan meerdere dingen terug geven, ook na een INSERT query. Dat kun je dan gebruiken om te zien of de query gelukt is.quote:Op zondag 19 mei 2013 00:31 schreef DutchErrorist het volgende:
[..]
Naaah ik volg eerst het boek maar eens.
Ik zal als ik dit boek heb door gewerkt me eens concentreren op hoe PDO precies werkt. Ik wil toch eerst de basics onder de knie hebben.quote:Op zondag 19 mei 2013 12:24 schreef papernote het volgende:
[..]
Lees dan dit eens: http://php.net/mysqli_query. Die functie kan meerdere dingen terug geven, ook na een INSERT query. Dat kun je dan gebruiken om te zien of de query gelukt is.
Nu staat er in jouw code (heel slecht) "or die" achter, waardoor het opslaan van de boolean die mysqli_query() terug geeft niet meer nodig is. Maar als je een nette error afhandeling maakt, dan wil je de waarde van $result na een INSERT query ook bekijken.
Ik zou zeggen dat PDO juist de basis is en je daarna eventueel mysqli eens zou kunnen bekijken voor geavanceerdere dingen.quote:Op zondag 19 mei 2013 12:27 schreef DutchErrorist het volgende:
[..]
Ik zal als ik dit boek heb door gewerkt me eens concentreren op hoe PDO precies werkt. Ik wil toch eerst de basics onder de knie hebben.
Ja maar het lijkt me ook wel handig dat ik even weet hoe PHP precies werkt. Hoe PDO werkt kan ik later nog wel opzoeken.quote:Op zondag 19 mei 2013 12:41 schreef Tijn het volgende:
[..]
Ik zou zeggen dat PDO juist de basis is en je daarna eventueel mysqli eens zou kunnen bekijken voor geavanceerdere dingen.
Maar niet de comments bij de documentatie, daar moet je soms wel om huilen.quote:Op zondag 19 mei 2013 12:44 schreef Tijn het volgende:
Dat begrijp ik.
Als ik jou was zou ik de documentatie op php.net goed lezen. Zeker voor beginners is het goed geschreven vind ik.
Waar ik naar linkte is geen PDO hè.quote:Op zondag 19 mei 2013 12:27 schreef DutchErrorist het volgende:
[..]
Ik zal als ik dit boek heb door gewerkt me eens concentreren op hoe PDO precies werkt. Ik wil toch eerst de basics onder de knie hebben.
Nee klopt dat zie ik nu, maar iedereen begint over PDO en weet ik veel terwijl ik zelf nog maar net begonnen ben. Dan kan ik beter even met msqli beginnen en in mijn achterhoofd houden dan ik nog even moet kijken naar hoe het nu precies zit met 'or die' en PDO.quote:
Kun je al programmeren in andere talen?quote:Op zondag 19 mei 2013 12:56 schreef DutchErrorist het volgende:
[..]
Nee klopt dat zie ik nu, maar iedereen begint over PDO en weet ik veel terwijl ik zelf nog maar net begonnen ben. Dan kan ik beter even met msqli beginnen en in mijn achterhoofd houden dan ik nog even moet kijken naar hoe het nu precies zit met 'or die' en PDO.
Uh het is Head first php & mysql.quote:
Nee alleen HTML en CSS. Ik wil alleen een website maken die een database gebruikt voor iets dus wil het ook wat snappen. Daarnaast moet ik sowieso voor volgend semester MySQL gebruiken en waarschijnlijk willen ze dat je dan Access gebruikt, maar daar heb ik geen zin in.quote:
Dan zou ik me nog even helemaal niet bezighouden met databasetoegang en eerst zorgen dat je weet hoe variabelen, if-statements, loops, functies, objecten etc. werken.quote:
Head first het raam uit met dat boek. Het is uit 2008!! Dat is vijf jaar oud!quote:Op zondag 19 mei 2013 13:59 schreef DutchErrorist het volgende:
[..]
Uh het is Head first php & mysql.
Nee Het is handig om de basics te begrijpen. Ik snap best wel dat het een en ander is veranderd, maar dat kan ik ook nog wel achteraf leren aan de hand van codacademy of andere websites. Als ik PHP wil gaan gebruiken zoek ik het sowieso van te voren voorbeelden op online voordat ik iets ga doen.quote:Op zondag 19 mei 2013 14:02 schreef papernote het volgende:
[..]
Head first het raam uit met dat boek. Het is uit 2008!! Dat is vijf jaar oud!
Komt wel goedquote:Op zondag 19 mei 2013 14:01 schreef Tijn het volgende:
[..]
Dan zou ik me nog even helemaal niet bezighouden met databasetoegang en eerst zorgen dat je weet hoe variabelen, if-statements, loops, functies, objecten etc. werken.
Wat je nu aan het doen vent heeft niks met de basics te maken.quote:Op zondag 19 mei 2013 14:15 schreef DutchErrorist het volgende:
[..]
Het is handig om de basics te begrijpen.
PHP is niet bedoelt om 24/7 te draaien. Dan kun je beter een andere programmeertaal gaan gebruiken. Bijvoorbeeld een Java of C++ applicatie maken die continue draait.quote:Op maandag 20 mei 2013 09:08 schreef Chandler het volgende:
Heeft er iemand ook ervaring met het laten draaien van php scripts in de achtergrond (soortement van cronjob maar dan een script) die 24/7 draait? ik wil namelijk een service gaan maken waarbij ik een web interface ga schrijven en een cronjob wil draaien die het werk op de achtergrond doet.
Wil weten hoe stabiel dat is
Wil ook weten dat wanneer het script gestopt is/wordt ik deze weer automatisch kan starten
Idd, bash of perlquote:Op maandag 20 mei 2013 09:19 schreef papernote het volgende:
[..]
PHP is niet bedoelt om 24/7 te draaien. Dan kun je beter een andere programmeertaal gaan gebruiken. Bijvoorbeeld een Java of C++ applicatie maken die continue draait.
Nogmaals, daar heb ik geen kaas van gegeten en heb nu al een leuk scriptje dat dagen kan draaien en zijn ding kan doen, maar daar willen we nu een interface omheen gaan schrijven om bepaalde processen te starten/stoppen etc.quote:
http://symcbean.blogspot.(...)nning-processes.htmlquote:Op maandag 20 mei 2013 09:23 schreef Chandler het volgende:
Juist, maar die kennis heb ik dus niet in huis. Maar kun je mij vertellen waarom niet? of iets er niet voor bedoeld is is natuurlijk heel wat anders of het wel/niet kan met de redenen daarvan
Dan leer je het toch? Je kan PHP, dan kom je talen tegen waar het allemaal net iets logischer is.quote:Op maandag 20 mei 2013 09:28 schreef Chandler het volgende:
Nogmaals, daar heb ik geen kaas van gegeten en heb nu al een leuk scriptje dat dagen kan draaien en zijn ding kan doen, maar daar willen we nu een interface omheen gaan schrijven om bepaalde processen te starten/stoppen etc.
Totdat je ergens iets vergeet.quote:Op maandag 20 mei 2013 09:38 schreef Chandler het volgende:
Ik zal het doornemen!
-edit-
Staat niet dat het niet kan, wel dat het niet handig is ivm afbreken van het script door de server, veel gebruik van systeem resources etc. Maar dat laatste ben ik niet bang voor aangezien ik het script gebruik voor een specifiek iets... en na iedere actie het geheugen weer 100% terug geef..
En je infinite-running script zo af en toe via een cronjob aanzetten ipv continu laten draaien is geen optie?quote:Het afbreken van het script is wel een vervelend punt vandaar dat ik een oplossing hiervoor zoek, eventueel een cronjob die iedere minuut een check doet of het script nog draait en is dit niet het geval dan het script weer aanroepen zodat het weer verder kan gaan met draaien!
Of nog erger: totdat PHP iets vergeet en je er überhaupt niets aan kunt doen.quote:
Mooi, maar wil nog niet zeggen dat ik voor 1 iets gelijk een nieuwe taal moet gaan leren, daar heb ik helaas geen tijd / prioriteit voor..quote:Op maandag 20 mei 2013 09:55 schreef slacker_nl het volgende:
[..]
Dan leer je het toch? Je kan PHP, dan kom je talen tegen waar het allemaal net iets logischer is.
Daar kom je snel genoeg achter met xdebugquote:
Tuurlijk is dat wel een optie! zou het script ook bv een uur of 3 kunnen laten lopen en daarna weer opnieuw opstarten maar als het niet hoeft, hoeft het niet!quote:En je infinite-running script zo af en toe via een cronjob aanzetten ipv continu laten draaien is geen optie?
PHP iets vergeet? kun je dat eens uitleggen? maar om het script te stoppen zijn er dan nog aantal andere mogelijkheden om het script te stoppen (via database, via apc, via bestand, noem maar op).quote:Op maandag 20 mei 2013 11:03 schreef papernote het volgende:
[..]
Of nog erger: totdat PHP iets vergeet en je er überhaupt niets aan kunt doen.
Inderdaad een goed idee! maar dan heb je geen pid nodig hoorquote:Op maandag 20 mei 2013 14:43 schreef xaban06 het volgende:
Je zou bij het starten van je script de pid weg kunnen schrijven naar een bestand. Met een cronjob check je of deze nog draait, zo niet: starten.
Of je herstart 'm sowieso ieder uur oid.
Daar ben ik het dan ook wel mee eens!quote:Op maandag 20 mei 2013 17:20 schreef Tijn het volgende:
Maar waarom doet het script niet gewoon wat-ie moet doen en stopt-ie daarna, om vervolgens (bv door cron of door zichzelf) even later weer opnieuw te starten? Dat is toch een veel beter idee dan iets met een infinite loop?
Een gebruiker is iemand die een job invoert op de site, zie vorige bewerkte post... hopelijk een stuk duidelijker.quote:
Was ik al bang voor, maar je ziet toch wel het gevolg van het invullen van de database tabellen? of moet ik het even voor je voormaken? zodat je zo'n 9000 url's in een overzicht krijgtquote:Op dinsdag 21 mei 2013 19:38 schreef boem-dikkie het volgende:
Ik snap echt helemaal niks van je verhaal.
Waarom doe je alles in 1 table? Da's toch niet meer bij te houden?quote:Op dinsdag 21 mei 2013 19:04 schreef Chandler het volgende:
Hoe zorg je dat een op de achtergrond lopend proces die (bv websites scant) niet door 1 gebruiker helemaal wordt overgenomen? maar netjes de taken over alle gebruikers verdeeld?
Wat is nou de juiste manier van aanpakken? iedere actieve user qua datetime nalopen op wie het laatste en het langst geleden is gescanned? hoe doet google dat? en is daar informatie over te lezen? heb al gezocht over threads, queues etc maar kon niet echt iets vinden waar ik wijzer van werd.
Voorbeeld:
Stel ik heb 2 gebruikers die websites laten scannen.
User 1 - > website.nl
User 2 -> website.com
Nu laad ik eerst user 1 en process de eerste pagina, daaruit haal ik alle links (36)
Daarna laad ik user 2 en process de eerste pagina, daaruit haal ik alle links (15).
In het tabel staat het nu zo
id 1 -> user 1 pagina 1
id 2 -> user 2 pagina 1
id 3 t/m 39 -> user 1 vervolg pagina
id 40 t/m 55 -> user 2 vervolg pagina
Dus als ik door ga met scannen gebeurd er dit.
user 1 laad de volgende pagina's in queue (3 t/m 39) en haalt daaruit 300 pagina's
user 2 laad de volgende pagina's in queue (40 t/m 55) en haalt daaruit 500 pagina's
tabel ziet er nu zo uit (vervolg)
id 56 t/m 356 -> user 1 vervolg pagina's
id 367 t/m 867 -> user 2 vervolg pagina's
user 1 laad de volgende pagina's in queue (56 t/m 356) en haalt daaruit 3000 pagina's
user 2 laad de volgende pagina's in queue (40 t/m 55) en haalt daaruit 5000 pagina's
tabel ziet er nu zo uit (vervolg) etc
id 868 t/m 3868 -> user 1 vervolg pagina's
id 3869 t/m 8869 -> user 2 vervolg pagina's
etc etc etc
Zoals je nu ziet wordt de verhouding erg scheef tussen het inlezen en het toevoegen aan de queue, dus mijn vraag is hoe ik dit beter kan oplossen?
Correctquote:Op dinsdag 21 mei 2013 19:53 schreef Crutch het volgende:
Dus ref_id is de id met de url van de pagina waarin de url gevonden is?
Oftewel z'n 'parent'-pagina?
Dat is dus het probleem, ik zou liever zien dat ik bv per gebruiker 1 url uitlees, daarvan de links in de database invoer en op ga naar de volgende user (job) en daarvan 1 url uitlees en etc etc etc..quote:Op dinsdag 21 mei 2013 19:57 schreef Crutch het volgende:
Misschien kun je een tabel met 'tasks' maken.
Als een thread dan klaar is met lezen, steelt hij een aantal taken van de andere user die nog bezig is. And so on.
Nee klopt maar het zou mooi zijn als ik de een een url kon laten opvragen, die verwerken en dan de url van de volgende opvragen ongeacht hoe lang de queue is...quote:Op dinsdag 21 mei 2013 20:08 schreef Crutch het volgende:
Dan verdeel je geen taken, maar krijgen beide users vanaf het begin een specifiek domein en blijven altijd de onderliggende pagina's en url die aanvankelijk uit dat domein gekomen zijn scannen.
Oftewel; ik denk niet dat wat jij wil kan zonder dat de processen scheef gaan lopen, want ze nemen elkaar in principe geen werk uit handen dus is er geen balans.
poehhhhhh.....quote:Op dinsdag 21 mei 2013 20:13 schreef Chandler het volgende:
[..]
Nee klopt maar het zou mooi zijn als ik de een een url kon laten opvragen, die verwerken en dan de url van de volgende opvragen ongeacht hoe lang de queue is...
Dat bedoel ik, dus als ik het op deze manier doe moet ik OF voor iedere job een apart script laten lopen OF een script maken die jobs netjes verdeeld en ongeacht de lengte van de queue de url's verwerkt...quote:Op dinsdag 21 mei 2013 20:21 schreef Crutch het volgende:
[..]
poehhhhhh.....
Dan zou je moeten bepalen wat een url is en wat een url is komende uit zo'n 'parent'-url; eenmaal begonnen loop je het risico dat er geen eind aan het scannen komt, neem bijvoorbeeld wikipedia.
Je queue kan dan wel eens exponentieel oplopen, interessant wel, maar ook dweilen met de kraan open.
Ok,quote:Op woensdag 22 mei 2013 08:48 schreef Maringo het volgende:
Wat perspectief is misschien ook handig. Om hoeveel websites gaat het? Hoeveel user? Hoe groot zijn de websites?
Daar ga ik natuurlijk ook niet vanuit maar er zijn genoeg sites die dit soort zaken regelen met 1 job controller oid!? zie iets beter geschetst voorbeeld;quote:En op de vraag hier Google het doet, weet alleen Google het antwoord. Maar ga er vanuit dat hun niet 1 job per keer laten draaien.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 4 klanten die informatie willen invoeren Klant A -> wil www.kleinewebsite.nl uitlezen Klant B -> wil www.google.com uitlezen Klant C -> wil www.anderekleinesite.nl uitlezen Klant D -> wil www.fok.nl uitlezen Eerste run; Klant A leest site en vind 50 links = ID 1 t/m 50 (tijd 1 seconde) Klant B leest site en vind 500 links = ID 51 t/m 551 (tijd 1 seconde) Klant C leest site en vind 10 links = ID 551 t/m 561 (tijd 1 seconde) Klant D leest site en vind 4 links = ID 562 t/m 566 (tijd 1 seconde) Tweede run Klant A leest volgende links uit en vind 500 links in de 50 uitgelezen links = ID 567 t/m 1067 (tijd 50 seconde) Klant B leest volgende links uit en vind 50000 links in de 500 uitgelezen links = ID 1068 t/m 6068 (tijd 4 minuten) Klant C leest volgende links uit en vind 200 links in de 10 uitgelezen links = ID 6069 t/m 6269 (tijd 1 minuut) Klant D leest volgende links uit en vind 20 links in de 4 uitgelezen links = ID 6270 t/m 6280 (tijd 20 seconden) Derde run; Klant A leest volgende links uit en vind 5000 links in de 500 uitgelezen links = ID 6281 t/m 12281 (tijd 4 minuten) Klant B leest volgende links uit en vind 500000 links in de 50000 uitgelezen links = ID 12281 t/m 512281 (tijd 66 uur) Klant C leest volgende links uit en vind 2000 links in de 200 uitgelezen links = ID 512282 t/m 514282 (tijd 2 minuten) Klant D leest volgende links uit en vind 5 links in de 20 uitgelezen links = ID 514282 t/m 514287 (tijd 25 seconden) |
Ik zou gewoon queue's maken. Je hebt verschillende q-runners die een zooi links uitlezen. Onafhankelijk vd gebruiker.quote:Op woensdag 22 mei 2013 09:10 schreef Chandler het volgende:
[..]
Ok,
5 users, 5 sites en hoe groot de websites zijn maakt op zich weinig uit, de ene heeft 20 pagina's de andere 20.000.000
Een ander voorbeeld: Stel er zijn mensen die op youtube video's uploaden (LOL, wie doet dat nou?) en youtube kan maar 1 video per keer converteren!. Er is dan een wachtrij waarin video's gezet worden. Opeens is er een gebruiker die 20 video's toevoegt (speeltijd: 6000 uur) en deze komen allemaal in de wachtrij, daarna komt er 1 gebruiker en die upload een videotje van 30 seconden. Nu moet deze laatste gebruiker wachten totdat de 20 video's van de vorige gebruiker is voltooid, terwijl het eerlijker zou zijn als er van de ene gebruiker 1 video verwerkt wordt en daarna die van de ander en etc etc etc..
Duidelijker?
Maar uit de respons blijkt dat er blijkbaar niemand hier gewerkt heeft aan zo'n systeem
Even een grof voorbeeld; gebruiker B die dus zorgt dat andere websites ERG lang moeten wachten voordat ze klaar.
[..]
Daar ga ik natuurlijk ook niet vanuit maar er zijn genoeg sites die dit soort zaken regelen met 1 job controller oid!? zie iets beter geschetst voorbeeld;
[ code verwijderd ]
Alles is fictief maar laat zien dat 1 gebruiker dus de queue erg lang in gebruik kan nemen terwijl het eerlijker zou zijn als ik per gebruiker per ronde 1 link uitlees oid?!
Mocht iemand leesvoer hebben dan zie ik die graag gepost!
Kun je dat iets breder uitleggen? q-runners? zal eens googlen!quote:Op woensdag 22 mei 2013 09:38 schreef slacker_nl het volgende:
[..]
Ik zou gewoon queue's maken. Je hebt verschillende q-runners die een zooi links uitlezen. Onafhankelijk vd gebruiker.
Waarom zou dat eerlijker zijn? Gewoon first in, first out lijkt me juist het toonbeeld van eerlijkheid.quote:Op woensdag 22 mei 2013 09:10 schreef Chandler het volgende:
[..]
Opeens is er een gebruiker die 20 video's toevoegt (speeltijd: 6000 uur) en deze komen allemaal in de wachtrij, daarna komt er 1 gebruiker en die upload een videotje van 30 seconden. Nu moet deze laatste gebruiker wachten totdat de 20 video's van de vorige gebruiker is voltooid, terwijl het eerlijker zou zijn als er van de ene gebruiker 1 video verwerkt wordt en daarna die van de ander en etc etc etc..
Je hebt een queue, daarin staan je links (of verwijzingen ernaar), en je hebt een queue runner. Dan pakt je q-runner een zut links, tagged de queue (zodat andere runners niet dezelfde links gaan ophalen), processed een qitem, en sluit spul af. Voordeel is dat je meerdere queue-runners kan hebben, simultaan kan draaien, je hoeft niet te kijken naar de gebruiker, maar je pakt gewoon shit op wat in de queue staat. Is er niks, dan draait de qrunner niet (of heel kort), is er veel, dan pakt ie alles in batches op en doet ie z'n ding.quote:Op woensdag 22 mei 2013 09:41 schreef Chandler het volgende:
[..]
Kun je dat iets breder uitleggen? q-runners? zal eens googlen!
Omdat iemand op zo'n manier kan zorgen dat hij 3 dagen de site voor zch aan het werk heeft en de ander daarna pas zijn job kan doen... en daarvoor wil ik dus een passende oplossing vinden..quote:Op woensdag 22 mei 2013 09:49 schreef Tijn het volgende:
Waarom zou dat eerlijker zijn? Gewoon first in, first out lijkt me juist het toonbeeld van eerlijkheid.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | array( 1 => array ( "name" => "user1", "websites" => array ( 1 => "website1a", 2 => "website1b", 3 => "website1c" ) ), 2 => array ( "name" => "user2", "websites" => array ( 1 => "website2a" ) ), 3 => array ( "name" => "user3", "websites" => array ( 1 => "website3a", 2 => "website3b" ) ) ); |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |