Entwickler-Ecke

Off Topic - [php]If-Abfrage ist nicht true


Marco D. - Fr 09.03.07 17:20
Titel: [php]If-Abfrage ist nicht true
Warum wird die if-Abfrage nie true? Die Ausgabe ergibt: 20078. Also $year = 2007 und $month = 8.
"here" wird also nie ausgegeben. :gruebel:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  function Calender($month,$year) {
    echo $year;
    echo $month;
    if (is_numeric($year) && is_numeric($month)) {
      echo "here";
      $this->SetYear($year);
      $this->SetMonth($month);
    }
    else {
      $this->year = date('Y');
      $this->month = date('m');
    }
  }


Bex - Fr 09.03.07 17:33

Wo werden denn $year und $month erzeugt, wie wird die Funktion aufgerufen? Sind das tatsächlich numerics?


Marco D. - Fr 09.03.07 17:59

Funktion wird so aufgerufen:

C#-Quelltext
1:
2:
3:
4:
5:
6:
if ($mode == 'calender') {
  $month = $_GET['month'];
  $year = $_GET['year'];
  $calender = new Calender($month,$year);
  echo $calender->CreateHeader();
}

Es sind numerics: 2007 und 8 sind doch wohl numerics?!? Oder muss ich dir irgendwie umwandeln. Ich gehe atm davon aus, dass der Interpreter das automatisch als solchen behandelt.


alcaeus - Fr 09.03.07 18:08

Mein Tipp: Boxe die variablen auf den Typen den du haben willst:

Quelltext
1:
2:
$year = (int) $year;
$month = (int) $month;


Sehr zu empfehlen fuer GPC-Variablen :)

Und ja, eigentlich sollten das numerics sein, von welcher PHP-Version sprechen wir denn?

Greetz
alcaeus


Bex - Fr 09.03.07 18:11

Ich würde tippen, die per $_GET geholten Parameter sind Strings ...


Marco D. - Fr 09.03.07 18:11

user profile iconalcaeus hat folgendes geschrieben:
Mein Tipp: Boxe die variablen auf den Typen den du haben willst:

Quelltext
1:
2:
$year = (int) $year;
$month = (int) $month;

Werde ich probieren. Diese Methode war mir durchaus bekannt, nur dachte ich, is_numeric kommt damit klar.
user profile iconalcaeus hat folgendes geschrieben:
Sehr zu empfehlen fuer GPC-Variablen :)

Was sind GPC-Variablen?
user profile iconalcaeus hat folgendes geschrieben:

Und ja, eigentlich sollten das numerics sein, von welcher PHP-Version sprechen wir denn?

Version 5.0.4. => Läuft bei mir über xampp.
user profile iconbex hat folgendes geschrieben:

Ich würde tippen, die per $_GET geholten Parameter sind Strings ...

Ja sind sie ja auch, aber sie sind ja gewissermaßen auch Zahlen, deswegen ging ich davon aus, dass is_numeric zutrifft.


Bex - Fr 09.03.07 18:17

Muss an der Stelle passen, bin stark typisierte Sprachen gewohnt (Java, C#) ... ;-)


Marco D. - Fr 09.03.07 18:18

user profile iconBex hat folgendes geschrieben:
Muss an der Stelle passen, bin stark typisierte Sprachen gewohnt (Java, C#) ... ;-)

Kein Problem. ;)


GTA-Place - Fr 09.03.07 18:31

Jep, würde es trotzdem mit int umwandeln. Ich kenn das Problem von ActionScript (seit neuestem mein Gebiet :lol:). Selbst bei Zahlen, kann es vorkommen, dass der Interpreter mir an den Kopf wirft, dass er Zahlen braucht. Bei ActionScript wäre dann die Umwandlung einfach Number(x);.


alcaeus - Fr 09.03.07 18:36

Denke dir diesen Code:

Quelltext
1:
2:
3:
$year = '2007';
echo "is_numeric: ". ((is_numeric($year)) ? 'True' : 'False') .'';
echo "is_int: ". ((is_int($year)) ? 'True' : 'False') .'';


Bei mir (PHP 5.1.irgendwas) ergibt das erste True, das zweite False; also so wie es sein sollte. Manchmal kommt es vor, dass sich PHP dabei aber verschluckt.

Weil du gefragt hast: GPC-Variablen sind $_GET, $_POST, $_COOKIE; also alles das von "aussen" kommt und deshalb unsicher ist.

Ich habe mir eine Funktion namens request_gpc gebaut, die mir alles aus den GPC-Variablen raussaugen, so wie ich es will. Die Funktion macht auch eine strenge Typkonvertierung. Bei Interesse kann ich die Funktionen ja veroeffentlichen.

Greetz
alcaeus


Marco D. - Fr 09.03.07 19:16

Die Funktion würde mich interessieren. ;)
Aber warum is_numeric nun bei mir false ergibt, ist mir immer noch nicht klar. Oder habe ich was überlesen?


alcaeus - Fr 09.03.07 19:41

Das mit is_numeric() ist mir auch nicht klar. Aber wie du dir vielleicht denken kannst, ich hab solche Probleme nicht :mrgreen:

Die Funktion ist eigentlich mehr ne ganze Klasse...natuerlich mit statischen Methoden. Ich hab das Ganze mal online gestellt und beschrieben: http://www.alcaeus.org/viewtopic.php?t=292

Greetz
alcaeus