[PHP] Mag dit? (include buiten if/else)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
Ditmaal geen vraag om een probleem of verzoek om een oplossing, maar een vraag om een bevestiging.

Mag ik een include buiten een IF zetten? Kan de include (sendsms.php) dan het $nummer, $onderwerp etc. een paar IF's dieper ophalen?

Ik weet dat het andersom wel mag, dat een dieper gelegen IF een $ uit een hoger gelegen IF kan ophalen, maar ik doe het nu net andersom.

Ik heb het wel getest en het werkt, maar weet niet of het officieel mag. :$

PHP:
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
        $nummer = "";

        if (stripos($body, "0701234") !== false) {

            $onderwerp = "ONDERWERP EEN";

            if (
                stripos($melding, "AMSTERDAM") !== false
            )
            {
                $nummer .= "0611111111";
            }

        } else {

            $onderwerp = "ONDERWERP TWEE";

            if (
                stripos($melding, "ROTTERDAM") !== false
            )
            {
                $nummer .= "0622222222";
            }

            if (
                stripos($melding, "UTRECHT") !== false
            )
            {
                $nummer .= "0633333333";
            }
        }

        if (!empty($nummer)) {
            $nummers = implode(", ", str_split($nummer, 10));
            include("sendsms.php");
        }


Als dit officieel mag is mijn code eindelijk helemaal klaar.

Acties:
  • 0 Henk 'm!

  • Tys
  • Registratie: Januari 2003
  • Laatst online: 21:53

Tys

Uh, ja dat mag .. Als er al restricties op zitten, dan mept PHP je die vanzelf om je oren.

[ Voor 139% gewijzigd door Tys op 17-07-2009 08:05 ]

My flight statistics: (444.803km in 120 flights) Next trips: Rome (Italy)


Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 15-09 09:15

Spockz

Live and Let Live

Misschien is het handig om de volgende pagina eens even door te nemen http://nl3.php.net/manual/en/language.variables.scope.php. Als je een include doet van een andere php file dan zal de scop van dat bestand beginnen op hetzelfde niveau als waar je de include vandaan gedaan hebt.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Een veel overzichtelijker alternatief is om die include bovenaan je pagina op te nemen, in de include alleen functies te definieren en op de plaats waar nu een include staat een functiecall, met de benodigde argumenten, te doen.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
Spockz schreef op vrijdag 17 juli 2009 @ 08:08:
Misschien is het handig om de volgende pagina eens even door te nemen http://nl3.php.net/manual/en/language.variables.scope.php. Als je een include doet van een andere php file dan zal de scop van dat bestand beginnen op hetzelfde niveau als waar je de include vandaan gedaan hebt.
Betekend dat de opbouw van mijn code niet correct is?
Confusion schreef op vrijdag 17 juli 2009 @ 08:10:
Een veel overzichtelijker alternatief is om die include bovenaan je pagina op te nemen, in de include alleen functies te definieren en op de plaats waar nu een include staat een functiecall, met de benodigde argumenten, te doen.
De include mag pas werken als er iets in $nummer staat. Voordat dat bepaald kan worden, is het script al 180 regels verder.

De code is uitgebreid getest en volledig functioneel, maar wil toch zeker weten dat de (specifiek in de startpost afgebeelde) code correct is. Dit om verrassingen in de toekomst te voorkomen.

Zo werkt .= ook als er niets vóór staat, maar heb toch een veiligheid ingebouwd door te beginnen met een lege $"".

[ Voor 46% gewijzigd door F4T4L_3RR0R op 17-07-2009 08:20 ]


Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
edit: dubbel

[ Voor 95% gewijzigd door F4T4L_3RR0R op 17-07-2009 08:16 ]


Acties:
  • 0 Henk 'm!

  • pingwings
  • Registratie: Mei 2009
  • Laatst online: 01-06 00:15
Dan nog, kan je beter de content die je aanspreekt in je include beter in een functie zetten met als parameter $nummer, vervolgens controleer je in die functie ook nog of die niet leeg is (iets met requests van gebruikers naar jouw include vanaf hun browser..)

Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
pingwings schreef op vrijdag 17 juli 2009 @ 08:21:
Dan nog, kan je beter de content die je aanspreekt in je include beter in een functie zetten met als parameter $nummer, vervolgens controleer je in die functie ook nog of die niet leeg is (iets met requests van gebruikers naar jouw include vanaf hun browser..)
Het script is nou al (voor mij als newbie dan) complex. Heeft me bloed, zweet en tranen gekost. Ben blij dat het werkt, maar wil wel zeker weten dat het blijft werken.

De content is continu variërend en ik wil simpel telefoonnummers toe kunnen voegen door " $nummer .= "0612345678";" onder een if/stripos te plaatsen.

De niet in dit topic afgebeelde functionaliteiten boven het afgebeelde if/else gedeelte wil ik om die reden dan ook onaangetast laten.

[ Voor 10% gewijzigd door F4T4L_3RR0R op 17-07-2009 08:28 ]


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

