FOK!forum / Digital Corner / [PHP/(My)SQL] voor dummies #108
Deeltjesversnellerdonderdag 11 april 2013 @ 10:36
php.jpg


Als je vragen hebt over PHP/MySQL, dan zit je hier goed met een vaste kliek guru's en een groot aantal regelmatige bezoekers. Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten wát er niet lukt en wélke foutmelding je precies krijgt :)

Zie ook:
PHP Dataverwerking
Officiële PHP website
PHP Documentatie
MySQL Reference Manual
Yet Another PHP Faq
PHP Cheat Sheet
PHP5 Power Programming - boek met uitleg over OOP, Pear, XML, etc

Tutorials:
W3Schools PHP
W3Schools SQL

Succes heren met het volgende deeltje!
Crutchdonderdag 11 april 2013 @ 10:37
<?php echo 'FiPo'; ?>

Volgende week op gesprek komen bij een bedrijf met eigen MVC, ben benieuwd.
Deeltjesversnellerdonderdag 11 april 2013 @ 10:37
ik heb een string als: >2500 <5000

nou wil ik met regex de ene keer de 2500, en de andere keer de 5000 pakken, hoe fix ik dat nou?

>[0-9]+

en

<[0-9]+

werkt wel, maar dan krijg ik >2500 en <5000 terwijl ik die > en < niet erbij wil. weet iemand hoe ik alleen de cijfers pak?


heb hem: <([0-9]+)

[ Bericht 7% gewijzigd door Deeltjesversneller op 11-04-2013 10:47:09 ]
A-mineurdonderdag 11 april 2013 @ 10:52
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.


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.
?>


[ Bericht 26% gewijzigd door A-mineur op 11-04-2013 11:20:48 ]
A-mineurdonderdag 11 april 2013 @ 10:58
quote:
0s.gif 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.
Je bedoelt CMS, MVC is een design pattern ;).
Crutchdonderdag 11 april 2013 @ 11:06
quote:
0s.gif Op donderdag 11 april 2013 10:58 schreef A-mineur het volgende:

[..]

Je bedoelt CMS, MVC is een design pattern ;).
Ik bedoel MVC.
Rockfiredonderdag 11 april 2013 @ 11:17
quote:
0s.gif 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 ]

en nu heeft hij een array met allemaal nullen, ik denk dat die -1 een 1 moet zijn ;)
A-mineurdonderdag 11 april 2013 @ 11:20
quote:
0s.gif 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 ;)
Je hebt gelijk, dat moet idd een 1 zijn ipv -1.
Maringodonderdag 11 april 2013 @ 13:54
quote:
0s.gif 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.
Een eigen MVC? Hoe ziet een eigen en niet-eigen MVC eruit dan?

SPOILER
Vanuit gaande dat MVC voor de Model-View-Controller afkorting staat. :+
Crutchdonderdag 11 april 2013 @ 13:57
quote:
2s.gif Op donderdag 11 april 2013 13:54 schreef Maringo het volgende:

[..]

Een eigen MVC? Hoe ziet een eigen en niet-eigen MVC eruit dan?

SPOILER
Vanuit gaande dat MVC voor de Model-View-Controller afkorting staat. :+
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.
A-mineurdonderdag 11 april 2013 @ 14:38
quote:
0s.gif 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.
Een eigen framework dan ;) Ik kan met 4 pagina's een MVC pattern opzetten ;)
Crutchdonderdag 11 april 2013 @ 14:41
quote:
0s.gif 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 ;)
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. :')
StMdonderdag 11 april 2013 @ 15:25
Ik zou een ander bedrijf opzoeken om bij te soliciteren :)
Maringodonderdag 11 april 2013 @ 15:40
quote:
0s.gif 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. :')
True. Toch zou ik graag willen weten wat ze ermee bedoelen. :+
Crutchdonderdag 11 april 2013 @ 15:40
quote:
2s.gif Op donderdag 11 april 2013 15:40 schreef Maringo het volgende:

[..]

True. Toch zou ik graag willen weten wat ze ermee bedoelen. :+
Ja ik ook, maar dat zien we dus binnenkort. :7
quote:
0s.gif Op donderdag 11 april 2013 15:25 schreef StM het volgende:
Ik zou een ander bedrijf opzoeken om bij te soliciteren :)
ok.
Maringodonderdag 11 april 2013 @ 15:42
quote:
0s.gif Op donderdag 11 april 2013 15:40 schreef Crutch het volgende:

[..]

Ja ik ook, maar dat zien we dus binnenkort. :7

Succes in ieder geval. ^O^
Crutchdonderdag 11 april 2013 @ 15:48
quote:
2s.gif Op donderdag 11 april 2013 15:42 schreef Maringo het volgende:

[..]

Succes in ieder geval. ^O^
Thnx.
Tijndonderdag 11 april 2013 @ 16:16
quote:
2s.gif Op donderdag 11 april 2013 15:40 schreef Maringo het volgende:

[..]

True. Toch zou ik graag willen weten wat ze ermee bedoelen. :+
Een eigen framework waarschijnlijk.
Maringodonderdag 11 april 2013 @ 17:11
quote:
2s.gif Op donderdag 11 april 2013 16:16 schreef Tijn het volgende:

[..]

Een eigen framework waarschijnlijk.
Dat dacht ik eerst ook, maar dan noem je het toch niet je 'eigen MVC'?
Tijndonderdag 11 april 2013 @ 17:12
quote:
2s.gif 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'?
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.
Lightzaterdag 13 april 2013 @ 01:21
quote:
2s.gif 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?
Maringozaterdag 13 april 2013 @ 01:58
quote:
0s.gif 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 zou ik helemaal kansloos vinden. Als een niet technisch aangelegd persoon, zonder overstemming hoe het product heet, maar wat neerplempt in een advertentie.
Crutchmaandag 15 april 2013 @ 09:20
quote:
2s.gif 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.
Dat is mij verteld door iemand van werving en selectie. Dus zal wel een loze kreet zijn.
Juicyhilmaandag 15 april 2013 @ 09:35
Had laatst ook iemand die vroeg of ik ervaring had met het MVC-framework :P
Tijnmaandag 15 april 2013 @ 09:42
quote:
0s.gif 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 :P
_O-
Darkomenmaandag 15 april 2013 @ 13:20
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?
Crutchmaandag 15 april 2013 @ 13:23
quote:
0s.gif 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?
Lol, je baas flikkert je eruit, maar wil wel een opleiding voor je betalen? 8)7
urselmaandag 15 april 2013 @ 13:28
quote:
0s.gif 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.
Eduvision heeft de nodige cursussen, maar niet goedkoop. :7
Darkomenmaandag 15 april 2013 @ 13:47
quote:
0s.gif 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? 8)7
Overname, boventallig geworden na 13 jaar trouwe dienst, dus het hoort bij mn 'deal'.

quote:
0s.gif Op maandag 15 april 2013 13:28 schreef ursel het volgende:

[..]

Op wat voor niveau/budget.
Eduvision heeft de nodige cursussen, maar niet goedkoop. :7
Basis kennis heb ik wel, ik rotzooi al 13 jaar met php en mysql.
Afgelopen jaren heb ik ook een server opgezet welke automatisch diverse rapportages maakt en analyseert.
Maar niks officieel geleerd dus.
Kwa kosten... geen idee.
Tijnmaandag 15 april 2013 @ 13:49
Is het misschien een idee om zo'n certificaat van Zend proberen te halen? Dan heb je in elk geval een papiertje dat een beetje serieus overkomt.
Darkomenmaandag 15 april 2013 @ 14:05
Zend is misschien nog een beetje te hoog gegrepen.
Scorpiemaandag 15 april 2013 @ 14:06
quote:
0s.gif Op maandag 15 april 2013 14:05 schreef Darkomen het volgende:
Zend is misschien nog een beetje te hoog gegrepen.
Welnee.
urselmaandag 15 april 2013 @ 14:07
quote:
0s.gif Op maandag 15 april 2013 14:05 schreef Darkomen het volgende:
Zend is misschien nog een beetje te hoog gegrepen.
Kwestie van goed leren :')
Crutchmaandag 15 april 2013 @ 14:20
quote:
0s.gif Op maandag 15 april 2013 14:05 schreef Darkomen het volgende:
Zend is misschien nog een beetje te hoog gegrepen.
Zend hanteert ook MVC.
Dan kun je net als ik maar eens gaan uitpluizen hoe MVC werkt.
Heb zojuist zelf wat gebakken met wat ik heb geleerd; scheelt weer voor mijn sollicitatie.
mstxmaandag 15 april 2013 @ 14:26
quote:
0s.gif Op maandag 15 april 2013 14:20 schreef Crutch het volgende:

[..]

Zend hanteert ook MVC.
Ja die hebben ook een eigen mvc :Y

SPOILER
:+
Crutchmaandag 15 april 2013 @ 14:29
quote:
0s.gif Op maandag 15 april 2013 14:26 schreef mstx het volgende:

[..]

Ja die hebben ook een eigen mvc :Y

SPOILER
:+
:7
raptorixmaandag 15 april 2013 @ 15:09
quote:
0s.gif 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?
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.
mscholmaandag 15 april 2013 @ 18:01
quote:
0s.gif Op maandag 15 april 2013 14:26 schreef mstx het volgende:

[..]

Ja die hebben ook een eigen mvc :Y

