If waar ie nooit heengaat?

Pagina: 1
Acties:

  • Dentist
  • Registratie: December 2000
  • Laatst online: 06-09 16:24

Dentist

Next patient please...

Topicstarter
PHP:
1
<?// Lees de database uit en bekijk de eerstvolgende (of huidige) reservering$nu = time() - 4500;$query1 = ("SELECT * FROM reserveringen WHERE datum > '$nu' order by datum LIMIT 1") or die(mysql_error());$result = mysql_query($query1);$count = mysql_num_rows($result);//Er zijn geen nieuwe reserveringen (HIER GAAT IE NOOIT HEEN?!?!?!)if ($count = 0){$pass = "standaardpass";$rcon = "standaardrcon";$clantag = "GEEN";$minuut = "NVT";$Jaar = "NVT";}else{//Er zijn wel nieuwe reserveringenwhile ($answer1 = mysql_fetch_array($result) ){$pass = $answer1[pass];$rcon = $answer1[rcon];$clantag = $answer1[clannaam];$jaar = date("Y", $answer1[datum]);$maand = date("n", $answer1[datum]);$dag =  date("j", $answer1[datum]);$uur = date("G", $answer1[datum]);$minuut = date("i", $answer1[datum]);}}?>

Het probleem is alsvolgt. Ik lees een database uit en kijk of er reserveringen zijn. Als die er zijn, geen probleem, maar als die er niet zijn, wil ik dat er een aantal variabelen op standaardwaarden wordt gezet. Dat gebeurt niet, ook niet als ik eerst de while doe en dan de if. Waarschijnlijk zie ik iets heel doms over het hoofd, dat doe ik wel vaker, maar als iemand me zou kunnen helpen zou ik hem of haar heel dankbaar zijn.

$count heb ik al eens ge-echood en die geeft idd 1 of 0 aan, daar ligt het dus niet aan. De query is ook goed, gezien het feit dat ie het in de while ook doet.

Alleen die if-waarden worden nooit aangenomen, zelfs als $count = 0.

Dentist

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
==

  • grizzlybear
  • Registratie: Oktober 2001
  • Laatst online: 28-07 10:33
Het moet dan ook zijn if ($count == 0)

edit:


Iemand was me voor... maar dit is toch wel basis kennis naar wij dachten!


  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 14-12-2025