F4T4L_3RR0R schreef op vrijdag 17 juli 2009 @ 08:15:
De include mag pas werken als er iets in $nummer staat.
Een functie wordt pas uitgevoerd als je hem aanroept. Niet als hij geladen wordt.
De code is uitgebreid getest en volledig functioneel, [..]
Maar ongebruikelijk, omdat het rechtstreeks includen van blokken code, in plaats van functies, de zaak minder overzichtelijk maakt. Uiteindelijk ga je daar een keer tegenaan lopen, bijvoorbeeld omdat je een variabele in dit deel hernoemt en het vergeet te hernoemen in de include. Bij een functiecall heb je dat probleem niet: dan kan je hier wijzigen wat je wilt, zonder dat in de include dingen gewijzigd hoeven te worden.

Aan de naam van de include 'sendsms.php' is al te zien dat het eigenlijk om een functie gaat die zo zou moeten heten. Includes staan conceptueel een niveau boven functies/classes etc: ze zijn er om die te kunnen verzamelen onder een naam.

[ Voor 37% gewijzigd door Confusion op 17-07-2009 08:30 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

Als je voorbeeld 6 had bekeken:
http://nl2.php.net/function.include

Dan had je gezien dat het gewoon kan/mag. Echter is het voor derden niet zo goed leesbaar...

Voorbeeldje
PHP:
1
2
3
4
<?php
if(file_exsists('themes/'.$theme.'/index.php'))
   include('themes/'.$theme.'/index.php');
?>


Edit: Confusion :w

[ Voor 10% gewijzigd door Matis op 17-07-2009 08:33 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
Confusion schreef op vrijdag 17 juli 2009 @ 08:27:
[...]

Een functie wordt pas uitgevoerd als je hem aanroept. Niet als hij geladen wordt.


[...]

Maar ongebruikelijk, omdat het rechtstreeks includen van blokken code, in plaats van functies, de zaak minder overzichtelijk maakt. Uiteindelijk ga je daar een keer tegenaan lopen, bijvoorbeeld omdat je een variabele in dit deel hernoemt en het vergeet te hernoemen in de include. Bij een functiecall heb je dat probleem niet.
Hij included alleen telefoonnummer(s) ($nummer) van de IF's die waar zijn. Dan kijkt hij wat het bijbehorende onderwerp/afzender moet zijn ($onderwerp) en de inhoud van het SMS bericht ($bericht, staat net een regel boven de afgebeelde code).
Aan de naam van de include 'sendsms.php' is al te zien dat het eigenlijk om een functie gaat die zo zou moeten heten. Includes staan conceptueel een niveau boven functies/classes etc: ze zijn er om die te kunnen verzamelen onder een naam.
In sendsms.php vul ik (vaste waardes) mijn gebruikersnaam en wachtwoord in, alsmede de te gebruiken sms-gateway en nog een paar gegevens. Dan heeft hij alleen nog $nummers, $onderwerp en $bericht nodig. :)

[ Voor 22% gewijzigd door F4T4L_3RR0R op 17-07-2009 08:35 ]


Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
Matis schreef op vrijdag 17 juli 2009 @ 08:29:
Als je voorbeeld 6 had bekeken:
http://nl2.php.net/function.include

Dan had je gezien dat het gewoon kan/mag. Echter is het voor derden niet zo goed leesbaar...

Voorbeeldje
PHP:
1
2
3
4
<?php
if(file_exsists('themes/'.$theme.'/index.php'))
   include('themes/'.$theme.'/index.php');
?>
Dan is denk ik nu wel duidelijk dat de code van mij geen fouten kan opwekken of problemen kan veroorzaken. Is precies dat stukje zekerheid wat ik voor mijn gemoedsrust wilde hebben. :Y

Ik vind het scriptje geslaagd, mede door hulp van Tweakers in andere (inmiddels gesloten) topics van mij.

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Stel dat je nu bovenaan je sendsms.php toevoegt "function send_sms($nummer, $onderwerp, $bericht) { "
en onderaan een brace sluiten.

Vervolgens verplaats je die include naar boven in het bestand en zet je op de plaats van de huidige include
"send_sms($nummer, $onderwerp, $bericht)". De constante username en wachtwoord laat je nog even in die functie staan. Dan heb je de twee stukken code van elkaar ontkoppeld en kan je de functie send_sms bijvoorbeeld ook aanroepen vanuit code waar het telefoonnummer 'number' heet. Je zet jezelf nu vast op de variabelenamen in de include, terwijl het heel makkelijk te ontkoppelen is. Daar ga je vast nog een keer plezier van hebben.

[ Voor 6% gewijzigd door Confusion op 17-07-2009 08:59 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
Bedankt voor de tip!

Maar moet helaas mededelen dat dit script echt af is nu. Ik kan eventueel wel makkelijk een extra stripos filter instellen als een kennis of iemand anders ook bepaalde berichten wilt ontvangen op zijn of haar telefoon. Ik had eerst een if en elseif, maar dan stopt hij als if waar is. Had weer daarvoor if en if achter elkaar met onder elke if een include, maar dat gaf een foutmelding als beide stripos filters waar waren. Heb dat opgelost door de nummers in een array te zetten en via dat array het bericht te verzenden met één include.

Dit is nu een typische "set it and forget it" scriptje. Heb wel meer van dat soort scriptjes die al jaaaaaaren draaien. Zijn toen naar PHP 4 maatstaven ontworpen. Destijds is 80% van het werk door anderen gedaan, maar heb daar niks van geleerd. Nu lagen de percentages net andersom. :)

Ik ga weer een leuke nuttige nieuwe toepassing/project verzinnen. :)