SPOILER
:+
ondanks het hoge offtopicgehalte, moet ik deze hier neer gooien: DIG / USB geplet..
:')
Crutchdinsdag 16 april 2013 @ 10:33
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.
boem-dikkiedinsdag 16 april 2013 @ 10:38
quote:
0s.gif 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.
http://www.pixelzdesign.com/blog_view.php
Crutchdinsdag 16 april 2013 @ 10:41
quote:
Wtf? Da's snel.
Thanks.
Crutchdinsdag 16 april 2013 @ 11:36
Jcrop it is then. ^O^
Darkomendinsdag 16 april 2013 @ 13:11
quote:
0s.gif 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.
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?
raptorixdinsdag 16 april 2013 @ 13:41
quote:
0s.gif 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?
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/

Je werkt hem in een avond of 5 a 7 door en dan heb je eigenlijk de basis van c# wel onder de knie.

Qua cursussen zou ik me dan eerder richten op bijvoorbeeld een specifiek CMS, in Nederland is er op dit moment een super te kort aan Sitecore developers, daarnaast is er ook veel vraag naar Umbraco en EpiServer specialisten, dus als je vanuit dat perspectief kijkt zou ik dat zeker overwegen.
karton2zaterdag 20 april 2013 @ 18:03
Met hulp van een tutorial heb ik een contactformulier gemaakt. Zelf heb ik het formulier uitgebreid met wat extra velden:

formcode uit contact.html:
SPOILER
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
<form method="post" action="mailer.php">                
                    <p>
                      <label>*Naam:</label>
                      <input name="name" >
                      
                      <label>Adres:</label>
                      <input name="adres" >
                      
                      <label>Postcode & Plaats:</label>
                      <input name="pcp" >
                                                      
                      <label>*E-mail:</label>
                      <input name="email" type="email" >
                      
                      <label>Mobiel:</label>
                      <input name="mobiel" >
                      
                      <label>Telefoon:</label>
                      <input name="telefoon" >
                      
                      <label>Bericht:</label>
                      <textarea name="message" ></textarea>
                      
                      <label>*Hoeveel is 2+2? (spam-preventie)</label>
                      <input name="spam" ><br />   <br />     
                        <input id="submit" name="submit" type="submit" value="verzend">
                  </p>
                </form>
mailer.php is alsvolgt:
SPOILER
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>';
    }
}
    
?>
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
12
Uw 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?
KomtTijd...zaterdag 20 april 2013 @ 18:36
Ik zou zeggen begin eens met de syntax-fouten (ifif). Heb je error-reporting wel aan staan?
Devolutionzaterdag 20 april 2013 @ 19:31
Syntax highlighting is ook fijn, zowel in een bericht dat je hier plaatst als in het programma waarmee je de code schrijft. Hierdoor kun je vaak vrij snel zien waar het fout gaat in je code. Als ik bijvoorbeeld jouw code hier met syntax highlighting ingeschakeld neer zet, zie je dit:

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>';
    }
}
    
?>

Je ziet nu al vrij snel waar het fout gaat (regel 17, "if" zou groen moeten zijn maar is nu blauw omdat er "ifif" staat in plaats van "if).
Op dit forum kun je syntax highlighting gebruiken door je code tussen [.php][/php.] te zetten (zonder de punten).

Oh, en maak ook goed gebruik van tabs, je bent in deze code een paar tabs vergeten waardoor je niet goed meer kunt zien welke } bij welke if hoort ;)
Diaboxzaterdag 20 april 2013 @ 20:33
Wat ben je attent Devolution.
BlueNumberzondag 21 april 2013 @ 11:08
Ga dit topic ook maar es in de gaten houden. Ik weet vrij veel van sql-meuk, maar ben voor de lol eens begonnen met wat mysql i.c.m. php op een apache server.

Ongeveer elk uur kom ik weer nieuwe geile functionaliteiten tegen bij het doorspitten van google :@
boem-dikkiezondag 21 april 2013 @ 13:19
Alsals, misschien moeten ze dat maar implementeren in PHP.
BlueNumberzondag 21 april 2013 @ 15:10
Even een vraag. Ik wil de inhoud van een formulier naar een gmailadres sturen. Ik gebruik Xampp als tool voor de apach webserver.

Helaas krijg ik dit niet aan de praat. Online kan ik tig websites vinden die elkaar tegenspreken en geen van de suggesties lukt.

Het testscript is

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";}
    
?>

Waarbij testaccount@gmail.com het door mij aangemaakt emailadres is.

Dan ziet mijn sendmail.ini er zo uit:

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

en het relevante deel van php.ini ziet er zo uit:

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"

Heb het ook al getest met poort 25 en in beide gevallen komt er 'ok' als ik het script run, maar ik krijg geen email binnen.

[ Bericht 0% gewijzigd door BlueNumber op 21-04-2013 16:57:25 ]
WyriHaximuszondag 21 april 2013 @ 15:49
Wat is de error die je krijgt?
BlueNumberzondag 21 april 2013 @ 16:09
quote:
6s.gif Op zondag 21 april 2013 15:49 schreef WyriHaximus het volgende:
Wat is de error die je krijgt?
ik krijg geen error
papernotezondag 21 april 2013 @ 16:43
Zet mail.log eens aan. Heb je display_errors aan staan in PHP, met error_reporting op -1?
BlueNumberzondag 21 april 2013 @ 17:01
quote:
2s.gif 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?
mail.log geeft niet veel boeiende info:

mail() on [C:\xampp\htdocs\home\mail.php:7]: To: testaccount@gmail.com -- Headers: From:ditisdeafzender@blaat.com

display_errors staat default aan en error_reporting heb ik op -1 gezet, maar dat levert niets extra op.
papernotezondag 21 april 2013 @ 17:04
Blijkbaar wordt de mail verzonden. Wat is dan het probleem?
BlueNumberzondag 21 april 2013 @ 17:19
quote:
5s.gif Op zondag 21 april 2013 17:04 schreef papernote het volgende:
Blijkbaar wordt de mail verzonden. Wat is dan het probleem?
Dat ie niet aankomt :')
Maringozondag 21 april 2013 @ 17:23
quote:
0s.gif Op zondag 21 april 2013 17:19 schreef BlueNumber het volgende:

[..]

Dat ie niet aankomt :')
Heb je al in je junk folder van gmail gekeken?
BlueNumberzondag 21 april 2013 @ 17:24
quote:
3s.gif Op zondag 21 april 2013 17:23 schreef Maringo het volgende:

[..]

Heb je al in je junk folder van gmail gekeken?
Jep, het is een leeg account, dus ik zou hem toch (ofwel in hoofdmap, ofwel in een spam/trashmap) moeten zien.
Maringozondag 21 april 2013 @ 17:41
quote:
0s.gif 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.
En als je deze veranderd naar een ander emailadres in je php.ini?
1sendmail_from =testaccount@gmail.com
BlueNumberzondag 21 april 2013 @ 17:53
quote:
2s.gif 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 ]

Ook dan geeft ie aan dat het verstuurd wordt...
Maringozondag 21 april 2013 @ 17:59
quote:
0s.gif Op zondag 21 april 2013 17:53 schreef BlueNumber het volgende:

[..]

Ook dan geeft ie aan dat het verstuurd wordt...
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
karton2zondag 21 april 2013 @ 19:27
quote:
2s.gif 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?
quote:
12s.gif Op zaterdag 20 april 2013 19:31 schreef Devolution het volgende:
<knip>
Probleem is opgelost. Stom dat ik daar overheen heb gekeken, highlighting stond overigens wel gewoon aan. Dank voor de hulp in ieder geval!

Laatste vraag: Ik heb hier en daar gelezen over 'injection' om via een formulier rotzooi te gaan verspreiden.
Is zo'n anti-spam vraag echt voldoende is om misbruik van het formulier te voorkomen?
KomtTijd...zondag 21 april 2013 @ 20:14
zo'n simpele sowieso niet. En een captcha is geen beveiliging tegen header injection.
BlueNumberzondag 21 april 2013 @ 21:34
quote:
2s.gif 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
Thanks voor het meedenken, maar het werkte helaas niet.

Heb mn database en webbestanden gebackupped en een nieuwe installatie van Xampp erop geknald en nu doet ie het wel.
Lightzondag 21 april 2013 @ 22:35
quote:
6s.gif Op zondag 21 april 2013 13:19 schreef boem-dikkie het volgende:
Alsals, misschien moeten ze dat maar implementeren in PHP.
De broncode van PHP staat op github, je kunt zelf dingen toevoegen ;)
boem-dikkiezondag 21 april 2013 @ 22:36
quote:
0s.gif Op zondag 21 april 2013 22:35 schreef Light het volgende:

[..]

De broncode van PHP staat op github, je kunt zelf dingen toevoegen ;)
_O_
#ANONIEMmaandag 22 april 2013 @ 21:03
Wie heeft die website voor het koningslied gemaakt? :') Dik xss lek

http://bit.ly/17SFXrk _O-

Wtf, waarom wil die url niet goed? :')

[ Bericht 68% gewijzigd door #ANONIEM op 22-04-2013 21:06:46 ]
Rockfiremaandag 22 april 2013 @ 21:13
quote:
0s.gif 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 _O-

Wtf, waarom wil die url niet goed? :')
Pluxbox
#ANONIEMmaandag 22 april 2013 @ 21:16
quote:
0s.gif Op maandag 22 april 2013 21:13 schreef Rockfire het volgende:

[..]

Pluxbox
:')_!
pascal08dinsdag 23 april 2013 @ 19:29
Weet iemand hoe het zit met SSL certificaten in XAMPP? Ik probeer via cURL verbinding te maken met een server, maar dat gaat niet met de SSL optie aan.

Ik heb dit certificaat gedownload en in XAMPP geïnstalleerd. Met CURLOPT_CAINFO heb ik het pad naar dit certificaat gedefinieerd. Curl_exec geeft volgens geen respons, terwijl het met CURLOPT_SSL_VERIFYPEER op false wel werkt.

EDIT: Volgens mij maakt de server waarmee ik wil verbinden helemaal geen gebruik van SSL. Dan heeft het ook weinig zin om zo'n certificaat te installeren toch? Kan ik gewoon SSL_VERIFYPEER en SSL_VERIFYHOST op false zetten? Heeft dat dezelfde consequenties als het inloggen via de website zelf, wat gewoon een http-verbinding is.

[ Bericht 5% gewijzigd door pascal08 op 23-04-2013 19:49:08 ]
Crutchwoensdag 24 april 2013 @ 09:27
Een logicatest voor programmeurs.
Wat moet ik me daar bij voorstellen?
xaban06donderdag 25 april 2013 @ 18:19
Ik wil weten of een bepaald woord/string voorkomt in een string.

Dit doe ik met preg_match, maar werken wil het niet.

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.";
}
?>

