PDA

Bekijk Volledige Versie : Probleem met variabelen



StriKe
24/06/03, 09:50
Hallo,

Ik heb onderstaande php code gemaakt:

<?php

$Aantal = 31;
$Teller07 = 1;
$Teller08 = 1;

While ($Aantal >= $Teller07 and $Teller08) {

if ($Teller07 and $Teller08 < 10) {
print ("<tr><td width=\"40%\">0$Teller07-07-2003</td>
<td class=\"selectbox\" width=\"10%\"><input
type=\"checkbox\" name=\"Juli\" value=\"$Teller07-07-2003\"></td>
<td width=\"40%\">0$Teller08-08-2003</td>
<td class=\"selectbox\" width=\"10%\"><input
type=\"checkbox\" name=\"Augustus\" value=\"$Teller08-08-2003\"></td
</tr>");

} else {
print ("<tr><td width=\"40%\">$Teller07-07-2003</td>
<td class=\"selectbox\" width=\"10%\"><input
type=\"checkbox\" name=\"Juli\" value=\"$Teller07-07-2003\"></td>
<td width=\"40%\">$Teller08-08-2003</td>
<td class=\"selectbox\" width=\"10%\"><input
type=\"checkbox\" name=\"Augustus\" value=\"$Teller08-08-2003\"></td>
</tr>");
}

$Teller07++;
$Teller08++;
}

?>

Het gaat hem hier dus om een 'deel' van een formulier die de dagen van
Juli en Augustus neerschrijft. Die if-functie dient om datums met maar
één cijfer in de dag met twee cijfers te vormen. (1-07-2003 moet dus 01-
07-2003 worden).

Nu zou ik, nadat ik op de verzendbutton geklikt heb, moeten kunnen nagaan
welke checkbox(en) werd(en) aangevinkt. Ik dacht dit te doen via
onderstaande php-code, maar dan drukt hij nogmaals alle dagen van de
maand af. (Hier die van Juli, het gaat maar om een deel van het script).

$n = 1;

while ($n <= 31)
{
if ($Juli = on)
{
print ("$n-07-2003 <br>");
$n++;
} else {
$n++;
}
}

De bedoeling is dus dat ik alleen de data krijg die werden aangevinkt op
de vorige pagina's, en dus niet allemaal.

--
-- http://www.internetfreakz.be --

<!-- Onze geboorte was tevens de eerste stap naar onze dood -->

Niels Basjes
24/06/03, 11:20
On Tue, 24 Jun 2003 07:43:08 GMT the lifeform known as StriKe
<strike_ng@pandora.be.invalid> wrote:

>Ik heb onderstaande php code gemaakt:
>
><?php
>
>$Aantal = 31;
>$Teller07 = 1;
>$Teller08 = 1;

Things that make you go Hmmmmm......

>While ($Aantal >= $Teller07 and $Teller08) {

Wat probeer je als conditie te gebruiken ??? Ik vermoed dat dit namelijk
niet doet wat jij wil.

> if ($Teller07 and $Teller08 < 10) {

idem.

> print ("<tr><td width=\"40%\">0$Teller07-07-2003</td>

Liever:
print ("<tr><td width=\"40%\">0".$Teller07."-07-2003</td>

....
> <td class=\"selectbox\" width=\"10%\"><input
>type=\"checkbox\" name=\"Juli\" value=\"$Teller07-07-2003\"></td>
> <td width=\"40%\">0$Teller08-08-2003</td>

Wat doe je dit onhandig. Je kan beter werken met een array waarin de
namen van de maanden staan en de index het nummer van de maand is.
Werken met variabelen die $Teller07 en $Teller08 heten verdient ook geen
schoonheidsprijs. Ook ben je dezelfde HTML veelvuldig aan het herhalen.

....

>Het gaat hem hier dus om een 'deel' van een formulier die de dagen van
>Juli en Augustus neerschrijft. Die if-functie dient om datums met maar
>één cijfer in de dag met twee cijfers te vormen. (1-07-2003 moet dus 01-
>07-2003 worden).
>
>Nu zou ik, nadat ik op de verzendbutton geklikt heb, moeten kunnen nagaan
>welke checkbox(en) werd(en) aangevinkt. Ik dacht dit te doen via
>onderstaande php-code, maar dan drukt hij nogmaals alle dagen van de
>maand af. (Hier die van Juli, het gaat maar om een deel van het script).

Klopt. Er is maar 1 variabele $Juli en die is dus voor alle dagen
hetzelfde. Daarbij komt dat je geen vergelijking in je if hebt staan
maar een assignment.

> if ($Juli = on)

>De bedoeling is dus dat ik alleen de data krijg die werden aangevinkt op
>de vorige pagina's, en dus niet allemaal.

Je moet eerst nog maar eens goed naar de syntax van de taal php kijken
want daar gaat nog echt het een en ander mis.
--

Best regards,

Niels.

================================================== =====================
| Drs. ir. Niels Basjes | National Aerospace Laboratory | _ |
| Phone : +31-20-5113381 | Anthony Fokkerweg 2 | / |
| Fax : +31-20-5113210 | 1059 CM Amsterdam |(NLR)|
| E-Mail@NLR : Basjes@NLR,nl | The Netherlands | _/ |
| E-Mail@Home : Niels@Basjes,nl | http://www.nlr.nl | |
================================================== =====================
Spam block : Replace the , with a .

StriKe
24/06/03, 11:20
Basjes@NLR.nl (Niels Basjes) wrote in news:3ef9128f.90270001@news:

>>$Aantal = 31;
>>$Teller07 = 1;
>>$Teller08 = 1;
>
> Things that make you go Hmmmmm......
>
>>While ($Aantal >= $Teller07 and $Teller08) {
>
> Wat probeer je als conditie te gebruiken ??? Ik vermoed dat dit
> namelijk niet doet wat jij wil.
>

$Teller07 staat voor de dagen van Juli, $Teller08 voor die van augustus.
Beide maanden hebben 31 dagen dus wil ik dat die 31 dagen afgebeeld
worden.
Dus zolang $Teller07/08 niet groter dan 31 zijn, moet hij blijven
afbeelden (en telkens eentje bijtellen).

>> if ($Teller07 and $Teller08 < 10) {
>
> idem.

De eerste dag van juli (of augustus) zou hij als volgt afbeelden:
1-7-2003
Ik wil echter 01-07-2003 krijgen.

Dit wil dus zeggen dat de dagen 1 tem 9 een nul vooran moeten krijgen.

> Liever:
> print ("<tr><td width=\"40%\">0".$Teller07."-07-2003</td>
>
> ...

Waarom zou ik dit het best zo doen?
Ik krijg namelijk ook 01-07-2003 met mijn 'methode'. (Ik kan natuurlijk
wel best begrijpen dat ik verkeerd zit).

> Wat doe je dit onhandig. Je kan beter werken met een array waarin de
> namen van de maanden staan en de index het nummer van de maand is.
> Werken met variabelen die $Teller07 en $Teller08 heten verdient ook
> geen schoonheidsprijs. Ook ben je dezelfde HTML veelvuldig aan het
> herhalen.

Maw, ipv de variabelen $Teller07 en $Teller08 te gebruiken zou ik best
volgende doen:

$Maanden = array("Juli", "Augustus")

Waarbij ik dan Juli met "0" en Augustus met "1" kan aanspreken?

> Je moet eerst nog maar eens goed naar de syntax van de taal php kijken
> want daar gaat nog echt het een en ander mis.

Ik neem aan dat het niet 'volgens' de regels is, maar ik ben nu eenmaal
ook nog maar een beginner, die het één en ander wil proberen.

Bedankt voor je hulp.

--
-- http://www.internetfreakz.be --

<!-- Onze geboorte was tevens de eerste stap naar onze dood -->

Niels Basjes
24/06/03, 11:35
On Tue, 24 Jun 2003 09:16:07 GMT the lifeform known as StriKe
<strike_ng@pandora.be.invalid> wrote:

>>>$Aantal = 31;
>>>$Teller07 = 1;
>>>$Teller08 = 1;
>>
>> Things that make you go Hmmmmm......
>>
>>>While ($Aantal >= $Teller07 and $Teller08) {
>>
>> Wat probeer je als conditie te gebruiken ??? Ik vermoed dat dit
>> namelijk niet doet wat jij wil.

>$Teller07 staat voor de dagen van Juli, $Teller08 voor die van augustus.
>Beide maanden hebben 31 dagen dus wil ik dat die 31 dagen afgebeeld
>worden.
>Dus zolang $Teller07/08 niet groter dan 31 zijn, moet hij blijven
>afbeelden (en telkens eentje bijtellen).

Mijn vermoeden klopt dus. Die 'if' doet niet wat jij wil.


>>> if ($Teller07 and $Teller08 < 10) {
>>
>> idem.

>De eerste dag van juli (of augustus) zou hij als volgt afbeelden:
>1-7-2003
>Ik wil echter 01-07-2003 krijgen.
>
>Dit wil dus zeggen dat de dagen 1 tem 9 een nul vooran moeten krijgen.

Ook hier klopt mijn vermoeden. Die 'if' doet niet wat jij wil.

>> Liever:
>> print ("<tr><td width=\"40%\">0".$Teller07."-07-2003</td>
>>
>> ...

>Waarom zou ik dit het best zo doen?
>Ik krijg namelijk ook 01-07-2003 met mijn 'methode'. (Ik kan natuurlijk
>wel best begrijpen dat ik verkeerd zit).

Ja, maar ik zeg ook "liever".

>> Wat doe je dit onhandig. Je kan beter werken met een array waarin de
>> namen van de maanden staan en de index het nummer van de maand is.
>> Werken met variabelen die $Teller07 en $Teller08 heten verdient ook
>> geen schoonheidsprijs. Ook ben je dezelfde HTML veelvuldig aan het
>> herhalen.
>
>Maw, ipv de variabelen $Teller07 en $Teller08 te gebruiken zou ik best
>volgende doen:
>
>$Maanden = array("Juli", "Augustus")
>
>Waarbij ik dan Juli met "0" en Augustus met "1" kan aanspreken?

Ja, bij voorbeeld. Maar je kan ook iets doen als:
$Maanden = array();
$Maanden [7] = "Juli";
$Maanden [8] = "Augustus";

Of als je nog mooier wil een 2 dimensionaal array :
$Maanden = array();
$Maanden [7]["naam"] = "Juli";
$Maanden [7]["dagen"] = 31;
$Maanden [7]["nummer"] = "07";

$Maanden [8]["naam"] = "Augustus";
$Maanden [8]["dagen"] = 31;
$Maanden [8]["nummer"] = "07";

>> Je moet eerst nog maar eens goed naar de syntax van de taal php kijken
>> want daar gaat nog echt het een en ander mis.

>Ik neem aan dat het niet 'volgens' de regels is,

De stukken code die je gepost hebt doen niet wat _jij_ wil dat ze doen.

>maar ik ben nu eenmaal ook nog maar een beginner,
>die het één en ander wil proberen.

Alle begin is moeilijk. Alleen met veel documentatie lezen, veel
proberen en vooral doorzettings vermogen gaat dit lukken.

>Bedankt voor je hulp.

No problem.
--

Best regards,

Niels.

================================================== =====================
| Drs. ir. Niels Basjes | National Aerospace Laboratory | _ |
| Phone : +31-20-5113381 | Anthony Fokkerweg 2 | / |
| Fax : +31-20-5113210 | 1059 CM Amsterdam |(NLR)|
| E-Mail@NLR : Basjes@NLR,nl | The Netherlands | _/ |
| E-Mail@Home : Niels@Basjes,nl | http://www.nlr.nl | |
================================================== =====================
Spam block : Replace the , with a .

StriKe
24/06/03, 12:20
Basjes@NLR.nl (Niels Basjes) wrote in news:3efc1864.91762557@news:

> Mijn vermoeden klopt dus. Die 'if' doet niet wat jij wil.

Hoezo?
Met mijn primitieve code worden toch ook de dagen van juli en augustus
afgebeeld?

Of bedoel je dat mijn methode niet correct is, omdat ik er nadien nog
gegevens moet uithalen? (dus nadien moet ik kunnen zien welke checkbox
aangevinkt was en welke niet).

> Ook hier klopt mijn vermoeden. Die 'if' doet niet wat jij wil.

Ook hier werkte mijn methode goed, maar wat is er dan volgens jou niet
correct?

> Ja, bij voorbeeld. Maar je kan ook iets doen als:
> $Maanden = array();
> $Maanden [7] = "Juli";
> $Maanden [8] = "Augustus";

Hier raak ik volledig de pedalen kwijt.
$Maanden[7] en [8] dien ik toch niet vooraf als variabelen in te stellen?
Als ik deze nodig heb, kan ik ze achteraf toch gewoon aanroepen?

> Of als je nog mooier wil een 2 dimensionaal array :
> $Maanden = array();
> $Maanden [7]["naam"] = "Juli";
> $Maanden [7]["dagen"] = 31;
> $Maanden [7]["nummer"] = "07";
>
> $Maanden [8]["naam"] = "Augustus";
> $Maanden [8]["dagen"] = 31;
> $Maanden [8]["nummer"] = "07";

Hier snap ik helemaal nog niet van, maar aangezien het volgens jou met de
eerste methode ook zou lukken ...

> De stukken code die je gepost hebt doen niet wat _jij_ wil dat ze doen.

Ik ben relatief tevreden met het 'middenresultaat', het enige probleem
waarmee ik zit is dat ik met php niet kan te weten komen waneer een
checkbox wel is aangevinkt, en wanneer niet.

> Alle begin is moeilijk. Alleen met veel documentatie lezen, veel
> proberen en vooral doorzettings vermogen gaat dit lukken.

Ik heb me in m'n beginperiode (nu een paar maand geleden) een boek
gekocht met de basisbeginselen van php, ook al enkele tutorials bekeken
en nu ben ik bezig om scripts die ik nodig heb voor m'n website zelf in
elkaar te steken. Met praktijkgerichte zaken leer je volgens mij nog
steeds het meeste. Daarbij is ook www.php.net uiteraard een grote hulp.

> No problem.

Maar toch thx ...

--
-- http://www.internetfreakz.be --

<!-- Onze geboorte was tevens de eerste stap naar onze dood -->

Niels Basjes
24/06/03, 13:50
On Tue, 24 Jun 2003 10:10:52 GMT the lifeform known as StriKe
<strike_ng@pandora.be.invalid> wrote:

>Basjes@NLR.nl (Niels Basjes) wrote in news:3efc1864.91762557@news:
>
>> Mijn vermoeden klopt dus. Die 'if' doet niet wat jij wil.
>
>Hoezo?

Jij schrijft:
While ($Aantal >= $Teller07 and $Teller08) {

Dat doet niet wat jij beschrijft.

>Met mijn primitieve code worden toch ook de dagen van juli en augustus
>afgebeeld?

In dit geval noem ik dat toeval.

>Of bedoel je dat mijn methode niet correct is, omdat ik er nadien nog
>gegevens moet uithalen? (dus nadien moet ik kunnen zien welke checkbox
>aangevinkt was en welke niet).

Nee, jij beschrijft bepaald gedrag en je code is ander gedrag.

>> Ook hier klopt mijn vermoeden. Die 'if' doet niet wat jij wil.
>
>Ook hier werkte mijn methode goed, maar wat is er dan volgens jou niet
>correct?

if ($Teller07 and $Teller08 < 10) {

Stel
$Teller07 = 20
$Teller08 = 5

Dan komt hier true uit en niet false zoals ik uit jouw beschrijvende
tekst opmaak. Hetzelfde gaat op voor die While conditie hierboven.

>> Ja, bij voorbeeld. Maar je kan ook iets doen als:
>> $Maanden = array();
>> $Maanden [7] = "Juli";
>> $Maanden [8] = "Augustus";
>
>Hier raak ik volledig de pedalen kwijt.

Ga je eerst maar eens verdiepen in het gedrag van die if en die while.
Arrays zijn voor later.

>> De stukken code die je gepost hebt doen niet wat _jij_ wil dat ze doen.

>Ik ben relatief tevreden met het 'middenresultaat', het enige probleem
>waarmee ik zit is dat ik met php niet kan te weten komen waneer een
>checkbox wel is aangevinkt, en wanneer niet.

Stel je hebt een checkbox met de naam aap, dan kun je in PHP zien of hij
gezet is met
if (isset($aap))

>> Alle begin is moeilijk. Alleen met veel documentatie lezen, veel
>> proberen en vooral doorzettings vermogen gaat dit lukken.

>Ik heb me in m'n beginperiode (nu een paar maand geleden) een boek
>gekocht met de basisbeginselen van php, ook al enkele tutorials bekeken
>en nu ben ik bezig om scripts die ik nodig heb voor m'n website zelf in
>elkaar te steken. Met praktijkgerichte zaken leer je volgens mij nog
>steeds het meeste. Daarbij is ook www.php.net uiteraard een grote hulp.

Succes.
--

Best regards,

Niels.

================================================== =====================
| Drs. ir. Niels Basjes | National Aerospace Laboratory | _ |
| Phone : +31-20-5113381 | Anthony Fokkerweg 2 | / |
| Fax : +31-20-5113210 | 1059 CM Amsterdam |(NLR)|
| E-Mail@NLR : Basjes@NLR,nl | The Netherlands | _/ |
| E-Mail@Home : Niels@Basjes,nl | http://www.nlr.nl | |
================================================== =====================
Spam block : Replace the , with a .

Michaël Pattiruhu
24/06/03, 15:20
"StriKe" <strike_ng@pandora.be.invalid> wrote in message
news:Xns93A462E46B33Bstrike@195.130.132.65...
> Hallo,
>
> Ik heb onderstaande php code gemaakt:
>
> <?php
>
> $Aantal = 31;
> $Teller07 = 1;
> $Teller08 = 1;
>
> While ($Aantal >= $Teller07 and $Teller08) {
>
<knip>wat code</knip>

Ik ken PHP niet, maar ik gok dat het moet zijn:
While($Aantal>=$Teller07 and $Aantal>=$Teller08)

Aan beide kanten van de AND moet een bewering staan, die dus waar of onwaar
kan zijn. "$Teller08" is geen bewering!
Hetzelfde geldt ook voor OR.

Michaël

John Bokma
24/06/03, 17:05
Michaël Pattiruhu wrote:

[snip]

> Aan beide kanten van de AND moet een bewering staan, die dus waar of onwaar
> kan zijn. "$Teller08" is geen bewering!

Weet niet of het voor PHP geld maar in veel programmeertalen is dit wel
een "bewering". Als $Teller08 0 bevat is de bewering *niet* waar*,
anders waar (geen idee hoe/wat met "undefined" als dat er al is in PHP).

John

--
email: mail(at)johnbokma.com
home: http://johnbokma.com/

Michaël Pattiruhu
24/06/03, 17:20
"John Bokma" <postmaster@castleamber.com> wrote in message
news:1056466663.223649@halkan.kabelfoon.nl...
> Michaël Pattiruhu wrote:
>
> [snip]
>
> > Aan beide kanten van de AND moet een bewering staan, die dus waar of
onwaar
> > kan zijn. "$Teller08" is geen bewering!
>
> Weet niet of het voor PHP geld maar in veel programmeertalen is dit wel
> een "bewering". Als $Teller08 0 bevat is de bewering *niet* waar*,
> anders waar (geen idee hoe/wat met "undefined" als dat er al is in PHP).
>
> John
>
Je hebt gelijk. Zeker als $Teller08 van het type boolean is is het een
bewering. Als het een integer is, is het feitelijk geen bewering, maar zal
de compiler/parser het behandelen op de manier die jij beschreef (of
omgekeerd).

Michaël

Niels Basjes
25/06/03, 10:50
On Tue, 24 Jun 2003 17:12:25 +0200 the lifeform known as "Michaël
Pattiruhu" <pamRemoveThis@hesasdRemoveThis.nl> wrote:

>> > Aan beide kanten van de AND moet een bewering staan, die dus waar of
>> > onwaar kan zijn. "$Teller08" is geen bewering!

>> Weet niet of het voor PHP geld maar in veel programmeertalen is dit wel
>> een "bewering". Als $Teller08 0 bevat is de bewering *niet* waar*,
>> anders waar (geen idee hoe/wat met "undefined" als dat er al is in PHP).

>Je hebt gelijk. Zeker als $Teller08 van het type boolean is is het een
>bewering.

In PHP zijn er geen strak gedefinieerde typen zoals je die in C++ of
JAVA o.i.d. tegen komt. Zo uit mijn hoofd kan een variabele slechts een
van de volgende 3 dingen zijn:
- Niet gedefinieerd.
- Een waarde.
- Een array van .....

>Als het een integer is, is het feitelijk geen bewering, maar zal
>de compiler/parser het behandelen op de manier die jij beschreef (of
>omgekeerd).

In PHP is dat dus nog soepeler. Het effect is echter precies zoals
beschreven door John Bokma.
--

Best regards,

Niels.

================================================== =====================
| Drs. ir. Niels Basjes | National Aerospace Laboratory | _ |
| Phone : +31-20-5113381 | Anthony Fokkerweg 2 | / |
| Fax : +31-20-5113210 | 1059 CM Amsterdam |(NLR)|
| E-Mail@NLR : Basjes@NLR,nl | The Netherlands | _/ |
| E-Mail@Home : Niels@Basjes,nl | http://www.nlr.nl | |
================================================== =====================
Spam block : Replace the , with a .