Op maandag 06 mei 2002 12:39 schreef Dentist het volgende:
PHP:
1
<?*KNIP*if ($count = 0){*KNIP*?>
Dit kan nooit een if is altijd met ==
dus
PHP:
1
<?if ($count == 0){?>

edit:

Zow derde :(

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
:7

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 11:02
Op maandag 06 mei 2002 12:42 schreef M4rt1nvW het volgende:
een if is altijd met ==
Niet altijd, natuurlijk. Er zijn veel situaties waarin een assignment in een if wel handig is, bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
if($fp=@fopen("bestand","r"))
{
  ...
  fclose($fp);
} else
{
  ...  
}

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 17:08

Knutselsmurf

LED's make things better

Die == of = is een fout die ikzelf ook regelmatig maak. Waarschijnlijk komt dat uit mijn Pascal/Delphi-tijdperk, waar de = gebruikt wordt als vergelijking en de := als assignment.

Storend in dit geval is, dat
PHP:
1
<?if ($variabele=$variabele2){}?>

wel een geldige constructie is. Het resultaat van de assignment is TRUE en dat wordt doorgegeven aan de if.

- This line is intentionally left blank -


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 11:02
Op maandag 06 mei 2002 13:35 schreef Knutselsmurf het volgende:
Het resultaat van de assignment is TRUE en dat wordt doorgegeven aan de if.
Weer even verbeteren: een assignment evalueert naar de waarde van het ding dat toegekend wordt (x=y) evalueert dus naar (y).

In dit voorbeeld zal ($count = 0) dan ook naar 0 (oftewel false) evalueren, waardoor de if-clausule altijd overgeslagen wordt.

Uit mijn vorige voorbeeld bleek al dat dit vaak wél handig is, al is het inderdaad een bron van fouten voor programmeurs die gewend zijn '=' te gebruiken voor andere dingen. Veel compilers waarschuwen dan ook in dubieuze gevallen; de PHP compiler helaas niet.

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 14-12-2025
Okeej, ik bedoelde dus eigenlijk:

een if waarin iets vergeleken wordt is altijd met == want = geeft een toekenning aan en == is de is-gelijk-aan operator.

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 14-12-2025
Op maandag 06 mei 2002 13:37 schreef Soultaker het volgende:

[..]

Weer even verbeteren: een assignment evalueert naar de waarde van het ding dat toegekend wordt (x=y) evalueert dus naar (y).

In dit voorbeeld zal ($count = 0) dan ook naar 0 (oftewel false) evalueren, waardoor de if-clausule altijd overgeslagen wordt.
Even ter controle, nog een vraagje:

Alles wat je toekent en geen 0 is geeft toch true terug?

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 17:08

Knutselsmurf

LED's make things better

Op maandag 06 mei 2002 13:37 schreef Soultaker het volgende:

[..]

Weer even verbeteren: een assignment evalueert naar de waarde van het ding dat toegekend wordt (x=y) evalueert dus naar (y).

In dit voorbeeld zal ($count = 0) dan ook naar 0 (oftewel false) evalueren, waardoor de if-clausule altijd overgeslagen wordt.

Uit mijn vorige voorbeeld bleek al dat dit vaak wél handig is, al is het inderdaad een bron van fouten voor programmeurs die gewend zijn '=' te gebruiken voor andere dingen. Veel compilers waarschuwen dan ook in dubieuze gevallen; de PHP compiler helaas niet.
Je hebt helemaal gelijk. Ik ben nog niet zo heel erg thuis in PHP. De constructie ken ik wel, maar nog niet helemaal dus :)

- This line is intentionally left blank -


  • Dentist
  • Registratie: December 2000
  • Laatst online: 06-09 16:24

Dentist

Next patient please...

Topicstarter
Holy crap..

Dat bedoelde ik dus met doms over het hoofd zien...

Wat noep. Thx.

Dentist

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Een handige manier om zulke standaard-fouten te voorkomen is de expressie omdraaien.

Als je je aanwent altijd
code:
1
if (0 == $count) { ...

te schrijven, krijg je een nette foutmelding, wanneer je perongeluk
code:
1
if (0 = $count) { ...

schrijft.

  • smaij
  • Registratie: November 2000
  • Laatst online: 20:39
Op maandag 06 mei 2002 14:03 schreef Dentist het volgende:
Holy crap..

Dat bedoelde ik dus met doms over het hoofd zien...

Wat noep. Thx.

Dentist
Je hoeft niet je eigen naam eronder te zetten...

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op maandag 06 mei 2002 14:07 schreef Poohbear het volgende:
code:
1
(0 == $count)
Ik heb nou een vaag idee dat dit trager is dan omgekeerd :?

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Op maandag 06 mei 2002 14:08 schreef Nielsz het volgende:

[..]

Ik heb nou een vaag idee dat dit trager is dan omgekeerd :?
Dan heb je wel een heel rare compiler... 't is gewoon het vergelijken van 2 veldjes, dat maakt volgens mij op processor-niveau al niks uit, en als 't dat doet, zou de compiler 't gewoon om moeten draaien.

  • MrFrans
  • Registratie: December 2000
  • Laatst online: 15-01 06:27

MrFrans

Always watching

(0 == $count)

das handig, dat ga maar'es aanleren.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 11:02
Op maandag 06 mei 2002 14:07 schreef Poohbear het volgende:
Als je je aanwent altijd
code:
1
if (0 == $count) { ...

te schrijven, krijg je een nette foutmelding, wanneer je perongeluk
code:
1
if (0 = $count) { ...

schrijft.
Dat is inderdaad wel een mooie manier om fouten te voorkomen, maar het ziet er zo wel 'gek' uit. Het werkt ook alleen als er een rvalue bijzit, natuurlijk. '($a = $b)' blijft foutgaan.
Pagina: 1