Ik krijg een false terug terwijl het er echt in voorkomt.
KomtTijd...donderdag 25 april 2013 @ 18:25
quote:
0s.gif 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.
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).
Als je variabele $ip wilt matchen moet je natuurlijk geen single-quotes gebruiken.

[ Bericht 5% gewijzigd door KomtTijd... op 25-04-2013 18:37:19 ]
KomtTijd...donderdag 25 april 2013 @ 18:27
en volgens mij moet je preg_match() vergelijken met == 1 als je wilt weten of hij iets gematcht heeft.
Tijndonderdag 25 april 2013 @ 18:35
quote:
0s.gif Op woensdag 24 april 2013 09:27 schreef Crutch het volgende:
Een logicatest voor programmeurs.
Wat moet ik me daar bij voorstellen?
Zoiets als een IQ-test?
Crutchvrijdag 26 april 2013 @ 10:34
quote:
5s.gif Op donderdag 25 april 2013 18:35 schreef Tijn het volgende:

[..]

Zoiets als een IQ-test?
Het was reeksen, vormen en inzicht.
mstxvrijdag 26 april 2013 @ 11:00
quote:
0s.gif 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.
http://nl1.php.net/strpos
wobbelwoensdag 1 mei 2013 @ 11:14
Iets wat ik mij al heel lang afvraag, kan dit in MySQL?

SELECT * FROM gebruikers WHERE id = [hier meerdere ID's aanleveren]

En dan met een foreach alle e-mailadressen van de opgegeven ID's uitlezen? Nu doe ik gewoon een loopje met alle ID's erin waardoor ik dus voor elk ID een aparte SELECT query heb :+
KomtTijd...woensdag 1 mei 2013 @ 11:31
Je bedoelt IN?
wobbelwoensdag 1 mei 2013 @ 11:49
quote:
14s.gif Op woensdag 1 mei 2013 11:31 schreef KomtTijd... het volgende:
Je bedoelt IN?
*O* eens testen bedankt
Tijnwoensdag 1 mei 2013 @ 12:42
IN + implode()
KomtTijd...woensdag 1 mei 2013 @ 12:52
implode() werkt niet, dan maakt'ie er één string van ipv losse parameters als je hem prepared.
Tijnwoensdag 1 mei 2013 @ 13:00
quote:
14s.gif 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.
Ah natuurlijk, je hebt gelijk.
wobbelwoensdag 1 mei 2013 @ 13:34
quote:
14s.gif 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 gaan :+
Dit werkt toch:

implode("','", $array)
KomtTijd...woensdag 1 mei 2013 @ 14:09
gewoon die array pushen naar je array met parameters.
kakner2woensdag 1 mei 2013 @ 15:38
ook een goeie tip als je meerdere inserts wilt doen in 1 statement, kwam ik laatst achter:
INSERT INTO table (col1, col2) VALUES (1, 'abc'), (2, 'def')
boem-dikkiedinsdag 7 mei 2013 @ 09:55
Iemand hier ervaring met MAMP?

Gister de boel zo opgezet dat ik via OSX gewoon een localhost draai en ik MAMP niet meer hoef te gebruiken. Was in de veronderstelling dat ik daarnaast MAMP gewoon kon draaien om nog even een back-up te maken van alle databases in m'n phpMyAdmin. Alleen sinds de installatie van mySQL en PHP e.d. op OSX starten de servers van MAMP niet meer op, en kan ik dus niet bij phpMyAdmin van MAMP komen. Via terminal naar de MAMP mySQL folder gaan en via ./mysqldump een database dump maken werkt ook niet.

Enig idee hoe ik een back-upje van mijn MAMP databases krijg?
Crutchdinsdag 7 mei 2013 @ 10:49
Localhost even uitzetten, MAMP draaien, database backuppen?
boem-dikkiedinsdag 7 mei 2013 @ 13:20
Heb 't al voor elkaar. 'Data' uit de mySQL map van MAMP gehaald en in die in de nieuwe mySQL map gezet.
KomtTijd...dinsdag 7 mei 2013 @ 13:49
Gaat dat zomaar? Voor zover ik weet is dat iig voor InnoDB tables geen optie.
kutkloon7donderdag 9 mei 2013 @ 12:42
SPOILER
Vraagje. Ik heb een site gemaakt waarmee je ook bestanden kan beheren, als in verwijderen, organizeren in mappen, etc. Nu heb ik het probleem dat als ik dit echt naar een server upload, ik geen toegang heb tot de mappen die ik gebruik om de bestanden in op te slaan. Ik krijg een 'permission denied'-error als ik probeer een nieuwe map aan te maken, en ik kan zelfs niet eens de bestanden in de mappen lezen (ik heb de code die dit doet geinclude in het php bestand dat geparst wordt, en ik krijg hier geen foutmelding oid, maar dat is waarschijnlijk omdat de fout zich buiten dat php bestand bevindt?).

De mappen die ik wil lezen zijn wel afgeschermd voor toegang via http, maar ik heb verder geen .htacces bestand ofzo (of zou ik die zelf moeten aanmaken?). Geen flauw idee of .htaccess überhaupt wel over de rechten van de php scripts gaat, ik dacht eigenlijk van niet, maar het is het enige wat ik kan verzinnen.
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 ]
kutkloon7donderdag 9 mei 2013 @ 13:12
Toch een probleem, ik wil bestanden uploaden, die ik dan verplaats met move_uploaded_file(). Maar de 'safe mode' staat aan op de server die ik gebruik, waardoor alleen scripts die de map hebben aangemaakt er ook echt iets naar kunnen uploaded (als ik het goed begrijp). Hoe zou je dit kunnen oplossen? Ik heb al gegoogeld, maar ik kon niets nuttigs vinden, alleen suggesties die zeggen dat je safe mode uit moet zetten, wat ik natuurlijk niet kan.
KomtTijd...donderdag 9 mei 2013 @ 13:16
quote:
2s.gif 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.
Andere provider nemen.
kutkloon7donderdag 9 mei 2013 @ 13:31
quote:
14s.gif Op donderdag 9 mei 2013 13:16 schreef KomtTijd... het volgende:

[..]

Andere provider nemen.
Werkt, voor zover getest, perfect nu :)
pascal08donderdag 9 mei 2013 @ 17:09
Ik wil een aantal Javascript arrays opslaan die horen bij een JS code op een bepaalde pagina, zeg pagina: "home". Vervolgens wil ik een andere pagina kunnen bezoeken en weer terug kunnen keren naar de pagina "home" met dezelfde JS arrays als ik had.

Nu dacht ik zelf aan het opslaan van de arrays in een PHP sessie variabele, maar dan zou ik de sessie variabele continue moeten updaten via HTTP. Het aantal handelingen op de pagina "home" (met de JS arrays) is vrij groot, dus het liefst wil ik de JS arrays lokaal opslaan of 1 maal bij het verlaten van de pagina.

Is er een manier om vast te kunnen stellen wanneer je een pagina verlaat, zodat ik dan de arrays zou kunnen opslaan in de sessie?

Mijn excuses als dit eigenlijk in het JS-topic had gemoeten. :@
mstxdonderdag 9 mei 2013 @ 17:22
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.
pascal08donderdag 9 mei 2013 @ 17:51
quote:
7s.gif 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.
Een cookie had ik nog niet aan gedacht. :D

Momenteel heb ik al bij iedere bewerking een Ajax-request. Misschien valt er iets te combineren, zodat het allemaal in 1 request kan. Ik zal daar eens naar kijken.

Wat je als laatste noemt ken ik niet. Maar het liefst wil ik wel iets wat niet browser-afhankelijk is, want sommige mensen... :P
Tijndonderdag 9 mei 2013 @ 19:19
Waarom niet localStorage?

[edit] Ah, was al genoemd zie ik. LocalStorage werkt in elke enigszins moderne browser, zelfs IE8.
pascal08donderdag 9 mei 2013 @ 19:34
quote:
5s.gif 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.
Ook op mobile devices?
Tijndonderdag 9 mei 2013 @ 19:54
quote:
0s.gif Op donderdag 9 mei 2013 19:34 schreef pascal08 het volgende:

[..]

Ook op mobile devices?
Ja hoor.

http://caniuse.com/#feat=namevalue-storage
pascal08donderdag 9 mei 2013 @ 19:57
quote:
Ik had 't zelf ook al opgezocht. :@ Bedankt weer voor de goede tip, hier had ik waarschijnlijk niet zelf opgekomen. :D
Tijndonderdag 9 mei 2013 @ 20:00
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.
pascal08donderdag 9 mei 2013 @ 20:08
quote:
14s.gif 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.
Ja, dat scheelt echt inderdaad. Zoiets wil je natuurlijk het liefst client-sided houden, dus dan is dit de perfect oplossing waarschijnlijk. :)
Berend.vrijdag 10 mei 2013 @ 19:15
Ik heb een lijst met een aantal cijfers uit een database. Stukje ervan:

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