Acties:
  • 0 Henk 'm!

  • denyos
  • Registratie: Februari 2004
  • Laatst online: 22:33
Het is heel jammer dat je de tips van Confusion zo in de wind slaat omdat het nu toch werkt. GOT is bedoelt om elkaar te helpen en dan vooral in de zin van iemand iets leren. Iets met geef een man een vis en hij heeft eten voor een dag, leer hem vissen en hij heeft eten voor de rest van zijn leven.

Je beschrijft zelf al het probleem wat je had als er 2 keer een if waarheid was, dat het dan fout ging met het includen. Had je van de include netjes een functie gemaakt en die aangeroepen, dan was dit ook gelijk opgelost.

Strava


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:20

MueR

Admin Tweakers Discord

is niet lief

F4T4L_3RR0R schreef op vrijdag 17 juli 2009 @ 08:15:
Betekend dat de opbouw van mijn code niet correct is?
Dat is wel gebleken over de diverse topics van je hier. Ook in dit topic geef je wederom blijk van zeer diepgaande kennis van PHP en programmeren in het algemeen. Met deze kennis ben je ook zeker in staat om meteen email piping en sms tools te gaan maken. Een complexe applicatie maken doet men immers pas nadat men de taal toch grotendeels meester is, en dat is bij jou duidelijk het geval.

Een hardcore programmeur als jij heeft dingen als arrays namelijk niet nodig. Alles in dezelfde string en vervolgens gaan splitten is natuurlijk veel efficienter en meer hardcore. Zeker als je een enkel 10-cijferig telefoonnummer op gaat slaan, is het hardcore en good practice om daar toch even een str_split op te gooien. Wie weet heb je zelf in je hardcoded values een fout gemaakt waardoor er per ongeluk toch meer dan 10 cijfers in staan. Ja, een goed programmeur laat zichzelf altijd door 20 brandende hoepels springen voordat hij iets als veilig beschouwd, zelfs als het hardcoded is.

Mocht de licht sarcastische cynische ondertoon je zijn ontgaan: Leer programmeren. Stop met aankloten. Ga tutorials volgen. Koop een boek. Leer debuggen.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Hoewel de sarcastische noot van MueR misschien wat hard is, heeft hij wel gelijk.

Het begint nu met een eenvoudig scriptje, wat echt nodeloos moeilijk in elkaar zit, puur omdat je de kennis nog niet hebt. Dat is niet erg, maar dat moet een teken zijn voor jou om verder te gaan, en dit script te verbeteren, en jouw kennis te vergroten. Dit script is niet klaar! Want als je dadelijk complexere code moet gaan schrijven ga je hopeloos de fout in, omdat dit soort simpele zaken nog helemaal niet gaan zoals het hoort.

Als je namelijk ooit nog meer gaat doen met PHP kom je hier niet meer mee weg. Sowieso stel, jij, of iemand anders zou later nog naar dit script kijken, dan wens ik diegene veel succes.

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

Verwijderd

Klopt, de gedachte "maar het werkt zo toch" gaat je altijd een keer opbreken.
Je stopt nummers in een lange string en gaat er vanuit dat alle 06-nummers dus 10 cijfers zijn.
Wat nou als de structuur van de 06-nummers wijzigt, omdat de OPTA bepaalt dat deze 12 cijfers moeten worden (omdat de nummers op zijn)?

Tevens is het includen van een functie als functie-call echt not-done, wat Confusion ook al zegt.

Succes... Dit script is echt NIET af...

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 17 juli 2009 @ 12:46:
Wat nou als de structuur van de 06-nummers wijzigt, omdat de OPTA bepaalt dat deze 12 cijfers moeten worden (omdat de nummers op zijn)?
With all due respect; en je hebt zéker valide een punt, je moet ook ergens een grens (kunnen) trekken. Zo kun je natuurlijk wel met 1001 "mogelijke" "what if" en "doemscenario" zaken rekening gaan houden en er komt een punt dat je moet denken: dat zien we dan wel weer.

En nee, dat is in dit topic zeker niet aan de orde. F4T4L_3RR0R heeft, ook gezien de vorige topics, gewoon nog veel te leren en ik kan het dan ook alleen maar eens zijn met de andere posters in dit topic.

Dit script is NIET af / klaar.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

RobIII schreef op vrijdag 17 juli 2009 @ 12:51:
[...]

With all due respect; en je hebt zéker valide een punt, je moet ook ergens een grens (kunnen) trekken. Zo kun je natuurlijk wel met 1001 "mogelijke" "what if" en "doemscenario" zaken rekening gaan houden en er komt een punt dat je moet denken: dat zien we dan wel weer.
Klopt, de structuur van 06-nummers zal niet snel wijzigen, maar je kunt je indenken dat je graag de +31-prefix wilt toevoegen, omdat de SMS-provider dat vereist (ik noem maar wat).
Bij simpel gebruik van een array (heeft nog veel meer voordelen) was dit probleem er al niet.

Ben het met je eens dat je niet overal rekening mee kunt gaan houden, maar meerdere items opslaan in 1 lange string, gaat mij te ver :).

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Er zitten hier en daar heel wat fouten in en wat MueR brengt is misschien knoeter-hard maar het is wel waar, als je zo blijft doorgaan loop je binnenkort wel een 'scriptkiddie' tegen het lijf die het scriptje kraakt en alles kan misbruiken zonder dat jij het weet en dan betaal jij je dus suf.

