PDA

Bekijk Volledige Versie : Php newbie vraagje



Sven Daems
06/10/03, 17:45
Beste

Ik ben een redelijke newbie op't gebied van php maar toch wil ik een simpel
phpscriptje schrijven.

Ik heb een pagina gemaakt met daar een drop-down box (cmbMaand) in waar de
gebruiker een maand moet selecteren en dan op de knop cmdOk moet klikken. De
bedoeling is dan dat de gebruiker word doorgeschakelt naar de pagina
Toertochten_sept.html als hij september selecteerde, Toertochten_okt.html
als hij oktober selecteerde, enz...

De code van't formuliertje ziet er als volgt uit:

<form action="toertochten.php" method="get">
select size="1" name="cmbMaand">
<option selected></option>
<option>September</option>
<option>Oktober</option>
<option>November</option>
<option>December</option>
<option>Januari</option>
<option>Februari</option>
</select><input type="submit" value="Zoek't op" name="cmdOk"></p>
</form>

De gebruiker wordt dus eerst doorgestuurd naar het bestand toertochten.php
(je krijgt dan een url zoals
http://www.heidestoempers.be/toertochten.php?cmbMaand=Oktober&cmdOk=Zoek%27t+op).
In dat php bestandje staat de volgende code:

<?php
if ($cmbMaand=September) {
$URL="http://www.heidestoempers.be/Toertochten_sept.htm";
header ("Location: $URL");
} elseif ($cmbMaand=Oktober) {
$URL="http://www.heidestoempers.be/Toertochten_okt.htm";
header ("Location: $URL");
} else {
$URL="http://www.heidestoempers.be/Toertochten_nov.htm";
header ("Location: $URL");
}

?>


Ok, de bedoeling is dus dat de gebruiker direct wordt doorgeschakelt naar de
juiste pagina. Dat gebeurt dus niet, welke maand je ook kiest, hij zal
altijd Toertochten_sept.htm laten zien. Heeft iemand een idee?

Met vriendelijke groeten
Sven Daems

Alex Kwak
06/10/03, 18:00
"Sven Daems" <cyberbike9@hotmail.com> schreef in bericht
news:3f818c85$0$31715$ba620e4c@reader1.news.skynet .be...
>
> <?php
> if ($cmbMaand=September) {
> $URL="http://www.heidestoempers.be/Toertochten_sept.htm";
> header ("Location: $URL");

if ($cmbMaand==September) {

een dubbele = , anders schrijf je een toekenning...

Alex.

Sven Daems
06/10/03, 18:30
> if ($cmbMaand==September) {
>
> een dubbele = , anders schrijf je een toekenning...
>

Als ik dat doe dan wordt ik doorverwezen naar http://www.heidestoempers.be
ipv http://www.heidestoempers.be/Toertochten_xxx.htm

Joris Janssens
06/10/03, 18:45
A long time ago in a galaxy far, far away, Sven Daems wrote:

>> if ($cmbMaand==September) {
>>
>> een dubbele = , anders schrijf je een toekenning...
>>
>
> Als ik dat doe dan wordt ik doorverwezen naar
> http://www.heidestoempers.be ipv
> http://www.heidestoempers.be/Toertochten_xxx.htm

Je moet September tussen quotes schrijven...


Hieronder een oplossing met het switch-statement:

$URL='';
switch ($cmbMaand) {
case 'September';
$URL="http://www.heidestoempers.be/Toertochten_sept.htm";
break;
case 'Oktober':
$URL=...;
break;
...
case 'Februari';
$URL=...;
break;
default:
echo '<p>Geen geldige maand opgegeven.</p>';
break;
}
if ($URL!='') {
header('Location: ' . $URL);
exit;
}

--
Joris "flotspe" Janssens
http://www.xhtml.be/inferno/

Sven
06/10/03, 19:00
Joris Janssens wrote:
> A long time ago in a galaxy far, far away, Sven Daems wrote:
>
>>> if ($cmbMaand==September) {
>>>
>>> een dubbele = , anders schrijf je een toekenning...
>>>
>>
>> Als ik dat doe dan wordt ik doorverwezen naar
>> http://www.heidestoempers.be ipv
>> http://www.heidestoempers.be/Toertochten_xxx.htm
>
> Je moet September tussen quotes schrijven...

ik moest de variabele die doorgegeven waren uitlezen mbv.
$_GET['variabelenaam'] mischien werkt dit bij jou ook beter :)

--spatie
Het streepje wordt een puntje, voor een prive bericht.

Joris Janssens
06/10/03, 19:00
A long time ago in a galaxy far, far away, Sven wrote:

> Joris Janssens wrote:
>> A long time ago in a galaxy far, far away, Sven Daems wrote:
>>
>>>> if ($cmbMaand==September) {
>>>>
>>>> een dubbele = , anders schrijf je een toekenning...
>>>>
>>>
>>> Als ik dat doe dan wordt ik doorverwezen naar
>>> http://www.heidestoempers.be ipv
>>> http://www.heidestoempers.be/Toertochten_xxx.htm
>>
>> Je moet September tussen quotes schrijven...
>
> ik moest de variabele die doorgegeven waren uitlezen mbv.
> $_GET['variabelenaam'] mischien werkt dit bij jou ook beter :)

Dat durft ook al wel eens helpen :)

maar 't zal toch ook tussen quotes moeten, anders denkt PHP dat
September de naam van een constante is...


> --spatie
> Het streepje wordt een puntje, voor een prive bericht.
>
>
>



--
Joris "flotspe" Janssens
http://www.xhtml.be/inferno/

Arnoud Galactus Engelfriet
06/10/03, 19:45
In article <Xns940CC01931F2Dflotspexhtmlbe@195.130.132.70>,
Joris Janssens <wants.sex@xhtml.be> wrote:
>maar 't zal toch ook tussen quotes moeten, anders denkt PHP dat
>September de naam van een constante is...

PHP heeft de enge gewoonte om niet herkende constanten te
behandelen als strings. Ze worden dus gewoon als string
afgedrukt, en je kunt ze vergelijken met 'echte' strings.

<?php
echo aa."\n";
if (aa == "aa") {
echo "ja hoor\n";
} else {
echo "oh nee toch niet\n";
}?>

galactus@omehenk:~> php -q t.php
aa
ja hoor
galactus@omehenk:~>

Arnoud
PS: ik ben waarschijnlijk de enige die PHP schrijft of 't C is...
--
Arnoud Engelfriet, Dutch patent attorney - Speaking only for myself
Patents, copyright and IPR explained for techies: http://www.iusmentis.com/

Sven
06/10/03, 20:00
Joris Janssens wrote:
> A long time ago in a galaxy far, far away, Sven wrote:
>
>> Joris Janssens wrote:
>>> A long time ago in a galaxy far, far away, Sven Daems wrote:
>>>
>>>>> if ($cmbMaand==September) {
>>>>>
>>>>> een dubbele = , anders schrijf je een toekenning...
>>>>>
>>>>
>>>> Als ik dat doe dan wordt ik doorverwezen naar
>>>> http://www.heidestoempers.be ipv
>>>> http://www.heidestoempers.be/Toertochten_xxx.htm
>>>
>>> Je moet September tussen quotes schrijven...
>>
>> ik moest de variabele die doorgegeven waren uitlezen mbv.
>> $_GET['variabelenaam'] mischien werkt dit bij jou ook beter :)
>
> Dat durft ook al wel eens helpen :)
>
> maar 't zal toch ook tussen quotes moeten, anders denkt PHP dat
> September de naam van een constante is...

Sorry, dit was mijn fout :-) dat krijg je als je met een X aantal dingent
egelijk bezig bent :)

--
Het streepje wordt een puntje, voor een prive bericht.

Daniel Tryba
06/10/03, 20:30
In nl.internet.www.server-side Arnoud "Galactus" Engelfriet <galactus@stack.nl> wrote:
> <?php
> echo aa."\n";
> if (aa == "aa") {
> echo "ja hoor\n";
> } else {
> echo "oh nee toch niet\n";
> }?>
>
> galactus@omehenk:~> php -q t.php
> aa
> ja hoor
> galactus@omehenk:~>
>
> Arnoud
> PS: ik ben waarschijnlijk de enige die PHP schrijft of 't C is...

Nee, je onderdrukt foutmeldingen/warning/notices:

$ php4
<?php
echo aa."\n";
if (aa == "aa") {
echo "ja hoor\n";
} else {
echo "oh nee toch niet\n";
}?>

Notice: Use of undefined constant aa - assumed 'aa' in - on line 2
aa

Notice: Use of undefined constant aa - assumed 'aa' in - on line 3
ja hoor
$

--

Daniel Tryba

Sven Daems
06/10/03, 21:00
Beste

Allemaal al bedankt voor jullie hulp maar't werkt nog niet hoor. Als 'k
september tussen haakjes zet gaat hij nog altijd gewoon terug naar
www.heidestoempers.be, als'k $_GET[cmbMaand] er in vermeld dan wordt de
pagina zelfs nog ineens niet doorverwezen (hij blijft dus op een lege
http://www.heidestoempers.be/toertochten.php?cmbMaand=September&cmdOk=Zoek%27t+op
staan). De post van Arnoud snap ik niet echt.

Hieronder nog eens de code zoals ik ze nu heb. Het moet voor mij niet op
deze manier hoor, als er maar een werkende oplossing uit de bus komt ben ik
heel tevreden.


<?php

$_GET[cmbMaand]

if ($cmbMaand=="September") {
$URL=="http://www.heidestoempers.be/Toertochten_sept.htm";
header ("Location: $URL");
} elseif ($cmbMaand=="Oktober") {
$URL=="http://www.heidestoempers.be/Toertochten_okt.htm";
header ("Location: $URL");
} else {
$URL=="http://www.heidestoempers.be/Toertochten_nov.htm";
header ("Location: $URL");
}

?>


Met vriendelijke groeten

Sven Daems

Daniel Tryba
06/10/03, 21:15
In nl.internet.www.server-side Sven Daems <cyberbike9@hotmail.com> wrote:

FUP naar niwss, dit heeft immers niets met design te maken.

> Hieronder nog eens de code zoals ik ze nu heb. Het moet voor mij niet op
> deze manier hoor, als er maar een werkende oplossing uit de bus komt ben ik
> heel tevreden.
>
>
> <?php
>
> $_GET[cmbMaand]
>
> if ($cmbMaand=="September") {
> $URL=="http://www.heidestoempers.be/Toertochten_sept.htm";
> header ("Location: $URL");
> } elseif ($cmbMaand=="Oktober") {
> $URL=="http://www.heidestoempers.be/Toertochten_okt.htm";
> header ("Location: $URL");
> } else {
> $URL=="http://www.heidestoempers.be/Toertochten_nov.htm";
> header ("Location: $URL");
> }
>
> ?>

Levert bij mij op:
Parse error: parse error in - on line 5

Tijd om een PHP handleiding te lezen? Ik raad je
http://nl.php.net/manual/en/langref.php ten zeerste aan, de fouten in je
code kan je oplossen met
http://nl.php.net/manual/en/language.basic-syntax.instruction-separation.php
en
http://nl.php.net/manual/en/language.types.array.php#language.types.array.dont s

--

Daniel Tryba

Toni Van Remortel
06/10/03, 21:30
On Mon, 06 Oct 2003 17:38:43 +0200, Sven Daems wrote:

> Ik ben een redelijke newbie op't gebied van php maar toch wil ik een simpel
> phpscriptje schrijven.

Om alles in 1 file te steken:
toertochten.php

<?php
if ( !isset($_GET["cmdOk"]) )
{
?>
<!-- nog uitbreiden met headers enzo -->
<form action="toertochten.php" method="get">
<select size="1" name="cmbMaand">
<option selected></option>
<option value="sept">September</option>
<option value="okt">Oktober</option>
<option value="nov">November</option>
<option value="dec">December</option>
<option value="jan">Januari</option>
<option value="feb">Februari</option>
</select>
<input type="submit" value="Zoek't op" name="cmdOk"></p>
</form>
<?php
}
else
{
header('Location: Toertochten_'.$_GET["cmbMaand"].'.htm');
}
?>

Dat is dus veel korter, en redelijk dynamisch. Have fun.
--
Groeten, Toni
Nokelu - NoorderKempense Linux users
http://www.nokelu.be

Toni Van Remortel
06/10/03, 21:30
On Mon, 06 Oct 2003 19:16:52 +0000, Toni Van Remortel wrote:

> <form action="toertochten.php" method="get">

kan je action="<?php echo $_SERVER["PHP_SELF"];?>" van maken.
--
Groeten, Toni
Nokelu - NoorderKempense Linux users
http://www.nokelu.be

Sven Daems
06/10/03, 21:30
>
http://nl.php.net/manual/en/language.basic-syntax.instruction-separation.php
hier vind ik geen fout


>
http://nl.php.net/manual/en/language.types.array.php#language.types.array.dont s
'k had alle mogelijke combinaties met de haakjes al geprobeerd (geen,
'enkele', "dubbele")