Script wat ik nu heb:

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>";
  }

?> 

Hoe reken ik met een simpel script het gemiddelde van al deze getallen uit? Dank
Juicyhilvrijdag 10 mei 2013 @ 19:17
SELECT AVG(Price) FROM shop_transactions
WHERE ItemID='264'
Berend.vrijdag 10 mei 2013 @ 19:21
quote:
0s.gif 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>";
  }

Ben nog niet erg bekend met php, uitkomst van het script is ''array'' , wat doe ik fout?
Juicyhilvrijdag 10 mei 2013 @ 19:22
quote:
0s.gif 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?
Maak er eens AVG(Price) As prijs FROM... van.
En $row['prijs']
Berend.vrijdag 10 mei 2013 @ 19:26
quote:
0s.gif Op vrijdag 10 mei 2013 19:22 schreef Juicyhil het volgende:

[..]

Maak er eens AVG(Price) As prijs FROM... van.
En $row['prijs']
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/diamond/index.php on line 11

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>";
  }

?> 

Lijn 11 is hier lijn 3.
Juicyhilvrijdag 10 mei 2013 @ 19:28
Ja ik bedoel ook:

SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264'
Berend.vrijdag 10 mei 2013 @ 19:32
quote:
0s.gif Op vrijdag 10 mei 2013 19:28 schreef Juicyhil het volgende:
SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264'
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
KomtTijd...vrijdag 10 mei 2013 @ 19:33
Eerste hit op "php round": http://php.net/manual/en/function.round.php
Eerste hit op "mysql round": http://dev.mysql.com/doc/(...).html#function_round
Juicyhilvrijdag 10 mei 2013 @ 19:34
quote:
0s.gif 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
floor() omlaag afronden of ceil() omhoog afronden
Berend.vrijdag 10 mei 2013 @ 19:39
quote:
0s.gif Op vrijdag 10 mei 2013 19:34 schreef Juicyhil het volgende:

[..]

floor() omlaag afronden of ceil() omhoog afronden
Werkt top, thanks!
Berend.vrijdag 10 mei 2013 @ 22:47
Nu wil ik nog toevoegen dat die alleen de resultaten pakt van de afgelopen 7/8 dagen.

Na wat google'en dit gevonden:

1SELECT * FROM table WHERE column1 > SUBDATE(NOW(), INTERVAL 8 DAY) AND DAYOFWEEK(column1) >= 1;

Wat geprobeerd, maar dit werkt niet:

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;");

Misschien heeft het hiermee te maken?

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;");
(Zie laatste regel in tekst, de ; Na weghalen werkt het script nog steeds niet.)

Alvast bedankt!
KomtTijd...vrijdag 10 mei 2013 @ 22:51
1 AND Quantity='1' > SUBDATE(NOW()

lijkt me een duidelijke syntax fout, daar moet je 100% zeker een error over krijgen.
Berend.vrijdag 10 mei 2013 @ 22:54
quote:
14s.gif 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;");
?>

Werkt nog steeds niet. Error: Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/diamond/index2.php on line 23

Bedankt voor je reactie.
KomtTijd...vrijdag 10 mei 2013 @ 22:56
Ja dat is begrijpelijk, als je SQL niet klopt geeft mysqli_query (blijkbaar) false terug. Wat is je SQL error?
Berend.vrijdag 10 mei 2013 @ 22:58
quote:
14s.gif 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?
#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 1
KomtTijd...vrijdag 10 mei 2013 @ 23:01
...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.
Berend.vrijdag 10 mei 2013 @ 23:04
quote:
14s.gif 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;");
?>


Dit en dit werkt ook nog niet. Ik voel me een beetje stom na zo vaak proberen. ;)
KomtTijd...vrijdag 10 mei 2013 @ 23:06
Wat zit je dan ook allemaal te veranderen? Kijk naar de error die je krijgt. Daar zit je fout. Niet ergens anders.
Berend.vrijdag 10 mei 2013 @ 23:11
quote:
5s.gif 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
?>

Werkt ook nog niet.
KomtTijd...vrijdag 10 mei 2013 @ 23:15
Hè? Wat ben je nou in hemelsnaam aan het doen? KIJK NAAR JE ERROR!

er staat:
quote:
check the manual that corresponds to your MySQL server version for the right syntax to use near '[stukje query]'
De plek waar dat [stukje query] begint, dáár zit je fout! Het eerste karakter! Niet ergens anders!

Los die fout op, run hem opnieuw, kijk of hij goed is. Zo niet herhalen vanaf stap 1.

Debuggen is geen kwestie van random haakjes weghalen of toevoegen.
Rockfirevrijdag 10 mei 2013 @ 23:16
Als je nou om te beginnen je query verbeterd:
1SELECT AVG(Price) AS prijs FROM shop_transactions WHERE ItemID='264' AND Quantity='1' AND datumkolom > SUBDATE(NOW(), INTERVAL 8 DAY) AND DAYOFWEEK(datumkolom) >= 1
LET OP: je moet hierin datumkolom nog wel even vervangen voor de naam van de kolom in je tabel waarin de datum staat!
Tijnvrijdag 10 mei 2013 @ 23:19
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;"

Regel 4 klopt natuurlijk van geen kant. Het feit dat de regel eindigt met een haakje dat nergens geopend wordt is nog maar het begin van het probleem.
Berend.vrijdag 10 mei 2013 @ 23:19
quote:
0s.gif 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
Dankjewel, nu werkt die perfect. Ik moet zelf nog veel van syntaxes leren. :)
KomtTijd...vrijdag 10 mei 2013 @ 23:19
quote:
0s.gif Op vrijdag 10 mei 2013 23:19 schreef Berend. het volgende:

[..]

Dankjewel, nu werkt die perfect. Ik moet zelf nog veel van syntaxes leren. :)
Je moet leren debuggen. Niet leren copy-pasten.
Rockfirevrijdag 10 mei 2013 @ 23:46
quote:
0s.gif 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:
14s.gif Op vrijdag 10 mei 2013 23:19 schreef KomtTijd... het volgende:

[..]

Je moet leren debuggen. Niet leren copy-pasten.
Heb je op zijn minst gekeken naar het verschil tussen jouw query en die van mij? Zodat je ook begrijpt wat je fout deed?
Berend.vrijdag 10 mei 2013 @ 23:49
quote:
1s.gif 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?
Ja, elk haakje dat geopend wordt moet ook gesloten worden. Right?
KomtTijd...vrijdag 10 mei 2013 @ 23:50
quote:
0s.gif Op vrijdag 10 mei 2013 23:49 schreef Berend. het volgende:

[..]

Ja, elk haakje dat geopend wordt moet ook gesloten worden. Right?
Doe nou die originele query nog eens runnen. En KIJK NAAR DE ERROR.

Staat daar een haakje in de buurt?
Tijnvrijdag 10 mei 2013 @ 23:55
quote:
0s.gif 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:

1Quantity='1' > SUBDATENOW()

Ik begrijp niet wat hier staat en MySQL ook niet :P
KomtTijd...zaterdag 11 mei 2013 @ 00:04
quote:
2s.gif 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 :P
Origineel was dat ook de enige fout, voordat hij random haakjes begon weg te halen en toe te voegen.
Maringozaterdag 11 mei 2013 @ 07:38
Interessant vraagstuk. Nog interessantere uitkomst. ;)
Boze_Appelzaterdag 11 mei 2013 @ 08:23
En wat is item 264.
Rockfirezaterdag 11 mei 2013 @ 09:26
quote:
0s.gif Op vrijdag 10 mei 2013 23:49 schreef Berend. het volgende:

[..]

Ja, elk haakje dat geopend wordt moet ook gesloten worden. Right?
Kijk nou eens goed! Er is wel wat meer verschil dan alleen maar haakjes die je niet goed had gedaan:

Jouw query:
quote:
SELECT AVG(Price) AS prijs
FROM shop_transactions
WHERE ItemID='264'
AND Quantity='1' > SUBDATE(NOW), INTERVAL 8 DAY()
AND DAYOFWEEK(Price) >= 1
Mijn query (met de verschillen dikgedrukt en onderstreept):
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
boem-dikkiezaterdag 11 mei 2013 @ 11:59
Nog een vraagje over m'n localhost.

Sinds ik MAMP heb weggehaald en de standaard OSX localhost gebruikt werkt mijn .htaccess rewrite niet meer.

De .htaccess pakt hij zelf wel want mijn 404 werkt wel naar behoren.

1RewriteRule project/(.*) project.php?id=$1

Bovenstaande code werkte met MAMP wel. Als ik naar project.php?id=23 of zo ga werkt het wel, dus er gaat iets fout in die rewrite.
Juicyhilzaterdag 11 mei 2013 @ 12:19
Staat mod_rewrite wel aan? Volgens mij kan je a2enmod mod_rewrite gebruiken op je terminal
KomtTijd...zaterdag 11 mei 2013 @ 12:30
is die OSX webserver uberhaupt een apache server?
boem-dikkiezaterdag 11 mei 2013 @ 12:45
Heb ik geïnstalleerd KomtTijd. mySQL / phpMyAdmin werkt netjes en al mijn projecten e.d. werken ook naar behoren. Alleen .htaccess loopt te kutten.

