bool(false) und bool(true)

Matze202

Erfahrenes Mitglied
Hiho @all,

ich habe ein kleines Verständnisproblem mit dem bool(false) und bool(true), dies geht nicht in Richtung derer Bedeutung, sondern in Richtung derer Auswertung, weil die nicht funktionieren will.

Mein erster Versuch war, bei bool(true) etwas auszuführen.
PHP:
          var_dump($this->page_code_check($this->page[$i]));
//Var_Dump gibt mir immer das richtige bool(true) oder bool(false) aus.
// Jedoch die IF-Schleife führt die darin liegende Zeile auch bei false aus.
          if($this->page_code_check($this->page[$i])){
            $this->page[$i] = htmlspecialchars($this->page[$i]);
          }
Dann versuchte ich es etwas ausdrücklicher durchzusetzen.
PHP:
          var_dump($this->page_code_check($this->page[$i]));
          if($this->page_code_check($this->page[$i]) == true){
            $this->page[$i] = htmlspecialchars($this->page[$i]);
          }
Aber immer noch wird dies auch bei false ausgeführt.

Dann kam ich schon aus lauter Verzeiflung, auf die Idee, das bool(true) wie eine Funktion in die IF-Abfrage einzutragen, aber das brachte dann natürlich folgende Fehlermeldung:
Fatal error: Call to undefined function bool() in ....

Bei meiner stundenlangen Sucherei, fand ich bisher leider auch keine mir direkt weiterhelfenden Informationen, weil überall nur die Werte dargeboten, aber diese nicht verwendet wurden.

MfG. Matze202.

PS.: Ich hoffe, ihr könnt mich mal wieder mit einem Hinweis auf den rechten Weg zurück bringen.
 
Hi,

könnte es sein, dass deine page_code_check() Funktion bei den beiden Aufrufen etwas unterschiedliches zurückgibt?
Also im ersten Aufruf in Zeile 1 dein true, in der zweiten Zeile dann false?

Würde es mal so schreiben:
PHP:
$result = $this->page_code_check($this->page[$i]);

var_dump($result);
if($result) {
  // .....
}

Folgende 3 Bedingungen bedeuten in deinem Falle exakt das selbe, egal wie du es schreibst:
PHP:
if($variable)
if($variable == true)
if($variable === true)

Und bitte, bitte, bitte... If-Schleife... If ist keine Schleife, mir drehts da jedes Mal den Magen um.

Grüße,
BK
 
Danke @Bratkartoffel eine mögliche Änderung des Ergebnisses hatte ich ausgeschlossen, weil an den Vorgaben und dem überprüften keine Änderungen vorgenommen wurden, aber ich habe diese mögliche Fehlerquelle ausgeschlossen und das wie von dir beschrieben abgeändert, aber das Ergebnis ist leider noch das selbe.

Und Sorry für die den Ausdruck der Schleife, das hab ich leider immer noch von meinen Anfangszeiten im Wortschatz, aber du hast recht, es ist ein IF-Vergleich ;) Die Schleifen sind ja nur While, For und Foreach ;)
 
Hi,

ich weiß, so falsch gelernte Ausdrücke wird man schwer wieder los ;)
Bist du dir sicher, dass der Ausdruck im If-Block auch bei false ausgeführt wird?

Bau mal folgendes ein und achte auf die Ausgabe:
PHP:
          if($this->page_code_check($this->page[$i]) == true){
            $this->page[$i] = htmlspecialchars($this->page[$i]);
            die("if");
          } else {
            die("else");
         }

Grüße,
BK
 
Arrrggg, Fehler gefunden, $this->page[$i] hatte ja vorher schon den Eintrag bessen, welchen ich ja nur überschreiben wollte, da muss ich also rauslöschen und dann wirds klappen ;)

Ich Danke dir wieder, ab und zu brauch man nur mal nen Wink mit dem ... ;)

hast du bitte nen kleinen Tip noch, wie ich in einer FOR-Schleife (dies mal ist es Schleife ;) ) am einfachsten die nachfolgenden Einträge von $this->page einen Zähler runter ziehe?
 
Zuletzt bearbeitet:
Und bitte, bitte, bitte... If-Schleife... If ist keine Schleife, mir drehts da jedes Mal den Magen um.
Du kennst noch nicht die unendliche IF-Schleife? :p
PHP:
<?php
ifloop:
if (true) {
  goto ifloop;
}

Folgende zwei Zeilen bedeuten nur dann dasselbe, wenn $var ein boolean ist. Ansonsten kommt "Type Juggling" ins Spiel, bspw. ist (1 == true) wahr, wohingegen (1 === true) falsch ist.
PHP:
if ($var == true)
if ($var === true)

@Matze202 Ich weiß nicht, was du mit "einen Zähler runter ziehen" meinst. Meinst du Folgendes?
PHP:
for ($i=10; $i > 0; $i--) {
  // TODO
}
 
@ComFreek mit dem Zähler habe ich das wieder falsch betitelt, ich meine den Array-Key, den ich mit dem For durchlaufe, nur habe ich das Problem, wenn ich im FOR mit array_splice einen Eintrag rauslösche, möchte ich die nachfolgenden Einträge ran ziehen und somit die Lücke schließen und dann noch den Rest mit $this->page_code_check($this->page[$i]) überprüfen und danach mit htmlspecialchars überarbeiten.

Gruß Matze202.
 
Du kennst noch nicht die unendliche IF-Schleife? :p
PHP:
<?php
ifloop:
if (true) {
  goto ifloop;
}
Stimmt, seit Version 5.3 ist PHP ja endlich eine vollwertige Programmiersprache ;) https://stackoverflow.com/questions/723324/php-and-the-goto-statement-to-be-added-in-php-5-3
Kannte ich aber noch nicht, jetzt wechselt sich der kalte Schauer am Rücken mit der Faszination von der Anmut der Schleife ab :D

@Matze202 Hast du noch Fragen zu dem Thema? Evtl mit einem neuen Codeausschnitt?

Grüße,
BK
 
Wieso möchtest du mit array_splice() Arrayelemente beim Durchlaufen verändern?
Wenn du dies nicht benötigst, reicht eine einfache for each-Schleife:
PHP:
foreach($this->pages as $page) {
 // ...
}
 
danke @ComFreek ;)

es funktioniert super ;)

PHP:
  private function page_code_check(){
    foreach($this->page as $key => $value){
      $sql = "SELECT id FROM max_pages WHERE aktiv = 1 AND page_code = '".htmlspecialchars($value)."'";
      $result = $this->db->query($sql);
      if($result->num_rows >= 1){
        if(!isset($i)){
          $this->page[$key] = htmlspecialchars($value);
        }else{
          $this->page[$i] = htmlspecialchars($value);
          $i++;
        }
      }else{
        if(!isset($i)){
          array_splice($this->page,$key,1);
          $i = $key;
        }else{
          array_splice($this->page,$i,1);
          $i++;
        }
      }
    }
  }

ich wollte es zwar etwas kürzer haben, aber wichtig ist, dass es funktioniert ;)

ich staune sowieso, das ich mir binnen fast 2 wochen, das objektorientierte programmieren aneignen konnte ;)
 
Zurück