mvg

Daniel Tryba
06/10/03, 21:30
In nl.internet.www.server-side Sven Daems <cyberbike9@hotmail.com> wrote:
>
>>
> http://nl.php.net/manual/en/language.basic-syntax.instruction-separation.php
> hier vind ik geen fout

Grappig, ik vind die wel. Dus was de code die je poste wel daadwerkelijk
de door jou gebruikte code?

--

Daniel Tryba

Daniel Tryba
06/10/03, 21:45
In nl.internet.www.server-side Toni Van Remortel <tonivr@chopout.pandora.be> wrote:
> <?php
> if ( !isset($_GET["cmdOk"]) )
> {
[knip]
> <?php
> }
> else
> {
> header('Location: Toertochten_'.$_GET["cmbMaand"].'.htm');
> }
> ?>
>
> Dat is dus veel korter, en redelijk dynamisch. Have fun.

Maar ook fout (Location dient absoluut te zijn) en nogal "bad practice"
door enig gebrek aan controle op de invoer.

--

Daniel Tryba

Sven Daems
06/10/03, 21:45
Jeps, bedankt, 't is misschien wel niet correct maar't werkt wel

bedankt allemaal

"Toni Van Remortel" <tonivr@chopout.pandora.be> wrote in message
news:pan.2003.10.06.19.19.20.579128@chopout.pandor a.be...
> On Mon, 06 Oct 2003 19:16:52 +0000, Toni Van Remortel wrote:
>
> > <form action="toertochten.php" method="get">
>
> kan je action="<?php echo $_SERVER["PHP_SELF"];?>" van maken.
> --
> Groeten, Toni
> Nokelu - NoorderKempense Linux users
> http://www.nokelu.be
>