En ja mod_rewrite staat wel aan. Alle confs ook nagelopen op Override e.d.
KomtTijd...zaterdag 11 mei 2013 @ 12:47
Ik bedoelde, als het een ander merk webserver is gaat een htaccess bestand natuurlijk sowieso niet werken.
Maar heb het gegoogled en het is inderdaad gewoon Apache.
papernotezaterdag 11 mei 2013 @ 12:57
Heb je alleen die RewriteRule erin staan? Je moet ook nog een RewriteEngine on opnemen en eventueel een RewriteBase.
boem-dikkiezaterdag 11 mei 2013 @ 13:12
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.
papernotezaterdag 11 mei 2013 @ 14:28
Als er fouten in een .conf bestand zitten, dan moet je dat terug kunnen vinden in een log van apache.
Juicyhilzaterdag 11 mei 2013 @ 14:31
quote:
7s.gif 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.
http://httpd.apache.org/docs/2.2/programs/apachectl.html

sudo apachectl configtest
xaban06zondag 12 mei 2013 @ 02:01
Ik ben bezig met een project wat ongeveer hetzelfde is als pricewatch/beslist/vergelijk. Dus van een artikel/product prijzen kunnen inzien van meerdere shops.

Is de volgende logisch om te doen als database structuur:
products
- id
- ean
- title
- image

prices
- id
- ean
- shop
- url
- price

Alle producten worden opgeslagen in products.
Alle prijzen van verschillende shops worden opgeslagen in prices.
Tijnzondag 12 mei 2013 @ 02:06
En in de kolom "shop" in de tabel "prices" sla je dan id's op van winkels die in je tabel "shops" staan?
xaban06zondag 12 mei 2013 @ 02:29
quote:
5s.gif 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?
Hmm, ik heb inderdaad geen tabel shops, maar is dat wel nodig?

Een voorbeeld is:
products:
- id (auto incr), dus bv: 1
- 0846835032
- samsung tv
- samsung.jpg

prices:
- id (auto incr), dus bv 3
- 0846835032
- BCC
- http://www.bcc.nl/samsung-tv.html
- 599,00

- id (auto incr), dus bv 4
- 0846835032
- Alternate
- http://www.alternate.nl/samsung-tv.html
- 549,00
Tijnzondag 12 mei 2013 @ 03:06
Alles kan natuurlijk, maar het lijkt me dat je de winkels wel een eigen tabel wil geven. Een paar redenen:

- je voorkomt fouten
- het neemt minder ruimte in beslag
- het maakt het mogelijk een overzicht per winkel te maken
- het maakt het mogelijk winkels een eigen account te geven en ze hun eigen prijzen te laten beheren
Maringozondag 12 mei 2013 @ 09:24
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.
Pakspulzondag 12 mei 2013 @ 09:55
quote:
0s.gif 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.
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.
Maringozondag 12 mei 2013 @ 10:03
quote:
0s.gif 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.
Dit inderdaad. Volgens mij had ik Tijn zn bericht ook verkeerd begrepen.
DutchErroristzondag 12 mei 2013 @ 17:49
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?
rekenwonderzondag 12 mei 2013 @ 22:18
quote:
17s.gif 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?
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.
Chandlermaandag 13 mei 2013 @ 09:10
Vraagje, hoe kan ik middels PHP uitlezen wat ik maximaal mag gebruiken aan geheugen?
Verder zou ik willen weten hoe mensen flush icm chrome werkend krijgen, dus directe output of het nou 1 teken is of 20000?
Rockfiremaandag 13 mei 2013 @ 09:13
quote:
14s.gif 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?
1ini_get("memory_limit");
boem-dikkiemaandag 13 mei 2013 @ 09:16
quote:
17s.gif 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?
Kwam dit laatst tegen. Uitleg en dergelijke over het 'boek' leek me best goed!

http://www.brandonsavage.(...)-for-php-developers/
Chandlermaandag 13 mei 2013 @ 09:17
quote:
0s.gif Op maandag 13 mei 2013 09:13 schreef Rockfire het volgende:

[..]
[ code verwijderd ]

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? :+
Crutchmaandag 13 mei 2013 @ 11:09
quote:
17s.gif 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?
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.

Maar je kan ook gewoon eerst een PDF-versie ervan Googlen en voor jezelf kijken wat je ervan vindt.
papernotemaandag 13 mei 2013 @ 11:09
quote:
0s.gif 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? :+
http://stackoverflow.com/(...)ot-working-in-chrome
Chandlermaandag 13 mei 2013 @ 11:34
Is helaas ook geen oplossing, zat zelf te denken of ik de minimale buffer van chrome kan aanpassen van bv 4096 naar 1024 oid? want na 2500 regels zie ik zowat iedere regel komen... en niet 10-20 te gelijk....
Laser.maandag 13 mei 2013 @ 11:38
Toch even wat hulp nodig met iets. :)

Ik heb een mysql tabel waar datums in een veld met de functie NOW() zijn ingevuld.
Voorheen las ik dit altijd rechtstreeks uit de database, maar nu wil ik het netter hebben staan. En ook in het NL.

Na wat puzzelen heb ik momenteel dit:

1
2
3
4
setlocale(LC_TIME, 'NL_nl'); 
setlocale(LC_ALL, 'nl_NL'); 

print date("%e-%B-%Y", strftime($row['log']));

Dan krijg ik als output: %Europe/Amsterdam-%064-%1970

Dus dat gaat niet goed. :') Het moet worden: dag-maand-jaar.
papernotemaandag 13 mei 2013 @ 11:45
Roep je ook date_default_timezone_set() aan?

En heb je überhaupt de documentatie van de date() functie gelezen?
mstxmaandag 13 mei 2013 @ 11:53
1print strftime("%e-%B-%Y", strtotime($row['log']));
Laser.maandag 13 mei 2013 @ 11:56
Thanks! :)

Ik had date_default_timezone_set niet aangeroepen. Staat nu op Amsterdam. En date() was inderdaad niet nodig om te gebruiken!
Sitethiefmaandag 13 mei 2013 @ 14:26
Wat is eigenlijk beter, of maakt het niks uit?
Dit:
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;
            }
        }   
?>
Of dit:
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;
                }
                
            }
        }
?>
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.
mstxmaandag 13 mei 2013 @ 14:32
1
2
3
4
5
6
7
<?php
 
if($productArray){
    foreach(
$productArray as $k=>$v){
        
$retArr[$v] = $getProductData?$this->getProduct($k):$k;
    }
}
?>

Als je tussen je eigen 2 opties moet kiezen vind ik de 2e veel duidelijker.
papernotemaandag 13 mei 2013 @ 14:42
quote:
0s.gif 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.
Vertraagt? Is dat überhaupt iets om je mee bezig te houden in een simpele if-else constructie? Meten = weten.
Rockfiremaandag 13 mei 2013 @ 14:55
Ik ben voor de optie van mstx. Nog een andere optie (die ik niet mooier vind dan die van mstx):
1
2
3
4
5
6
7
8
9
10
<?php
if($productArray){
    foreach(
$productArray as $k=>$v){
        
$retArr[$v] = $k;
        if(
$getProductData){
            
$retArr[$v] = $this->getProduct($k);
        }
    }
}
?>
Sitethiefmaandag 13 mei 2013 @ 14:58
quote:
14s.gif 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.
Ohjah, dies eigenlijk veel mooier, ik vergeet vaak dat er diverse shorthands zijn :D.

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.
Rockfiremaandag 13 mei 2013 @ 14:59
quote:
0s.gif Op maandag 13 mei 2013 14:58 schreef Sitethief het volgende:

[..]

Ohjah, dies eigenlijk veel mooier, ik vergeet vaak dat er diverse shorthands zijn :D.

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.
Als je er de tijd voor hebt is het helemaal niet verkeerd om kritisch naar je eigen code te kijken.
wipes66maandag 13 mei 2013 @ 15:02
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;
     }
}
?>

zo moet hij nog sneller zijn als het goed is, maar misschien iets minder goed leesbaar/duidelijk dan #2
Sitethiefmaandag 13 mei 2013 @ 15:03
quote:
14s.gif 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.
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.

Toch vind ik het veel leuker om gestructureerde, goed leesbare, becommentarieerde code te schijven, kost alleen meer tijd.
wobbelmaandag 13 mei 2013 @ 15:32
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
mstxmaandag 13 mei 2013 @ 15:35
quote:
0s.gif Op maandag 13 mei 2013 15:32 schreef wobbel het volgende:
EN/OF (dus mag ook allebei)
OR
wobbelmaandag 13 mei 2013 @ 15:37
quote:
14s.gif Op maandag 13 mei 2013 15:35 schreef mstx het volgende:

[..]

OR
Maar dan mag het toch niet allebei? Het ene of het andere
mstxmaandag 13 mei 2013 @ 15:37
quote:
0s.gif Op maandag 13 mei 2013 15:37 schreef wobbel het volgende:

[..]

Maar dan mag het toch niet allebei? Het ene of het andere
Dat is XOR.
GImaandag 13 mei 2013 @ 15:37
quote:
0s.gif 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
select * from users where ID = 5 or naam = "henk".

Dan krijg je alles met vijf, ook als het henk is :)
papernotemaandag 13 mei 2013 @ 15:45
quote:
0s.gif 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
Kun je beargumenteren waarom het sneller zou moeten zijn?
papernotemaandag 13 mei 2013 @ 15:46
quote:
3s.gif 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 :)
En ook alles dat geen vijf is, maar wel henk.
wipes66maandag 13 mei 2013 @ 15:47
quote:
5s.gif Op maandag 13 mei 2013 15:45 schreef papernote het volgende:

[..]

Kun je beargumenteren waarom het sneller zou moeten zijn?
geen if statement in de loop :P
GImaandag 13 mei 2013 @ 15:48
quote:
2s.gif Op maandag 13 mei 2013 15:46 schreef papernote het volgende:

[..]