Je moet in dit geval ook meer om de veiligheid van het script denken en luister naar de mensen op GOT die er veel kaas van hebben gegeten. Je kan alles nu heel makkelijk afslaan maar dan zul je zien dat je binnenkort tegen de lamp aanloopt, dit kan je voorkomen door naar mensen te luisteren die reeds tegen die lamp zijn aangelopen maar later het weer hebben kunnen ontwijken..

Maar goed, even om 'dieper' in te gaan op je script..
Ik zie dat je heel vies gebruikt maakt van PHP door telkens weer hetzelfde te herhalen of juist geen handigere methode erbij gaat pakken, zoals het gebruik van functies wat Confusion ook reeds heeft aangegeven. Het scheelt je in eerste instantie veel werk (heel veel werk) en ten tweede je code wordt sowieso overzichtelijker en makkelijker aan te passen als je het later wilt wijzigen. Natuurlijk mis je ook nog comments maar goed, dat is ieder zijn eigen stijl.

Even kort samengevat:
[0] Ga eerst kijken op php.net voor informatie
[1] Kijk eerst wat je wilt maken, schrijf dus een plan
[2] Kijk hoe je het wilt gaan aanpakken en wat je nodig gaat hebben
[3] Schrijf het uit zodat je altijd een steuntje hebt voor als je het vergeet
[4] Gebruik functies / (classes)
[5] Ga dan pas aan de gang..

Hierboven een heel kort samengevat verhaal, het lijkt poepwerk (dat kan ik weten) maar je zult zien dat je er later geen spijt meer van gaat hebben ;) Je leert namelijk 2x zoveel als dat je on-the-fly codes gaat zitten te rikketikken..

Acties:
  • 0 Henk 'm!

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 18-09 22:46
Om F4T4L_3RR0R maar een beetje een hart onder de riem te steken, ik weet niet waarvoor deze code gebruikt gaat worden. Wellicht is het een hobby projectje, of iets voor school. In dat geval zou ik me er niet zo druk om maken. Indien het voor een productieomgeving is geschreven is het natuurlijk een ander verhaal.

Ikzelf ben een dikke prutser, ik ben al lang blij als mijn code "iets" doet. Object geörienteerd is dan ook niet aan mij besteed. Functies lukt nog net ;) Natuurlijk leer je van zulke "fouten", sla de adviezen dan ook niet in de wind maar bekijk voor jezelf wat jij er aan hebt en wat je ermee doet.
edit:
@Boland, Je hebt helemaal gelijk! eenmaal gewend aan je eigen stijl is het heel moeilijk om het weer af te leren!

[ Voor 9% gewijzigd door Puch-Maxi op 17-07-2009 13:15 . Reden: @Boland ]

My favorite programming language is solder.


Acties:
  • 0 Henk 'm!

Verwijderd

Puch-Maxi schreef op vrijdag 17 juli 2009 @ 13:09:
Om F4T4L_3RR0R maar een beetje een hart onder de riem te steken, ik weet niet waarvoor deze code gebruikt gaat worden. Wellicht is het een hobby projectje, of iets voor school. In dat geval zou ik me er niet zo druk om maken. Indien het voor een productieomgeving is geschreven is het natuurlijk een ander verhaal.

Ikzelf ben een dikke prutser, ik ben al lang blij als mijn code "iets" doet. Object geörienteerd is dan ook niet aan mij besteed. Functies lukt nog net ;) Natuurlijk leer je van zulke "fouten", sla de adviezen dan ook niet in de wind maar bekijk voor jezelf wat jij er aan hebt en wat je ermee doet.
Probleem is dat je je op een gegeven moment een eigen stijl gaat aanleren. Ooit zul je toch een keer iets voor anderen gaan programmeren, zeer waarschijnlijk. Nou, dan is het mooi als je jezelf al een goede stijl aangeleerd hebt in de tijd dat je nog zeeen van vrije tijd had :).

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

Verwijderd schreef op vrijdag 17 juli 2009 @ 13:12:
[...]

Probleem is dat je je op een gegeven moment een eigen stijl gaat aanleren. Ooit zul je toch een keer iets voor anderen gaan programmeren, zeer waarschijnlijk. Nou, dan is het mooi als je jezelf al een goede stijl aangeleerd hebt in de tijd dat je nog zeeen van vrije tijd had :).
Klopt, er zijn een hele hoop beschreven en onbeschreven regels bij het programmeren. Uit de topics welke geopend (en gesloten zijn) van de TS is idd op te maken dat hij niet weet waar het over gaat.
Adviezen worden weggewoven en daarnaast lijkt het erop of de source overal en nergens vandaan geplukt wordt.
Consistentie zit er ook niet echt in de code.

Een advies aan de TS, begin met Hello World en probeer van daaruit steeds meer onderdelen van php te snappen.
Het uitkleden en aanpassen van al bestaande scripts is natuurlijk helemaal niet erg, zolang je maar snapt wat je doet.

Jouw p2000 projectje is veel te omslachtig om mee te beginnen. Sorry dat ik dat moet zeggen, maar je hebt het niet echt door.

De meeste in dit topic zijn ervaren programmeurs (in allerlei verschillende talen); Het lijkt mij verstandig als je hun adviezen mbt programmeren en code-style's opvolgt. Dan maak je het niet alleen voor jezelf makkelijk, maar ook voor je eventuele opvolgers.

