Toon posts:

[PHP] Else if perikelen met eenvoudige code

Pagina: 1
Acties:
  • 61 views sinds 30-01-2008

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
error_reporting ( E_ALL );
if ($_GET['$vari'] = "waarde1"){
$inc = "waarde1";
}
if ($_GET['$vari'] = "waarde2"){
$inc = "waarde2";
}
else {
echo "default waarde";
}
?>
<html>
<head>
<title></title>
</head>
<body>
<? 
echo "$inc";
?>
</body>
</html>


Bovenstaande is de pagina die ik aanroep met:
test.php?vari=waarde1 of test.php?vari=waarde2
of alleen test.php.

Bij test.php?vari=waarde1 moet de output "waarde 1" zijn
Bij test.php?vari=waarde2 moet de output "waarde 2" zijn
Bij test.php moet de output "default waarde" zijn

Nu geeft hij bij de drie wijzen waarop ik de pagina aanroep
telkens "waarde 2" als output. Ik zit me door te staren
op de code, maar ik kom er niet uit. Wie ziet de fout(en) ?

btw: ik krijg geen foutmelding verder.
btw2: ik weet dat ik bij de eerste twee ook gewoon een
echo kan gebruiken. Maar dan heb ik hetzelfde probleem overigens.

Bedankt alvast voor de moeite !

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 21-12-2025
Gebruik == in plaats van =

dus:
code:
1
2
3
4
5
6
if ($_GET['$vari'] == "waarde1"){
$inc = "waarde1";
}
if ($_GET['$vari'] =="waarde2"){
$inc = "waarde2";
}

[ Voor 73% gewijzigd door djexplo op 12-03-2005 20:22 ]

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-05 08:08

Janoz

Moderator Devschuur®

!litemod

= is een toekenningsoperator. == is een vergelijkingsoperator. Daarnaast werkt default waarde ook niet aangezien deze niet aan $inc wordt toegekend.

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


  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 10-03 13:21

tombo_inc

uhuh

je gebruikt in je if-statements de '=' ipv '==' en dat werkt niet :p

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition


  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 01-03 18:17
^^ what they said

en maak ook eens gebruik van elseif :)

[ Voor 6% gewijzigd door ludo op 12-03-2005 20:23 ]


  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Het moet trouwens ook $_GET['vari'] zijn, niet $_GET['$vari']..

Verwijderd

Topicstarter
B-com en Radiant gaan door voor de koelkast :)
Jullie beide oplossingen gecombineerd werkten perfect !

Ik moet alleen nog even aan de default versie werken, maar dat komt nu wel
goed !

Bedankt allen !

Verwijderd

Topicstarter
en de andere bedankt voor de ==
Hoewel ik dat wel wist, maar dat gaf foutmeldingen in combinatie met mijn oude
code, vandaar dat ik het met 1 = had geprobeerd ;)

Verwijderd

is case niet beter ?

  • Billie
  • Registratie: Januari 2003
  • Laatst online: 06-05 21:54
Waarom? Naar mijn idee is het even overzichtelijk als een if-else statement?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:53

crisp

Devver

Pixelated

Een beetje inspringen is ook wel aardig ;)

Persoonlijk gebruk ik vaak dit soort constructies:
PHP:
1
2
3
4
5
6
7
8
$validvalues = array('waarde1','waarde2');

if (isset($_GET['vari']) && in_array($_GET['vari'], $validvalues))
    $inc = $_GET['vari'];
else
    $inc = 'default waarde';

echo $inc;

[ Voor 7% gewijzigd door crisp op 13-03-2005 01:42 ]

Intentionally left blank


  • PanMan
  • Registratie: November 1999
  • Laatst online: 10-05 16:31

PanMan

Spun!

crisp schreef op zondag 13 maart 2005 @ 01:41:
Een beetje inspringen is ook wel aardig ;)

Persoonlijk gebruk ik vaak dit soort constructies:
PHP:
1
2
3
4
5
6
7
8
$validvalues = array('waarde1','waarde2');

if (isset($_GET['vari']) && in_array($_GET['vari'], $validvalues))
    $inc = $_GET['vari'];
else
    $inc = 'default waarde';

echo $inc;
Persoonlijk gebruik ik bij if constructies ALTIJD {} om de statements die gelden. Dat maakt het duidelijker waar je blok begint en eindigt, en maakt het eenduidiger als je een keer een tweede statement toevoegt...

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:53

crisp

Devver

Pixelated

het ligt een beetje aan de context; een IF waar waarschijnlijk nooit meerdere statements aangeplakt gaan worden zet ik zelfs vaak op 1 lijn:
PHP:
1
if ($foo) $value = 'bar';

In dit geval heb ik het over meerdere regels gespreid vanwege de leesbaarheid omdat de eerste IF conditie zelf al vrij lang is. Achteraf brackets toevoegen heb ik niet zoveel problemen mee. In dit geval zou je toch een parsing error krijgen op het moment dat je binnen de eerste IF een regel toe zou voegen zonder brackets te plaatsen...

Intentionally left blank


  • Sendy
  • Registratie: September 2001
  • Niet online
En verder is het gek dat de tweede if niet in de else van de eerste staat. Waar je nu "waarde1" verwacht krijg je "defaultwaardewaarde1".

Met dit soort simpel debug werk, hoor je trouwens misschien hier niet thuis.

Verwijderd

Topicstarter
Sendy schreef op zondag 13 maart 2005 @ 03:05:
Met dit soort simpel debug werk, hoor je trouwens misschien hier niet thuis.
Dat maak ik nog altijd zelf uit, niet ?

  • DizzyWeb
  • Registratie: Februari 2001
  • Nu online

DizzyWeb

Ondertiteld

Verwijderd schreef op zondag 13 maart 2005 @ 16:39:
[...]

Dat maak ik nog altijd zelf uit, niet ?
Nee, eigenlijk dus niet. Er wordt gewoon een bepaald niveau verwacht, dit soort dingen zijn gewoon in elke willekeurige tutorial terug te vinden.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Altijd haken gebruiken....ALTIJD, tenzij het een uitzondering is.

Maar neem bv dit:

PHP:
1
2
3
4
5
6
7
8
9
10
if ($y > 0) 
   $x = 0;
else $z = 0;
// en nu voeg je nog een check to later...
if ($y > 0) 
   if ($x > 0) $x = 0;
else $z = 0;
// desnoods als je geen verticale ruimte wilt verspillen doe je het zo
if ($y >0) {$x = 0;}
else {$z=0;}

[ Voor 27% gewijzigd door Zoijar op 13-03-2005 17:33 ]


Verwijderd

Topicstarter
Uiteindelijk heb ik dit ervan gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
#error_reporting ( E_ALL );
if ($_GET['dingetje'] == "boek"){
include "inc/boek.php";
}
elseif ($_GET['dingetje'] == "plank"){
include "inc/plank.php";
}
else {
include "inc/default.php";
}
?>


Werkt ok _/-\o_
Als ik de error reporting aanzet, dan krijg ik bij default nog
te zien dat de variabelen niet bestaan, maar goed dat klopt dan ook :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10-05 12:29

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op zondag 13 maart 2005 @ 16:39:
[...]

Dat maak ik nog altijd zelf uit, niet ?
Helaas. Sendy breng het misschien wat bot maar gelijk heeft ie wel. Bekijk P&W FAQ - Het FAQ/Beleid topic eens en P&W FAQ - Leer **** debuggen!!.

We gaan er hier vanuit dat je zelf in staat bent om te debuggen. De fouten die je nu hebt had je met enige moeite en vrij simpel zelf kunnen oplossen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.