En ook alles dat geen vijf is, maar wel henk.
Dat wil hij toch ook ?
papernotemaandag 13 mei 2013 @ 15:48
quote:
0s.gif Op maandag 13 mei 2013 15:47 schreef wipes66 het volgende:

[..]

geen if statement in de loop :P
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.
papernotemaandag 13 mei 2013 @ 15:51
quote:
0s.gif 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
Die tweede foreach kun je trouwens vervangen door een array_flip().
wipes66maandag 13 mei 2013 @ 16:07
quote:
2s.gif 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.
je hebt helemaal gelijk :P ik heb het voor de grap eens getest en het is zelf iets langzamer :@

edit: iets uitgebreider getest en er is 0,0 verschil.

[ Bericht 3% gewijzigd door wipes66 op 13-05-2013 16:12:57 ]
Sitethiefmaandag 13 mei 2013 @ 16:32
quote:
3s.gif Op maandag 13 mei 2013 15:51 schreef papernote het volgende:

[..]

Die tweede foreach kun je trouwens vervangen door een array_flip().
Wow, nice :D.
Tijnwoensdag 15 mei 2013 @ 15:02
Is er een handigere manier om de mogelijke waarden van een kolom van het type "set" terug te krijgen dan het uit het resultaat van "SHOW COLUMNS FROM `table`" te peuteren?
rekenwonderwoensdag 15 mei 2013 @ 19:39
Wat is handiger? Je kan in de tabel information_schema.columns gaan purken, maar volgens mij komt het dan in het zelfde onhandelbare formaat.
Tijnwoensdag 15 mei 2013 @ 19:51
quote:
0s.gif Op woensdag 15 mei 2013 19:39 schreef rekenwonder het volgende:
Wat is handiger?
Iets waar gewoon een lijstje uitkomt ipv een gare array die ik nog moet parsen zou leuk zijn. Maar het is er niet he? ;(
Lightwoensdag 15 mei 2013 @ 20:47
quote:
2s.gif 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? ;(
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.
Chandlerwoensdag 15 mei 2013 @ 23:30
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
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($foundUrl07)) != "http://")
    {
        
$p parse_url($foundUrl);
        if (!isset(
$p['host']))
        {
            
$path '';
            if (
strpos($foundUrl"../") > -1)
            {
                
$dotsCount 0;
                while (
strpos($foundUrl"../") > -1)
                {
                    
$foundUrl substr($foundUrl3);
                    
$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($foundUrl2);
            }
            elseif (
substr($foundUrl01) == "/")
            {
                
$foundUrl substr($foundUrl1);
            }
            
            
$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>';

?>

uitkomst
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
Ik hoor graag wat jullie er van vinden...
slacker_nldonderdag 16 mei 2013 @ 09:31
quote:
5s.gif 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...

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.
mstxdonderdag 16 mei 2013 @ 09:33
quote:
Volgens mij klopt die niet.
Chandlerdonderdag 16 mei 2013 @ 09:57
quote:
0s.gif 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.
Het gaat om parsen van links in een document ;)

quote:
6s.gif Op donderdag 16 mei 2013 09:33 schreef mstx het volgende:
Volgens mij klopt die niet.
Je hebt gelijk *) gisteren echt overheen gekeken, gelijk even proberen te fixen, maar verder nog tips? of is deze dirty manier goed genoeg? :+

Update:
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($foundUrl07)) != "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($foundUrl3);
                    
$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($foundUrl2);
            }
            
// / is verwijzing voor root van domein.
            
elseif (substr($foundUrl01) == "/")
            {
                
// verwijder eerste /
                
$foundUrl substr($foundUrl1);
            }
            
            
// 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>';

?>
-kleine edit toevoeging comments-

Uitkomst (alleen het gefixte gedeelte):
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


[ Bericht 61% gewijzigd door Chandler op 16-05-2013 10:04:17 ]
slacker_nldonderdag 16 mei 2013 @ 10:56
quote:
0s.gif Op donderdag 16 mei 2013 09:57 schreef Chandler het volgende:

Het gaat om parsen van links in een document ;)
Dus? Ahh, kutzooit, readlink -m is niet geimplementeerd in php. Dus..
Tijndonderdag 16 mei 2013 @ 11:02
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.
Chandlerdonderdag 16 mei 2013 @ 11:09
quote:
5s.gif 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.
Nee maar is wel gemakkelijk om het zo in een test case te verwerken zodat ik deze gemakkelijk kan aanpassen ;)
slacker_nldonderdag 16 mei 2013 @ 11:23
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"" ,02);
        return 
checkUrl("$iets$baseurl"$foundUrl);
    }
    elseif (
preg_match('/^\.\.\//'$foundUrl)) {
        
$baseurl preg_replace('/\/\w+\/?$/'''$baseurl);
        
$foundUrl substr_replace($foundUrl"" 03);
        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');


[ Bericht 31% gewijzigd door slacker_nl op 16-05-2013 11:43:25 (hehe, stomme removal van een returnvalue.. ) ]
Chandlerdonderdag 16 mei 2013 @ 18:10
Ook leuk :@
slacker_nldonderdag 16 mei 2013 @ 19:02
SPOILER: nog kekker
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
<?php

error_reporting
(E_ALL);

function 
checkUrl($currentUrl$foundUrl) {

    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);
        
$foundUrl substr_replace($foundUrl"" ,01);
        return 
checkUrl("$iets$baseurl"$foundUrl);
    }
    elseif (
preg_match('/^\.\//'$foundUrl)) {
        
$baseurl preg_replace('/\/$/'''$baseurl);
        
$foundUrl substr_replace($foundUrl"" ,02);
        return 
checkUrl("$iets$baseurl"$foundUrl);
    }
    elseif (
preg_match('/^\.\.\//'$foundUrl)) {
        
$baseurl preg_replace('/\/\w+\/?$/'''$baseurl);
        
$foundUrl substr_replace($foundUrl"" 03);
        return 
checkUrl("$iets$baseurl"$foundUrl);
    }
    else {
        if (!
$foundUrl) { 
            
$url $currentUrl;
        }
        else {
            
$currentUrl preg_replace('/\/?$/'''$currentUrl);
            
$url "$currentUrl/$foundUrl";
        }

        
$matches;
        if (
preg_match('/(.+\/[^\.]+)(\.{1,2}\/.+)/'$url$matches)) { 
            return 
checkUrl($matches[1], $matches[2]);
        }
        return 
$url;
    }
}

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"), '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');
is(checkUrl("http://x.nl/deep/shizzle/cabizzle/mazizlle"'/x.php'), 'http://x.nl/x.php''absolute path with dir ending with /');
is(checkUrl("http://x.nl/deep/shizzle/cabizzle/mazizlle"'../.././x.php'), 'http://x.nl/deep/shizzle/x.php''absolute path with dir ending with /');
is(checkUrl("http://x.nl/deep/shizzle/cabizzle/mazizlle"'../../deep/../../deep/x.php'), 'http://x.nl/deep/deep/x.php''absolute path with dir ending with /');
is(checkUrl("http://x.nl//deep/shizzle/cabizzle/mazizller""../../../deep/../../deep/x.php"), 'http://x.nl/deep/x.php''absolute path with dir ending with /');
is(checkUrl("http://x.nl//deep/shizzle/cabizzle/mazizller""/.././dd/../../../deep/"), 'http://x.nl/deep/''absolute path with dir ending with /');
is(checkUrl("http://x.nl//deep/shizzle/cabizzle/mazizller/../""/.././dd/../../../deep/"), 'http://x.nl/deep/''absolute path with dir ending with /');
slacker_nldonderdag 16 mei 2013 @ 19:19
quote:
0s.gif 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.
array_map gebruiken?
1
2
3
if (productdata) {
    array_map(this->getProduct, $je_product);
Chandlerdonderdag 16 mei 2013 @ 19:22
quote:
0s.gif Op donderdag 16 mei 2013 19:02 schreef slacker_nl het volgende:
SPOILER: nog kekker
[ code verwijderd ]
Tssss :P moet niet gekker worden ;)
papernotedonderdag 16 mei 2013 @ 20:06
quote:
0s.gif Op donderdag 16 mei 2013 19:19 schreef slacker_nl het volgende:

[..]

array_map gebruiken?
[ code verwijderd ]

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.
slacker_nldonderdag 16 mei 2013 @ 20:25
quote:
2s.gif 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.
Works for me:

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
)

Ahh. Ik zie. Dat gaat idd niet.

[ Bericht 12% gewijzigd door slacker_nl op 16-05-2013 20:43:20 ]
Chandlervrijdag 17 mei 2013 @ 10:52
Heeft iemand een oplossing voor het volgende? stel een script maakt gebruik van de functie ignore_user_abort(true); maar wil het script toch stoppen wanneer ik dat zelf graag wil (wat voor reden dan ook).

Ik heb geprobeerd om dit op te lossen met een cookie/sessie maar helaas geen oplossing.
test case
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();
    }
}

?>

en de manier dat ik dacht om te cancelen

1
2
3
4
5
6
7
<?php

session_start
();

$_SESSION['test'] = true;

?>

maar dat gaat ook niet werken, op zich zou ik per seconde een query naar een database kunnen doen en daar dan een tabel kunnen gebruiken om te cancelen maar hoop op een andere gemakkelijke manier..

Anyone?
slacker_nlvrijdag 17 mei 2013 @ 11:07
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..
Chandlervrijdag 17 mei 2013 @ 11:18
quote:
0s.gif 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..
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! *)
mstxvrijdag 17 mei 2013 @ 11:31
De $_SESSION variabele wordt aan het begin van het script ingesteld en kan niet door een ander script aangepast worden.