Edit: Zie ook http://www.erlang.se/doc/programming_rules.shtml voor een aantal regels/afspraken mbt *deftig programmeren*

[ Voor 4% gewijzigd door Matis op 17-07-2009 13:23 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Dat is een mix van algemeen en Erlang-specifiek advies. Voor een beginnende PHPer niet echt verstandig, want nodeloos verwarrend

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • pingwings
  • Registratie: Mei 2009
  • Laatst online: 01-06 00:15
06 nummers zijn nu ook al niet altijd 10 cijferig.. +31612345678 kan ook een valide 06 nummer zijn.. of 0031612345678 , maar daar kan je in JS altijd een mooie alertbox op geven ;).

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

F4T4L_3RR0R schreef op vrijdag 17 juli 2009 @ 09:14:
Maar moet helaas mededelen dat dit script echt af is nu. Ik kan eventueel wel makkelijk een extra stripos filter instellen als een kennis of iemand anders ook bepaalde berichten wilt ontvangen op zijn of haar telefoon. Ik had eerst een if en elseif, maar dan stopt hij als if waar is. Had weer daarvoor if en if achter elkaar met onder elke if een include, maar dat gaf een foutmelding als beide stripos filters waar waren. Heb dat opgelost door de nummers in een array te zetten en via dat array het bericht te verzenden met één include.
Tsja, als dat de manier is waarop je omgaat met goedbedoeld (en in het algemeen goed!) advies, dan vraag ik me af waarom je überhaupt nog topics opent. Alleen als quickfix om snel even het probleem op te lossen waar je tegenaan loopt? Als je het hele idee achter functies niet snapt en niet wil snappen, dan ga je zodra je weer programmeert tegen weer een ander probleem aanlopen. Dit soort exotische constructies die je nu verzint zijn alleen maar bedoeld om functies te emuleren: springen in je code. Misschien moet je eens naar goto kijken, da's vast right up your alley! (En voor je het écht doet: dat was ook sarcasme. ;) )

Een functie is hier het enige juiste antwoord en als je dat niet wil inzien kun je beter stoppen met programmeren. 't Is niet eens veel werk om te implementeren, al de moeite die je erin stak in dit topic om jouw manier te verdedigen heeft je meer tijd gekost. 8)7

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
NMe:

Een functie maken om iets niet te hoeven includen kan een hoop schelen, maar dan moet de functie toch nog een (hele grote) file includen/requiren. Nu is het email.php, include: sendsms.php, require: class-mollie.php.

pingwings:

Heb dat probleem al opgelost door:

PHP:
1
2
3
4
$nummers - array();
$nummers[] = "0612345678";
$nummers[] = "0611223344";
$ontvangers = implode(", ", $nummers);

Acties:
  • 0 Henk 'm!

  • RetroTycoon
  • Registratie: Juli 2008
  • Laatst online: 02:53
F4T4L_3RR0R schreef op zondag 19 juli 2009 @ 18:32:
NMe:

Een functie maken om iets niet te hoeven includen kan een hoop schelen, maar dan moet de functie toch nog een (hele grote) file includen/requiren. Nu is het email.php, include: sendsms.php, require: class-mollie.php.

pingwings:

Heb dat probleem al opgelost door:

PHP:
1
2
3
4
$nummers - array();
$nummers[] = "0612345678";
$nummers[] = "0611223344";
$ontvangers = implode(", ", $nummers);
Nu sla je de plank finaal mis hoor! Arrays gebruik je met Array[#], niet door te imploderen. Just my 2 eurocent ;)

Acties:
  • 0 Henk 'm!

  • denyos
  • Registratie: Februari 2004
  • Laatst online: 22:33
Zoals t.coenraad ook al zegt slaat dit natuurlijk nergens op. Leer eerst programmeren zoals al vaker in dit topic is gezegd ipv alleen te kijken of iets werkt. Een fietsband plakken met plakband werkt misschien ook voor 10 minuten, maar daar zou ik toch echt niet graag op willen rijden....

Strava


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

denyos schreef op zondag 19 juli 2009 @ 19:01:
Zoals t.coenraad ook al zegt slaat dit natuurlijk nergens op. Leer eerst programmeren zoals al vaker in dit topic is gezegd ipv alleen te kijken of iets werkt. Een fietsband plakken met plakband werkt misschien ook voor 10 minuten, maar daar zou ik toch echt niet graag op willen rijden....
:9 Ik doe dat altijd met kauwgum.
F4T4L_3RR0R schreef op zondag 19 juli 2009 @ 18:32:
Een functie maken om iets niet te hoeven includen kan een hoop schelen
Geef eens een voorbeeld dan; In een taal als PHP is dat allemaal niet zo erg.

In Java zal ik niet zo snel import java.* doen :p

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
RetroTycoon schreef op zondag 19 juli 2009 @ 18:46:
[...]

Nu sla je de plank finaal mis hoor! Arrays gebruik je met Array[#], niet door te imploderen. Just my 2 eurocent ;)
Ik wil geen array maken, maar een string met daarin de (telefoon)nummers. Dat lijkt me wel geslaagd toch?

Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
Matis schreef op zondag 19 juli 2009 @ 19:47:
[...]

Geef eens een voorbeeld dan; In een taal als PHP is dat allemaal niet zo erg.
Ik ben het schrijven van functies nog niet meester.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 19-09 08:51

Janoz

Moderator Devschuur®

!litemod

F4T4L_3RR0R schreef op zondag 19 juli 2009 @ 18:32:
NMe:

Een functie maken om iets niet te hoeven includen kan een hoop schelen, maar dan moet de functie toch nog een (hele grote) file includen/requiren. Nu is het email.php, include: sendsms.php, require: class-mollie.php.
Een functie maak je niet om een include wel of niet minder te hebben. Een functie maak je omdat je een stukje functionaliteit wilt abstraheren zodat deze herbruikbaar wordt en zodat de 'main flow' een stuk overzichtelijker wordt. Daarnaast begrijp ik niet hoe je er bij komt dat juist de functie een bestand moet includen.
pingwings:

Heb dat probleem al opgelost door:

PHP:
1
2
3
4
$nummers - array();
$nummers[] = "0612345678";
$nummers[] = "0611223344";
$ontvangers = implode(", ", $nummers);
En wat doe je er vervolgens in sendsms mee? Heb je daar weer een explode oid?
F4T4L_3RR0R schreef op zondag 19 juli 2009 @ 20:07:
[...]

Ik wil geen array maken, maar een string met daarin de (telefoon)nummers. Dat lijkt me wel geslaagd toch?
Dat wil je helemaal niet. Je wilt een lijst met telefoonnummers bijhouden. Vervolgens heb je na lang prutsen iets dat lijkt te werken met het herhaaldelijk concatteneren, imploden en exploden van een stuk tekst, maar het is over het algemeen gebruikelijker om lijsten bij te houden in een datatype dat bedoeld is voor lijsten.
F4T4L_3RR0R schreef op zondag 19 juli 2009 @ 20:09:
[...]

Ik ben het schrijven van functies nog niet meester.
Eerder in dit topic is voorgekauwd hoe je met het verplaatsen van 1 include en het toevoegen van 2 regeltjes aan het sendsms bestand de boel om kon bouwen zodat het met een functie werkt. In voorgaande topics zijn je meerdere links gegeven waarin de werking en het concept van een functie uitgelegd worden. Het enige dat jij niet meester bent is de vaardigheid om adviezen van anderen aan te nemen en toe te passen.

En tot slot. Als je zelf al weet dat je functies nog niet meester bent, hoe kom je er dan bij om tegen NMe's verhaal in te gaan?

[ Voor 3% gewijzigd door Janoz op 19-07-2009 20:34 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
Omdat ik denk dat NMe er vanuit gaat dat er maar één bestand included moet worden om het script volledig werkend te krijgen.

Sendsms.php hoeft de string niet te imploden of exploden.

Stukje uit sendsms.php:
code:
1
$sms->addRecipients("");


Dat regeltje wilt een telefoonnummer of meerdere telefoonnummers (gescheiden met een komma) tussen de quotes.

Zet ik $ontvangers tussen de quotes, dan krijgt deze dus een telefoonnummer of meerdere telefoonnummers gescheiden met een komma uit $ontvangers.

Door
code:
1
if (!empty($nummer)) {
Toe te voegen boven de include, wordt sendsms.php alleen maar uitgevoerd als
code:
1
$ontvangers = implode(", ", $nummers);
Daadwerkelijk nummers heeft weten te verzamelen.

[ Voor 17% gewijzigd door F4T4L_3RR0R op 19-07-2009 21:09 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

F4T4L_3RR0R schreef op zondag 19 juli 2009 @ 21:04:
Omdat ik denk dat NMe er vanuit gaat dat er maar één bestand included moet worden om het script volledig werkend te krijgen.
Ik denk dat jij eerder moeite hebt met andere mensen in dit topic begrijpen dan andersom. ;)

Situatie nu:
PHP: includefile.php
1
// code om te doen wat jij wil

PHP: mainfile.php
1
2
if ($blaat)
  include('includefile.php');


Situatie die veel handiger werkt en waar een fatsoenlijke editor sowieso beter mee overweg kan:
PHP: includefile.php
1
2
3
4
function doeIets()
{
  // code om te doen wat jij wil
}

PHP: mainfile.php
1
2
3
4
5
6
7
// helemaal bovenaan:
include('includefile.php');

// [knip, meer code hier]

if ($blaat)
  doeIets();

Dat is alles dat verandert en tegelijkertijd maakt het je code 10x duidelijker en makkelijker te debuggen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • F4T4L_3RR0R
  • Registratie: September 2005
  • Laatst online: 18-07-2021
Met het laatste voorbeeld roept hij de included sendsms.php toch al meteen zonder dat de inputstrings beschikbaar zijn? (wat dan resulteert in een foutmelding omdat $ontvangers, $afzender en $bericht niet gevonden worden) Mijn script bestaat uit alleen maar IF's. Het gaat steeds een stukje verder totdat aan alle voorwaarden zijn voldaan. Uiteindelijk roept hij als laatste de include aan.

Ik wil sendsms.php niet vaker aanroepen in dit script of met andere scripts. (was ook een argument om gebruik te maken van een functie binnen het script)

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

F4T4L_3RR0R schreef op zondag 19 juli 2009 @ 22:57:
Met het laatste voorbeeld roept hij de included sendsms.php toch al meteen zonder dat de inputstrings beschikbaar zijn? (wat dan resulteert in een foutmelding omdat $ontvangers, $afzender en $bericht niet gevonden worden) Mijn script bestaat uit alleen maar IF's. Het gaat steeds een stukje verder totdat aan alle voorwaarden zijn voldaan. Uiteindelijk roept hij als laatste de include aan.
Wat dacht je van argumenten?
Ik wil sendsms.php niet vaker aanroepen in dit script of met andere scripts. (was ook een argument om gebruik te maken van een functie binnen het script)
NMe schreef op zondag 19 juli 2009 @ 22:26:
Dat is alles dat verandert en tegelijkertijd maakt het je code 10x duidelijker en makkelijker te debuggen.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
RetroTycoon schreef op zondag 19 juli 2009 @ 18:46:
[...]

Nu sla je de plank finaal mis hoor! Arrays gebruik je met Array[#], niet door te imploderen. Just my 2 eurocent ;)
Afbeeldingslocatie: http://i.fokzine.net/templates/new/i/p/1.gif Op maandag 20 juli 2009 01:20 schreef slacker_nl het volgende:

[..]

Wat een droid.
Anyways, het enige functionele verschil tussen een include en een functie is de scope waarin je variabelen kunt gebruiken.

[ Voor 11% gewijzigd door GlowMouse op 20-07-2009 01:27 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

GlowMouse schreef op maandag 20 juli 2009 @ 01:23:
[...]

[...]

Anyways, het enige functionele verschil tussen een include en een functie is de scope waarin je variabelen kunt gebruiken.
Code completion, inclusief documentatie in de tooltip? Makkelijker hergebruik als later toch blijkt dat het afhankelijk van invoer andere resultaten moet geven? Om nog niet te zeggen dat in de juiste scope blijven ook nogal belangrijk is in verband met mogelijk overschrijven van variabelenamen? Dat laatste is ook nog eens niet bepaald overduidelijk in een include-setup.

Oh, en die quote die je linkt van GoT: da's natuurlijk helemaal buiten context hier. Wij krijgen hier een deel van de informatie, op Fok! krijgen ze een ander stukje informatie en intussen wordt er op beide fora maar wat geraden. ;) Of die implode al dan niet goed is weten we noch hier, noch op Fok! omdat niemand de situatie helemaal kent.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

F4T4L_3RR0R schreef op zondag 19 juli 2009 @ 22:57:
Met het laatste voorbeeld roept hij de included sendsms.php toch al meteen zonder dat de inputstrings beschikbaar zijn? (wat dan resulteert in een foutmelding omdat $ontvangers, $afzender en $bericht niet gevonden worden) Mijn script bestaat uit alleen maar IF's. Het gaat steeds een stukje verder totdat aan alle voorwaarden zijn voldaan. Uiteindelijk roept hij als laatste de include aan.
Je snapt het hele principe van de functie niet. Je kunt de code die je in sendsms.php gebruikt in een functie zetten (maar gewoon in sendsms.php laten). Dan zorg je met de include bovenaan het bestand dat de functie die je in sendsms.php hebt staan ook in dat bestand kunt gebruiken. Op het moment dat je het dan echt nodig hebt roep je die functie aan.

Als je het bovenstaande stukje niet snap, ga dan alsjeblieft hier nog eens heen. De basis van functies is iets wat je erg snel onder de knie moet kunnen krijgen, het is niet zo moeilijk.

Misschien doe je het niet bewust, maar je geeft mij (en ik denk niet dat ik de enige daarin ben) het gevoel dat je de adviezen die je gegeven worden alleen opneemt als het komt in de vorm van een stukje code. Daar doe je wat mee, maar ik heb je nog niet één keer inhoudelijk in zien gaan op nieuw geïntroduceerde stof.

Acties:
  • 0 Henk 'm!

  • Rafe
  • Registratie: Mei 2002
  • Laatst online: 27-06 13:12
F4T4L_3RR0R schreef op zondag 19 juli 2009 @ 22:57:
Met het laatste voorbeeld roept hij de included sendsms.php toch al meteen zonder dat de inputstrings beschikbaar zijn?
Sterk versimpeld, jij hebt dit:
index.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php 
$nummer = '1234567890'; //dit nummer kan door strings aan elkaar te plakken mogelijk langer zijn in jouw echte script... gaat om het idee
if ('1' == '1') { //doorloop tests
    if ('2' == '2') {
        include('sms.php');
    }
    else {
        echo 'error!';
    }
}
?>


sms.php
PHP:
1
2
3
<?php 
echo 'Nu stuur ik een sms naar '.$nummer; 
?>


Dan krijg je inderdaad wat jij zegt. Maar, hoe pak je het dan aan om in een keer meerdere smsjes te sturen? Functies!

index.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 
include('include.php');

$tel1 = '1234567890';
if ('1' == '1') { //doorloop tests
    stuurSms($tel1); //sms mn moeder
    if ('2' == '2') {
        stuurSms('0987654321'); //nog nooit vertoond, sms de koningin!
    }
    else {
        echo 'error!'; //je mag hier ook wat anders doen natuurlijk
    }
}
?>


sms.php
PHP:
1
2
3
4
5
<?php 
function stuurSms($nummer) {
    echo 'Nu stuur ik een sms naar '.$nummer;
}
?>


Zie je nu wat er gebeurd? Je maakt de functie stuurSms() beschikbaar, en je gebruikt die functie wanneer en hoe vaak jij wilt, afhankelijk van je if-jes! Om hetzelfde te bereiken heb jij een hakkie-takkie oplossing gebouwd die telefoonnummers in een string aan elkaar plakt, die jouw ge-include script (waarschijnlijk) weer uit elkaar trekt.

[ Voor 6% gewijzigd door Rafe op 20-07-2009 02:59 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
NMe schreef op maandag 20 juli 2009 @ 02:00:
Code completion, inclusief documentatie in de tooltip? Makkelijker hergebruik als later toch blijkt dat het afhankelijk van invoer andere resultaten moet geven? Om nog niet te zeggen dat in de juiste scope blijven ook nogal belangrijk is in verband met mogelijk overschrijven van variabelenamen? Dat laatste is ook nog eens niet bepaald overduidelijk in een include-setup.
Vergeet vooral ook niet het security probleempje dat je er van krijgt, omdat je vanaf de client direct een functie aan kan roepen. Als register globals aanstaat (en gezien het niveau van TS zit die kans er in) dan heeft TS denk ik een soort open-sms-gateway gemaakt. Waar staat dit scriptje? ;) Gratis smsjes kunnen sturen is altijd handig. :)
Rafe schreef op maandag 20 juli 2009 @ 02:54:
Dan krijg je inderdaad wat jij zegt. Maar, hoe pak je het dan aan om in een keer meerdere smsjes te sturen? Functies!
Verkeerd voorbeeld, nu krijg je terug dat je meerdere keren include kan doen, en dat dat ook nog eens kortere code oplevert... :+

offtopic:
kans 76.4% op ib4tl vanwege gebrek aan inzet en luisteren naar juiste personen bij TS.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

pedorus schreef op maandag 20 juli 2009 @ 03:05:
[...]

Vergeet vooral ook niet het security probleempje dat je er van krijgt, omdat je vanaf de client direct een functie aan kan roepen. Als register globals aanstaat (en gezien het niveau van TS zit die kans er in) dan heeft TS denk ik een soort open-sms-gateway gemaakt. Waar staat dit scriptje? ;) Gratis smsjes kunnen sturen is altijd handig. :)
Dat hoeft dan ook weer niet als je in je mainfile iets definet waarop je checkt in je include; is die constante er niet, dan gaat het script niet verder. Maar dat is ook maar een stomme workaround alleen om geen functies te hoeven gebruiken. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

NMe schreef op maandag 20 juli 2009 @ 10:12:
Dat hoeft dan ook weer niet als je in je mainfile iets definet waarop je checkt in je include; is die constante er niet, dan gaat het script niet verder. Maar dat is ook maar een stomme workaround alleen om geen functies te hoeven gebruiken. :+
Ach, een beetje POST-gegevens naar de browser sturen en kijken waar het schip strandt ;)

Echter is dit natuurlijk wel een van de mooiste (kuch) workarounds om geen functions te hoeven gebruiken. Daarnaast heb ik een beetje de indruk dat de TS niet verder durft te kijken dan zijn programming-horizon.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Als TS echt niet wil kan je hoog en laag springen wat je wil, maar verandert er toch niets. De hele lijst van argumenten en ranzige workaround trucs is echt niet nodig, want op 1 persoon na weten we toch wat uiteindelijk beter is. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 17-09 17:56
Qua die arrays is het probleem gewoon dat $sms->addRecipients(""); een string met kommagescheiden telefoonnummers accepteert in plaats van een array :X

[ Voor 4% gewijzigd door hostname op 20-07-2009 10:22 ]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

hostname schreef op maandag 20 juli 2009 @ 10:21:
Qua die arrays is het probleem gewoon dat $sms->addRecipients(""); een string met kommagescheiden telefoonnummers accepteert in plaats van een array :X
Dat is op zich geen probleem, maar dat is nog geen excuus om tussendata stom op te slaan - dan implode je in de parameters naar die call of vlak erboven naar een temporary variable. Jezelf aanpassen aan stom opgezette API's is normaal, je hele code erop aanpassen niet.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

Gewoon op het laatste moment imploderen:
PHP:
1
2
3
<?php
 $sms->addRecipients(implode(", ",$nummers));
?>


Zoals Curry zegt: je moet je hele code niet aanpassen aan de API, alleen bepaalde gedeeltes die er toe doen, en dan nog niet te veel.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Je doet een include in plaats van een functiecall. Persoonlijk vind ik dat te ranzig voor woorden. Als je een SMS wilt versturen moet je d'r gewoon een SMS class van maken met een send() method die de benodigde parameters Aanneemt. Dit is gewoon lelijk.
Voutloos schreef op maandag 20 juli 2009 @ 10:20:
Als TS echt niet wil kan je hoog en laag springen wat je wil, maar verandert er toch niets. De hele lijst van argumenten en ranzige workaround trucs is echt niet nodig, want op 1 persoon na weten we toch wat uiteindelijk beter is. ;)
Ja, en ik vind dat we gewoon niet mee moeten werken aan dit soort ranzige code. Als 'ie niet wil horen hoe 't hoort, moet 'ie hier niet posten.

[ Voor 49% gewijzigd door Hydra op 22-07-2009 11:26 ]

https://niels.nu

Pagina: 1