Robrecht Jacques
06/10/03, 21:45
Sven Daems wrote:
> Hieronder nog eens de code zoals ik ze nu heb. Het moet voor mij niet
> op deze manier hoor, als er maar een werkende oplossing uit de bus komt
> ben ik heel tevreden.
>
> <?php
>
> $_GET[cmbMaand]
>
> if ($cmbMaand=="September") {
> $URL=="http://www.heidestoempers.be/Toertochten_sept.htm";

Dit zal in elk geval
$URL="http://www.heidestoempers.be/Toertochten_sept.htm";
moeten zijn:
x=y is een toekenning (hierna heeft x de waarde van y)
x==y is een test (geeft waar terug als x gelijk is aan y)

De instructie $URL=="..." doet dus eigenlijk niets: het geeft gewoon onwaar
terug.

Robrecht

Sven Daems
06/10/03, 21:45
> Grappig, ik vind die wel. Dus was de code die je poste wel daadwerkelijk
> de door jou gebruikte code?

Ik had deze code gebruikt

<?php

$_GET[cmbMaand]

if ($cmbMaand=="September") {
$URL=="http://www.heidestoempers.be/Toertochten_sept.htm";
header ("Location: $URL");
} elseif ($cmbMaand=="Oktober") {
$URL=="http://www.heidestoempers.be/Toertochten_okt.htm";
header ("Location: $URL");
} else {
$URL=="http://www.heidestoempers.be/Toertochten_nov.htm";
header ("Location: $URL");
}

?>

Wat is er daar fout aan bij de <?php of ?>

Bart
06/10/03, 21:45
Sven Daems vertrouwde ons op Mon, 6 Oct 2003 21:39:46 +0200 in
<3f81c505$0$24163$ba620e4c@reader0.news.skynet.be> het volgende toe:

>$_GET[cmbMaand]

Moet daar geen ; achter?


--
Door mij verstuurde briefpost wordt immer voldoende gefrankeerd.

Daniel Tryba
06/10/03, 22:00
In nl.internet.www.server-side Sven Daems <cyberbike9@hotmail.com> wrote:
>
>> Grappig, ik vind die wel. Dus was de code die je poste wel daadwerkelijk
>> de door jou gebruikte code?
>
> Ik had deze code gebruikt
>
> <?php
> $_GET[cmbMaand]
[knip]
> ?>
>
> Wat is er daar fout aan bij de <?php of ?>

Niets, maar daar gaat
http://nl.php.net/manual/en/language.basic-syntax.instruction-separation.php
ook helemaal niet over. Ik zal 1 van de 2 regels op deze pagina even
quoten en het sleutel woord onderstrepen en je code inkorten tot de
regel waar op het fout gaat:
Instructions are separated the same as in C or Perl - terminate each
statement with a semicolon.
^^^^^^^^^

MAW ik raad je nogmaals aan een handleiding te gaan lezen voor je verder
gaat, er wordt wel vaker in deze groep gevraagt naar goede
nederlandstalige php beginners boeken, doorzoek dus even de archiven.

--

Daniel Tryba

Arnoud Galactus Engelfriet
06/10/03, 22:00
In article <3f81b997$0$24164$ba620e4c@reader0.news.skynet.be>,
Sven Daems <cyberbike9@hotmail.com> wrote:
>$_GET[cmbMaand]

Zo heet de variabele waarin de maand staat die je in het
formulier hebt ingevuld. Er is dus geen variabele $cmbMaand.

>if ($cmbMaand=="September") {

Je moet hier dus
if ($_GET[cmdMaand]=="September") {
van maken.

> $URL=="http://www.heidestoempers.be/Toertochten_sept.htm";

De == gebruik je om te vergelijken. Gebruik = om iets toe te
kennen:
$URL="http://www.heidestoempers.be/Toertochten_sept.htm";

Arnoud

--
Arnoud Engelfriet, Dutch patent attorney - Speaking only for myself
Patents, copyright and IPR explained for techies: http://www.iusmentis.com/

Joris Janssens
06/10/03, 22:15
A long time ago in a galaxy far, far away, Sven Daems wrote:

> Hieronder nog eens de code zoals ik ze nu heb. Het moet voor mij
> niet op deze manier hoor, als er maar een werkende oplossing uit
> de bus komt ben ik heel tevreden.
>
>
> <?php
>
> $_GET[cmbMaand]

moet zijn:

$cmbMaand=$_GET['cmbMaand'];



> if ($cmbMaand=="September") {
> $URL=="http://www.heidestoempers.be/Toertochten_sept.htm";
> header ("Location: $URL");
> } elseif ($cmbMaand=="Oktober") {
> $URL=="http://www.heidestoempers.be/Toertochten_okt.htm";
> header ("Location: $URL");
> } else {
> $URL=="http://www.heidestoempers.be/Toertochten_nov.htm";
> header ("Location: $URL");
> }
>
> ?>




--
Joris "flotspe" Janssens
http://www.xhtml.be/inferno/

Maarten Wierda
06/10/03, 23:00
Sven Daems wrote:

> <?php
>
> $_GET[cmbMaand]
>
> if ($cmbMaand=="September") {
> $URL=="http://www.heidestoempers.be/Toertochten_sept.htm";
> header ("Location: $URL");
> } elseif ($cmbMaand=="Oktober") {
> $URL=="http://www.heidestoempers.be/Toertochten_okt.htm";
> header ("Location: $URL");
> } else {
> $URL=="http://www.heidestoempers.be/Toertochten_nov.htm";
> header ("Location: $URL");
> }
>
> ?>

Los van de andere opmerkingen, ik zou hier een switch-statement
gebruiken. Zie ook
<http://nl.php.net/manual/en/control-structures.switch.php>.

--
Cheers, Maarten Wierda
cp: The Stooges - We Will Fall

Q: What do you call someone who hangs around with musicians?
A: A drummer.

Toni Van Remortel
07/10/03, 11:00
Op Mon, 06 Oct 2003 19:31:07 +0000, schreef Daniel Tryba :

> In nl.internet.www.server-side Toni Van Remortel
> <tonivr@chopout.pandora.be> wrote:
>> <?php
>> if ( !isset($_GET["cmdOk"]) )
>> {
> [knip]
>> <?php
>> }
>> else
>> {
>> header('Location: Toertochten_'.$_GET["cmbMaand"].'.htm');
>> }
>> ?>
>>
>> Dat is dus veel korter, en redelijk dynamisch. Have fun.
>
> Maar ook fout (Location dient absoluut te zijn) en nogal "bad practice"
> door enig gebrek aan controle op de invoer.

Dan maak je de location absoluut, het was maar als voorbeeld (en location
MOET niet absoluut zijn, daar het relatief tov de webroot is als er geen
protocol gespecifieerd is).
En de controle op invoer is ook snel verder uitgebreid. Trouwens, een
'foute' invoer rechtstreeks in de URL brengt je toch bij een niet
bestaande pagina.

Again: het was een voorbeeld.

--
Groeten, Toni Van Remortel
Wetenschappelijk medewerker, D-science lab, Hogeschool Antwerpen
Real time Linux for embedded systems: http://linemb.d-sciencelab.com