Dan zul je het moeten doen via een bestandje dat je steeds uitleest of via een memcached/apc variabele oid.

edit: misschien werkt het ook gewoon al als je session_destroy() en session_start() weer aanroept.
Chandlervrijdag 17 mei 2013 @ 12:00
quote:
edit: misschien werkt het ook gewoon al als je session_destroy() en session_start() weer aanroept.
Maak van misschien maar, het werkt! LOL

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();    
}

?>

met als cancel
1
2
3
4
<?php
session_start
();
$_SESSION['test'] = true;
?>

:) maar goed, dit is natuurlijk alleen maar een oplossing voor het scherm dat je open hebt, en als je deze sluit heeft het volgens mij geen effect... wel leuk probleem om mee te spelen :7

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?!
mstxvrijdag 17 mei 2013 @ 12:23
quote:
0s.gif 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?!
Daar zou ik dan een APC variabele voor gebruiken, die staat in het werkgeheugen. :)
urselvrijdag 17 mei 2013 @ 12:29
Als ik even op de pagina van php kijk zie ik in het commentaar dit stukje staan:

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); 
?>

Dan kan je toch als het proces start een waarde naar je database wegschrijven. En deze waarde elke keer ophalen? Wil je hem killen zet je de waarde op 0 en in de while check je hierop.
Chandlervrijdag 17 mei 2013 @ 12:30
apc is een leuke en ja ook een connectie naar de database is mogelijk, maar wilde gewoon alle mogelijkheden testen ;)
xaban06vrijdag 17 mei 2013 @ 14:07
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>';
  }
}
?>

Waarom krijg ik geen IP FOUND te zien :? Alleen maar IP NOT FOUND.
Maringovrijdag 17 mei 2013 @ 14:09
quote:
0s.gif 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.
Omdat je datatypes niet gelijk zijn. Je vergelijkt 1.2.3.4 met '1.2.3.4'.
slacker_nlvrijdag 17 mei 2013 @ 14:12
quote:
2s.gif 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'.
Beide zijn strings, dus het moet goed zijn.
Chandlervrijdag 17 mei 2013 @ 14:13
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>';
  }
}
?>

Werkt dus is er toch iets niet goed ;)
rekenwondervrijdag 17 mei 2013 @ 14:13
Maar == is toch geen type-safe comparison?
rekenwondervrijdag 17 mei 2013 @ 14:14
Waarom gebruik je niet array_search() trouwens?
slacker_nlvrijdag 17 mei 2013 @ 14:15
quote:
0s.gif 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.
maar doe zoiets:

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)
}
?>
boem-dikkievrijdag 17 mei 2013 @ 14:16
Werkt prima als ik hem zo uitvoer:

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>';
  }
}
?>
mstxvrijdag 17 mei 2013 @ 14:16
quote:
0s.gif Op vrijdag 17 mei 2013 14:13 schreef rekenwonder het volgende:
Maar == is toch geen type-safe comparison?
Beide zijn sowieso strings dus niet nodig om ook het type te controleren.
boem-dikkievrijdag 17 mei 2013 @ 14:16
Oh te laat. :')
Chandlervrijdag 17 mei 2013 @ 14:18
quote:
14s.gif Op vrijdag 17 mei 2013 14:16 schreef boem-dikkie het volgende:
Oh te laat. :')
:@ *) :+ :P
xaban06vrijdag 17 mei 2013 @ 14:49
Volgens mij ben ik gek of ik doe iets heel erg fout.

/edit
Opgelost, thanks Chandler.
Chandlervrijdag 17 mei 2013 @ 14:51
probeer eens trim om het ip adres heen?

dus trim($IP) ;)
xaban06vrijdag 17 mei 2013 @ 14:51
quote:
0s.gif Op vrijdag 17 mei 2013 14:14 schreef rekenwonder het volgende:
Waarom gebruik je niet array_search() trouwens?
Omdat ik die functie niet ken :) ..nu wel overigens
xaban06vrijdag 17 mei 2013 @ 14:53
quote:
0s.gif Op vrijdag 17 mei 2013 14:51 schreef Chandler het volgende:
probeer eens trim om het ip adres heen?

dus trim($IP) ;)
:*

Nu even kijken wat trim precies doet :)
Tijnvrijdag 17 mei 2013 @ 15:01
quote:
0s.gif Op vrijdag 17 mei 2013 14:53 schreef xaban06 het volgende:

[..]

Nu even kijken wat trim precies doet :)
Spaties en andere onzin van de voor- en achterkant van een string afhalen.
Chandlervrijdag 17 mei 2013 @ 15:04
quote:
0s.gif 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.
You are so (ontiegelijk) welkom! *)

donaties mogen naar anti brein stichting :+
Lightvrijdag 17 mei 2013 @ 23:17
quote:
0s.gif Op vrijdag 17 mei 2013 14:14 schreef rekenwonder het volgende:
Waarom gebruik je niet array_search() trouwens?
Ik zou zelf in_array() aanraden.
rekenwondervrijdag 17 mei 2013 @ 23:58
quote:
0s.gif Op vrijdag 17 mei 2013 23:17 schreef Light het volgende:

[..]

Ik zou zelf in_array() aanraden.
papernotezaterdag 18 mei 2013 @ 09:20
_O_ APC _O_
DutchErroristzaterdag 18 mei 2013 @ 21:11
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);
?>

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.
mstxzaterdag 18 mei 2013 @ 21:43
Dan kun je checken of de query goed is uitgevoerd. Maar aangezien er ook al "or die" achter staat is het nutteloos.

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,
:?
Pakspulzaterdag 18 mei 2013 @ 21:57
quote:
17s.gif 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.
$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.

De variabel $query (wat wel een string is) wordt samen gebruikt met het object in de functie mysqli_query. Deze functie, zoals mstx ook aangeeft, geeft een boolean of een object terug. Het is handig om http://www.php.net te gebruiken om kennis te maken met de functies en te zien wat er in moet en wat er uit komt.

Daarnaast als je de string $query vult, waar komen deze variabelen allemaal vandaan, want dit kan een groot gevaar vormen voor je website.
slacker_nlzaterdag 18 mei 2013 @ 23:50
quote:
17s.gif 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.
mscholzondag 19 mei 2013 @ 00:02
quote:
0s.gif 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.
waarom?
Tijnzondag 19 mei 2013 @ 00:06
quote:
0s.gif Op zondag 19 mei 2013 00:02 schreef mschol het volgende:

[..]

waarom?
Makkelijkere API, zeker voor beginners.
mscholzondag 19 mei 2013 @ 00:09
quote:
2s.gif Op zondag 19 mei 2013 00:06 schreef Tijn het volgende:

[..]

Makkelijkere API, zeker voor beginners.
oke.. :)
slacker_nlzondag 19 mei 2013 @ 00:13
quote:
0s.gif Op zondag 19 mei 2013 00:02 schreef mschol het volgende:

[..]

waarom?
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.
mscholzondag 19 mei 2013 @ 00:16
quote:
0s.gif 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.
ik heb werkelijk nog nooit PDO gebruikt.. (en tot een jaar terug ofzo niet eens wat over gehoord...)
Tijnzondag 19 mei 2013 @ 00:21
quote:
0s.gif 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...)
Het wordt al een tijdje door PHP zelf aangeraden (samen met mysqli): http://nl1.php.net/manual/en/mysqlinfo.api.choosing.php
slacker_nlzondag 19 mei 2013 @ 00:22
quote:
0s.gif 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..
mscholzondag 19 mei 2013 @ 00:27
quote:
14s.gif 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
aha ^O^

ik hobby er hoofdzakelijk mee, dus voor mij voldoet mysqli nog wel, wellicht stap ik in de toekomst eens over op pdo :P
DutchErroristzondag 19 mei 2013 @ 00:31
quote:
0s.gif 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.
Naaah ik volg eerst het boek maar eens.
papernotezondag 19 mei 2013 @ 12:24
quote:
14s.gif Op zondag 19 mei 2013 00:31 schreef DutchErrorist het volgende:

[..]

Naaah ik volg eerst het boek maar eens.
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.
DutchErroristzondag 19 mei 2013 @ 12:27
quote:
2s.gif 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 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.
Tijnzondag 19 mei 2013 @ 12:41
quote:
17s.gif 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.
Ik zou zeggen dat PDO juist de basis is en je daarna eventueel mysqli eens zou kunnen bekijken voor geavanceerdere dingen.
DutchErroristzondag 19 mei 2013 @ 12:43
quote:
2s.gif 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.
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.
Tijnzondag 19 mei 2013 @ 12:44
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.
papernotezondag 19 mei 2013 @ 12:48
quote:
14s.gif 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.
Maar niet de comments bij de documentatie, daar moet je soms wel om huilen.
papernotezondag 19 mei 2013 @ 12:48
quote:
17s.gif 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.
Waar ik naar linkte is geen PDO hè.
DutchErroristzondag 19 mei 2013 @ 12:56
quote:
3s.gif Op zondag 19 mei 2013 12:48 schreef papernote het volgende:

[..]

Waar ik naar linkte is geen PDO hè.
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.
papernotezondag 19 mei 2013 @ 13:03
Hoe oud is je boek?
Tijnzondag 19 mei 2013 @ 13:09
quote:
17s.gif 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.
Kun je al programmeren in andere talen?
DutchErroristzondag 19 mei 2013 @ 13:59
quote:
5s.gif Op zondag 19 mei 2013 13:03 schreef papernote het volgende:
Hoe oud is je boek?
Uh het is Head first php & mysql.

quote:
2s.gif Op zondag 19 mei 2013 13:09 schreef Tijn het volgende:

[..]

