Ankündigung

Einklappen
Keine Ankündigung bisher.

Catchable Fatal Error

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Catchable Fatal Error

    Hallo Leute,

    jetzt hab ich mal wieder ein Problem. Ich bekomme bei folgendem Code:

    PHP-Code:
        $sql "INSERT INTO awayblocks(IDuser,start,end) VALUES('$block->IDuser','$sblock[1]->start','$sblock[1]->end')"
    folgende Fehlermeldung:

    Catchable fatal error: Object of class stdClass could not be converted to string

    Die Fehlermeldung klingt im ersten moment ja eindeutig. Also bin ich hingegangen und hab mir die verwendeten Variablen angeschaut.

    hier print_r($sblock) :

    Code:
    Array
    (
        [1] => stdClass Object
            (
                [start] => 2008-01-11 06:57:29
                [end] => 2008-01-11 16:21:39
            )
    )
    hier var_dump($sblock) :

    Code:
    array(1) {
      [1]=>
      object(stdClass)#9269 (2) {
        ["start"]=>
        string(19) "2008-01-11 06:57:29"
        ["end"]=>
        string(19) "2008-01-11 16:21:39"
      }
    }
    hier das ganze nochmal für $block:
    Code:
    stdClass Object
    (
        [IDuser] => 2
        [start] => 2008-01-11 06:57:29
        [endwork] => 2008-01-11 16:21:39
        [endblock] => 2008-01-14 03:52:21
        [awaybreak] => 1
        [nextday] => 1
    )
    object(stdClass)#8275 (6) {
      ["IDuser"]=>
      string(1) "2"
      ["start"]=>
      string(19) "2008-01-11 06:57:29"
      ["endwork"]=>
      string(19) "2008-01-11 16:21:39"
      ["endblock"]=>
      string(19) "2008-01-14 03:52:21"
      ["awaybreak"]=>
      string(1) "1"
      ["nextday"]=>
      string(1) "1"
    }
    Also ich kann beim besten willen nicht erkennen wo mein Fehler liegt. Die Variablen lassen sich mit echo auch problemlos Ausgeben, nur wollen die halt nicht in meinen SQL-String.

    Hat da jemand eine Idee? Ich war mir nicht sicher ob das ins Anfängerforum gehört

  • #2
    Naja erstmal würde ich Variablen vom String trennen.
    Ist besser zulesen und könnte den Fehler schon beheben.

    PHP-Code:
    $sql "INSERT INTO awayblocks(IDuser,start,end) VALUES('".$block->IDuser."','".$sblock[1]->start."','".$sblock[1]->end."')"
    Grad bei Arrays und Klassen bin ich mir nie so sicher wie PHP das aufnimmt.

    Kommentar


    • #3
      Das Problem was du ansprichst tritt ja nur auf wenn in der Variablenbezeichnung Anführungsstriche zu finden sind (assoziative arrays). Das ist hier ja nicht der Fall und auch mit deiner Lösung bekomme ich die selbe Fehlermeldung

      [edit]

      Ok doch nicht (kp was ich eben gemacht hab) du hattest recht. Fehlermeldung ist so weg, aber merkwürdig ist das trotzdem oder?

      Kommentar


      • #4
        Also das im String funktioniert nicht, zumindest nicht, wenn du keine { } um den Ausdruck legst.

        Kommentar


        • #5
          Nein, da PHP -> als String interpretiert.

          PHP-Code:
          $test[1] = "hallo";
          $test[2] = "Welt";

          echo 
          "$test[1]->$test[2]"

          Kommentar


          • #6
            Zitat von Varon
            Nein, da PHP -> als String interpretiert.
            Das ist auch wieder nicht richtig, denn echo "hallo $du->da"; würde funktionieren...

            Kommentar


            • #7
              Mit einem Array davor ist das aber etwas anderes in Strings. PHP geht da ohne { } nicht mehr als einen Schritt in die Tiefe.

              Wie gesagt "{$this->myArray["key"]->property}" sollte funktionieren. Man beachte auch die ", es entsteht trotzdem syntaktisch und logisch korrekter Quellcode.

              Kommentar


              • #8
                Zitat von Varon
                Nein, da PHP -> als String interpretiert.
                Das kannst du so generell nicht sagen. Gehen wir von der folgenden Klasse aus:
                PHP-Code:
                <?php
                class Xclass {
                    public 
                $start;
                    public 
                $end;
                    
                    public function 
                __construct($a$b){
                        
                $this->start $a;
                        
                $this->end $b;
                    }
                }
                $obj = new Xclass('xyz''blabla');
                $arr[0] = new Xclass(5566);
                $arr[1] = new Xclass('abcd''def');
                Ein Element eines solchen Objekts kannst du problemlos so ausgeben:
                PHP-Code:
                <?php
                echo "Das sind die Werte von \$obj: start = $obj->start, end = $obj->end
                "
                ;
                // oder
                $ele $arr[1];
                echo 
                "Das sind die Werte des 2. Array-Elementes: start = $ele->start, end = $ele->end
                "
                ;
                Wenn das Objekt selber aber ein Element eines Arrays ist
                PHP-Code:
                <?php
                echo "Das sind die Werte des 2. Array-Elementes: start = $arr[1]->start, end = $arr[1]->end
                "
                ;
                dann ist die Ausgabe fehlerhaft. "Normale" Array-Elemente mit nummerischen Indizes gehen problemlos
                PHP-Code:
                <?php
                echo "Drittes: $arr[3]
                "
                ;
                während assotiative Elemente einen Syntax-Fehler verursachen:
                PHP-Code:
                <?php
                echo "Letztes: $arr['letztes']
                ;

                Kommentar

                Lädt...
                X