Kun je al programmeren in andere talen?
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.
Tijnzondag 19 mei 2013 @ 14:01
quote:
17s.gif Op zondag 19 mei 2013 13:59 schreef DutchErrorist het volgende:

[..]

Nee
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.
papernotezondag 19 mei 2013 @ 14:02
quote:
17s.gif Op zondag 19 mei 2013 13:59 schreef DutchErrorist het volgende:

[..]

Uh het is Head first php & mysql.
Head first het raam uit met dat boek. Het is uit 2008!! Dat is vijf jaar oud!
DutchErroristzondag 19 mei 2013 @ 14:15
quote:
11s.gif 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!
Nee :D 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:
2s.gif 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.
Komt wel goed ;)
Tijnzondag 19 mei 2013 @ 14:22
quote:
10s.gif Op zondag 19 mei 2013 14:15 schreef DutchErrorist het volgende:

[..]

Het is handig om de basics te begrijpen.
Wat je nu aan het doen vent heeft niks met de basics te maken.
Chandlermaandag 20 mei 2013 @ 09:08
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
papernotemaandag 20 mei 2013 @ 09:19
quote:
0s.gif 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
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.
Chandlermaandag 20 mei 2013 @ 09:23
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 :)
slacker_nlmaandag 20 mei 2013 @ 09:26
quote:
2s.gif 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.
Idd, bash of perl :P
Chandlermaandag 20 mei 2013 @ 09:28
quote:
0s.gif Op maandag 20 mei 2013 09:26 schreef slacker_nl het volgende:

[..]

Idd, bash of perl :P
Nogmaals, daar heb ik geen kaas van gegeten :P 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.

Het scriptje doet nu al precies wat het moet doen alleen nog op basis van het aanroepen en het lekker laten lopen met user_ignore_abort... ( hehe ) en kan alleen afgesloten worden als daarvoor een instructie van de database afkomt of als het process is voltooid.
papernotemaandag 20 mei 2013 @ 09:31
quote:
15s.gif 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 :)
http://symcbean.blogspot.(...)nning-processes.html

edit: het gaat hier over long-running en nog niet eens infinite-running scripts, maar een aantal nadelen staan genoemd. Natuurlijk kun je PHP vast misbruiken om eeuwig te blijven draaien, zul je het af-en-toe eens moeten killen om resources vrij te geven en dergelijke, maar het zal niet lekker gaan werken. Een programmeertaal bedoelt voor het maken van applicaties is een betere keuze.
Chandlermaandag 20 mei 2013 @ 09:38
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..

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! *)
slacker_nlmaandag 20 mei 2013 @ 09:55
quote:
0s.gif Op maandag 20 mei 2013 09:28 schreef Chandler het volgende:

Nogmaals, daar heb ik geen kaas van gegeten :P 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.
Dan leer je het toch? Je kan PHP, dan kom je talen tegen waar het allemaal net iets logischer is.
Lightmaandag 20 mei 2013 @ 10:21
quote:
0s.gif 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..
Totdat je ergens iets vergeet.
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! *)
En je infinite-running script zo af en toe via een cronjob aanzetten ipv continu laten draaien is geen optie?
papernotemaandag 20 mei 2013 @ 11:03
quote:
0s.gif Op maandag 20 mei 2013 10:21 schreef Light het volgende:

[..]

Totdat je ergens iets vergeet.
Of nog erger: totdat PHP iets vergeet en je er überhaupt niets aan kunt doen.
Chandlermaandag 20 mei 2013 @ 12:30
quote:
0s.gif 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.
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:
0s.gif Op maandag 20 mei 2013 10:21 schreef Light het volgende:
Totdat je ergens iets vergeet.
Daar kom je snel genoeg achter met xdebug ;)
quote:
En je infinite-running script zo af en toe via een cronjob aanzetten ipv continu laten draaien is geen optie?
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:
2s.gif 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.
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).

:)
xaban06maandag 20 mei 2013 @ 14:43
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.
Chandlermaandag 20 mei 2013 @ 17:12
quote:
0s.gif 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.
Inderdaad een goed idee! maar dan heb je geen pid nodig hoor ;)

voorbeeld op: http://stackoverflow.com/(...)isnt-already-running

En herstarten lijkt me niet handig tenzij ik zeker weet dat hij niet draait, straks draaien er 10 instanties door elkaar... ook niet echt handig :+
Tijnmaandag 20 mei 2013 @ 17:20
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?
Chandlermaandag 20 mei 2013 @ 17:30
quote:
5s.gif 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?
Daar ben ik het dan ook wel mee eens! *)

Sowieso is het natuurlijk nooit slecht om af en toe even een machine op adem te laten komen. Eventueel handig om tabellen te optimaliseren...
slacker_nlmaandag 20 mei 2013 @ 17:35
@Chandler:

http://pear.php.net/package/System_Daemon/docs
Chandlermaandag 20 mei 2013 @ 17:48
Leuk, ben het aan het doornemen... child process voor php scriptjes *) nifty

* Unix only grrrr :+
xaban06dinsdag 21 mei 2013 @ 03:17
Laat ook maar :)

[ Bericht 98% gewijzigd door xaban06 op 21-05-2013 04:07:14 ]
Chandlerdinsdag 21 mei 2013 @ 19:04
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?

[ Bericht 59% gewijzigd door Chandler op 21-05-2013 19:36:51 ]
Tijndinsdag 21 mei 2013 @ 19:36
Wat is een gebruiker in deze context?
Chandlerdinsdag 21 mei 2013 @ 19:37
quote:
5s.gif Op dinsdag 21 mei 2013 19:36 schreef Tijn het volgende:
Wat is een gebruiker in deze context?
Een gebruiker is iemand die een job invoert op de site, zie vorige bewerkte post... hopelijk een stuk duidelijker.
boem-dikkiedinsdag 21 mei 2013 @ 19:38
Ik snap echt helemaal niks van je verhaal. :')
Chandlerdinsdag 21 mei 2013 @ 19:41
quote:
10s.gif Op dinsdag 21 mei 2013 19:38 schreef boem-dikkie het volgende:
Ik snap echt helemaal niks van je verhaal. :')
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 krijgt :+
Crutchdinsdag 21 mei 2013 @ 19:48
quote:
0s.gif 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?
Waarom doe je alles in 1 table? Da's toch niet meer bij te houden?
Chandlerdinsdag 21 mei 2013 @ 19:50
Waarom niet? in deze tabel staan alleen maar het volgende

id, project_id, url, ref_id, last_visit :)

That's all
Crutchdinsdag 21 mei 2013 @ 19:53
Dus ref_id is de id met de url van de pagina waarin de url gevonden is?
Oftewel z'n 'parent'-pagina?
Crutchdinsdag 21 mei 2013 @ 19:57
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.
Chandlerdinsdag 21 mei 2013 @ 20:00
quote:
0s.gif 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?
Correct :)

quote:
0s.gif 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.
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..
Crutchdinsdag 21 mei 2013 @ 20:08
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.
Chandlerdinsdag 21 mei 2013 @ 20:13
quote:
0s.gif 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.
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...
Crutchdinsdag 21 mei 2013 @ 20:21
quote:
0s.gif 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...
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.
Chandlerwoensdag 22 mei 2013 @ 07:52
quote:
0s.gif 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.
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...

GlowMouse? Catch22? en anderen? jullie ideeen?
Maringowoensdag 22 mei 2013 @ 08:48
Wat perspectief is misschien ook handig. Om hoeveel websites gaat het? Hoeveel user? Hoe groot zijn de websites?

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.
Chandlerwoensdag 22 mei 2013 @ 09:10
quote:
0s.gif 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?
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? :D

Maar uit de respons blijkt dat er blijkbaar niemand hier gewerkt heeft aan zo'n systeem :@ :+

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.
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;


Even een grof voorbeeld; gebruiker B die dus zorgt dat andere websites ERG lang moeten wachten voordat ze klaar.

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)

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! *)

[ Bericht 19% gewijzigd door Chandler op 22-05-2013 09:38:03 ]
slacker_nlwoensdag 22 mei 2013 @ 09:38
quote:
0s.gif 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? :D

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! *)
Ik zou gewoon queue's maken. Je hebt verschillende q-runners die een zooi links uitlezen. Onafhankelijk vd gebruiker.
Chandlerwoensdag 22 mei 2013 @ 09:41
quote:
0s.gif 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.
Kun je dat iets breder uitleggen? q-runners? zal eens googlen! *)
Tijnwoensdag 22 mei 2013 @ 09:49
quote:
0s.gif 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..
Waarom zou dat eerlijker zijn? Gewoon first in, first out lijkt me juist het toonbeeld van eerlijkheid.
slacker_nlwoensdag 22 mei 2013 @ 09:53
quote:
0s.gif Op woensdag 22 mei 2013 09:41 schreef Chandler het volgende:

[..]

Kun je dat iets breder uitleggen? q-runners? zal eens googlen! *)
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.
Chandlerwoensdag 22 mei 2013 @ 10:38
quote:
5s.gif 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.
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..

Zat zelf te denken aan draaiende processen een time mee te geven en dan steeds een url processen van de langst wachtende oid...?
Maringowoensdag 22 mei 2013 @ 11:52
Dus eigenlijk een multidimensionale array zoals dit:

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"
        )
    )
);

En dan nadat user 1 klaar is met de eerste website wordt ie achteraan gezet en wordt user2 de eerste volgende etc etc.

Dan worden de websites in deze volgorde verwerkt:
website1a
website2a
website3a
website1b
website3b
website1c

Dat bedoel je toch?
-Datdus-woensdag 22 mei 2013 @ 12:21
Node.js _O_