Heinz: GeisterArray, da und doch nicht da

Hi,
ich bekomme folgende Fehlermeldung:

Warning: date() expects parameter 2 to be long, string given in....

  
if($w['ModificationDate']){  
echo '<h5>DER WERT IST VORHANDEN</h5>';  
$lastmod  = date("D, d.m.Y",$w['ModificationDate']);  
}

Das liegt daran, dass $w['ModificationDate'] gar nicht existiert wie mir print_r($w) auch zeigt.

Nur, die If reagiert da anders und gibt den Text '<h5>DER WERT IST VORHANDEN</h5>' aus, was wohl bedeutet es würde doch existieren.

Was mache ich falsch?

Heinz

  1. Hi,

    Was mache ich falsch?

    Schau dir mal die Funktionen empty(), isset() an oder verwende eine genauere if Abfrage ==, != ...

    Dein Array wird wohl schon geladen sein, bzw. $w['ModificationDate'] ist vorhanden, aber leer.

    Gruß, Chrisi

    1. Hi,

      Schau dir mal die Funktionen empty(), isset() an oder verwende eine genauere if Abfrage ==, != ...

      Du meinst so(?):
      if(isset($w['ModificationDate']))

      oder so:
      if(!empty($w['ModificationDate']))

      Ändert nichts.

      Dein Array wird wohl schon geladen sein, bzw. $w['ModificationDate'] ist vorhanden, aber leer.

      Klar das Array ist geladen aber nicht mit dem Key 'ModificationDate', sonst würde print_r($w) das auch anzeigen, auch wenn leer, oder?

      Heinz

  2. Moin!

    Warning: date() expects parameter 2 to be long, string given in....

    Warnung, die Funktion date() erwartet, dass der zweite Parameter eine Zahl sein soll, es kommt aber ein String...

    if($w['ModificationDate']){

    Dieser Test prüft nur, ob der Variableninhalt zu true oder false evaluiert - aber nicht, was denn konkret drin steht, wenn es zu true evaluiert.

    Eine vernünftige Prüfung des Variableninhalts führt man mit var_dump() durch.

    echo '<h5>DER WERT IST VORHANDEN</h5>';
    $lastmod  = date("D, d.m.Y",$w['ModificationDate']);
    }

    
    >   
    > Das liegt daran, dass $w['ModificationDate'] gar nicht existiert wie mir print\_r($w) auch zeigt.  
      
    Ich vermute, du hast auch noch ein paar Tippfehler integriert, und greifst irgendwo auf den falschen Wert zu, ohne es zu bemerken.  
      
    
    > Was mache ich falsch?  
      
    Deine Fehlersuchstrategie ist verbesserungswürdig.  
      
    Stelle PHP so ein, dass alle Fehler gezeigt werden, auch die Notices. Wenn du auf nicht existierende Variablen zugreifst, kriegst du eine Notice, die dich auf das mögliche Problem hinweist.  
      
    [error_reporting(E_ALL);](http://de.php.net/manual/en/function.error-reporting.php)  
      
     - Sven Rautenberg
    
    1. Hi,

      »» Warning: date() expects parameter 2 to be long, string given in....

      Warnung, die Funktion date() erwartet, dass der zweite Parameter eine Zahl sein soll, es kommt aber ein String...

      Ja ist klar, nur wo soll der herkommen?

      Eine vernünftige Prüfung des Variableninhalts führt man mit var_dump() durch.

      Unterscheidet sich nicht sonderlich von print_r(), und ein Test brachte das gleiche Resultat.

      »» Das liegt daran, dass $w['ModificationDate'] gar nicht existiert wie mir print_r($w) auch zeigt.

      Ich vermute, du hast auch noch ein paar Tippfehler integriert, und greifst irgendwo auf den falschen Wert zu, ohne es zu bemerken.

      Sicherheitshalber alles copy&paste, also kein Tippfehler.

      »» Was mache ich falsch?

      Deine Fehlersuchstrategie ist verbesserungswürdig.

      Normalerweise komme ich zurecht. Das Seltsame ist, wenn ich ein Beispiel aus den Werten erstelle die mir print_r gibt, passiert kein Fehler:

        
      <?php  
        
      $w[Title] = 'Suche der Maerkischen Allgemeinen';  
      $w[Summary] = 'Dortmund (dpa) genommen haben soll, muss als Baecker weiterbeschaeftigt werden. Das hat das Arbeitsgericht Dortmund entschieden.';  
      $w[Url] = 'http://www.maerkischeallgemeine.de/cms/beitrag/11452518/63589/Jaehriger-muss-im-Broetchenbelag-Fall-weiterbeschaeftigt-werden.html';  
      $w[ClickUrl] = 'http://www.maerkischeallgemeine.de';  
      $w[NewsSource] = 'Maerkische Allgemeine';  
      $w[NewsSourceUrl] = 'http://www.maerkischeallgemeine.de/';  
        
        
      if($w['ModificationDate']){  
      echo '<h5>DER WERT IST VORHANDEN</h5>';  
      $lastmod  = date("D, d.m.Y",$w['ModificationDate']);  
      }  
        
      // Mal sehen ob eine Fehlermeldung kommt  
      echo $lastmod  = date("D, d.m.Y",$w['ModificationDate']);  
        
      ?>  
        
      
      

      error_reporting(E_ALL);

      Das nutze ich natürlich, ändert aber auch nichts an der Sachlage.

      Heinz

      1. Moin!

        »» Eine vernünftige Prüfung des Variableninhalts führt man mit var_dump() durch.
        »»

        Unterscheidet sich nicht sonderlich von print_r(), und ein Test brachte das gleiche Resultat.

        Welches du nachhaltig verschweigst.

        »» Ich vermute, du hast auch noch ein paar Tippfehler integriert, und greifst irgendwo auf den falschen Wert zu, ohne es zu bemerken.

        Sicherheitshalber alles copy&paste, also kein Tippfehler.

        Ok, aber jetzt ist halt unklar:

        Normalerweise komme ich zurecht. Das Seltsame ist, wenn ich ein Beispiel aus den Werten erstelle die mir print_r gibt, passiert kein Fehler:

        <?php

        $w[Title] = 'Suche der Maerkischen Allgemeinen';
        $w[Summary] = 'Dortmund (dpa) genommen haben soll, muss als Baecker weiterbeschaeftigt werden. Das hat das Arbeitsgericht Dortmund entschieden.';
        $w[Url] = 'http://www.maerkischeallgemeine.de/cms/beitrag/11452518/63589/Jaehriger-muss-im-Broetchenbelag-Fall-weiterbeschaeftigt-werden.html';
        $w[ClickUrl] = 'http://www.maerkischeallgemeine.de';
        $w[NewsSource] = 'Maerkische Allgemeine';
        $w[NewsSourceUrl] = 'http://www.maerkischeallgemeine.de/';

        if($w['ModificationDate']){
        echo '<h5>DER WERT IST VORHANDEN</h5>';
        $lastmod  = date("D, d.m.Y",$w['ModificationDate']);
        }

        // Mal sehen ob eine Fehlermeldung kommt
        echo $lastmod  = date("D, d.m.Y",$w['ModificationDate']);

        ?>

          
        Was produziert dieser Code als Ausgabe? Entspricht das deinen Erwartungen?  
          
        Wenn ja (meine Erwartung: Es gibt kein <h5>), dann ist die einzige Erklärung für die Abweichung von diesem Code zu deinem eigentlichen Skript, dass die Variable $w anderen Inhalt hat.  
          
        Was sagt var\_dump()? Eine übersichtliche Anzeige erhältst du, wenn du die Ausgabe in <pre>-Tags setzt:  
          
        echo "<pre>"; var\_dump($w); echo "</pre>";  
          
         - Sven Rautenberg
        
        1. Hi,

          »» Unterscheidet sich nicht sonderlich von print_r(), und ein Test brachte das gleiche Resultat.

          Welches du nachhaltig verschweigst.

          Weiss zwar nicht was das ändern soll, aber bitte:

          <pre>array(6) {  
            ["Title"]=>  
            string(36) "Suche der Märkischen Allgemeinen:"  
            ["Summary"]=>  
            string(256) "Dortmund (dpa) - Ein 26-jähriger Bäcker aus dem westfälischen Bergkamen, der sich bei der Arbeit unerlaubt einen Brötchenbelag genommen haben soll, muss als Bäcker weiterbeschäftigt werden. Das hat das Arbeitsgericht Dortmund entschieden."  
            ["Url"]=>  
            string(130) "http://www.maerkischeallgemeine.de/cms/beitrag/11452518/63589/Jaehriger-muss-im-Broetchenbelag-Fall-weiterbeschaeftigt-werden.html"  
            ["ClickUrl"]=>  
            string(130) "http://www.maerkischeallgemeine.de/cms/beitrag/11452518/63589/Jaehriger-muss-im-Broetchenbelag-Fall-weiterbeschaeftigt-werden.html"  
            ["NewsSource"]=>  
            string(21) "Maerkische Allgemeine"  
            ["NewsSourceUrl"]=>  
            string(35) "http://www.maerkischeallgemeine.de/"  
          }  
          </pre>
          

          Was produziert dieser Code als Ausgabe? Entspricht das deinen Erwartungen?

          Ja.

          Wenn ja (meine Erwartung: Es gibt kein <h5>), dann ist die einzige Erklärung für die Abweichung von diesem Code zu deinem eigentlichen Skript, dass die Variable $w anderen Inhalt hat.

          Keine Ahnung was du meinst. Es gibt kein <h5>)....?

          Was sagt var_dump()? Eine übersichtliche Anzeige erhältst du, wenn du die Ausgabe in <pre>-Tags setzt:

          echo "<pre>"; var_dump($w); echo "</pre>";

          Weiss zwar immer noch nicht den Sinn, nachdem ich bereits ein komplettes Beispiel reingestellt habe was auf print_r basiert, aber du worst mich ja bestimmt gleich erleuchten ;-)

          Heinz

          1. Moin!

            »» »» Unterscheidet sich nicht sonderlich von print_r(), und ein Test brachte das gleiche Resultat.
            »»
            »» Welches du nachhaltig verschweigst.
            »»

            Weiss zwar nicht was das ändern soll, aber bitte:

            Ist das der var_dump aus dem Originalskript direkt vor der IF-Abfrage?

            »» Was produziert dieser Code als Ausgabe? Entspricht das deinen Erwartungen?
            »»

            Ja.

            »» Wenn ja (meine Erwartung: Es gibt kein <h5>), dann ist die einzige Erklärung für die Abweichung von diesem Code zu deinem eigentlichen Skript, dass die Variable $w anderen Inhalt hat.
            »»

            Keine Ahnung was du meinst. Es gibt kein <h5>)....?

            Weil $w['ModificationDate'] im Testskript nicht definiert wird, wird kein <h5> ausgegeben.

            Weiss zwar immer noch nicht den Sinn, nachdem ich bereits ein komplettes Beispiel reingestellt habe was auf print_r basiert, aber du worst mich ja bestimmt gleich erleuchten ;-)

            Ein Beispiel bringt mir nichts, wenn's darum geht, Originaldaten sehen zu wollen. :)

            - Sven Rautenberg

            1. Hi,

              Ist das der var_dump aus dem Originalskript direkt vor der IF-Abfrage?

              Natürlich.

              Weil $w['ModificationDate'] im Testskript nicht definiert wird, wird kein <h5> ausgegeben.

              Genau, und seltsamerweise funktioniert das im Orginalscript nicht. Siehe Anfangsposting. Da wird eben <h5> ausgegeben obwohl gar nichts vorhanden sein kann.

              Ein Beispiel bringt mir nichts, wenn's darum geht, Originaldaten sehen zu wollen. :)

              Ok, aber wie schon gesagt, weder bei print_r noch bei var_dump vorhanden, also warum greift die If anweisung nicht bzw. tut sie ja, also woher kommt der ominöse String der bei print_r nicht vorhanden ist? Echt das reinste Geisterschiff;-)

              Heinz

      2. Hi Heinz,

        $w[Title] = 'Suche der Maerkischen Allgemeinen';
        $w[Summary] = 'Dortmund (dpa) genommen haben soll, muss als Baecker weiterbeschaeftigt werden. Das hat das Arbeitsgericht Dortmund entschieden.';
        $w[Url] = 'http://www.maerkischeallgemeine.de/cms/beitrag/11452518/63589/Jaehriger-muss-im-Broetchenbelag-Fall-weiterbeschaeftigt-werden.html';
        $w[ClickUrl] = 'http://www.maerkischeallgemeine.de';
        $w[NewsSource] = 'Maerkische Allgemeine';
        $w[NewsSourceUrl] = 'http://www.maerkischeallgemeine.de/';

          
        Hast du wirklich das Error-Reporting auf E\_ALL stehen, wie Sven es vorgeschlagen hat? Wenn ja, dann müssten hier auf jeden Fall schon mal 6 Notices ausgespuckt werden. Oder hast du die Konstanten wirklich alle am Scriptanfang definiert? Also:  
          
        ~~~php
        define('Title', 'Title');  
        define('Summary', 'Summary');  
        // usw.
        

        In diesem Posting von dir sind nämlich als Index jeweils die Namen der Konstanten eingesetzt worden, was das Standardverhalten von PHP ist, wenn eine Konstante nicht existiert, aber mindestens eine Notice ausspucken sollte (bei E_ALL).

        Viele Grüße,
          ~ Dennis.

        1. Hi,

          Hast du wirklich das Error-Reporting auf E_ALL stehen, wie Sven es vorgeschlagen hat? Wenn ja, dann müssten hier auf jeden Fall schon mal 6 Notices ausgespuckt werden. Oder hast du die Konstanten wirklich alle am Scriptanfang definiert? Also:

          define('Title', 'Title');

          define('Summary', 'Summary');
          // usw.

          
          >   
          > In [diesem Posting von dir](https://forum.selfhtml.org/?t=184326&m=1221917) sind nämlich als Index jeweils die Namen der Konstanten eingesetzt worden, was das Standardverhalten von PHP ist, wenn eine Konstante nicht existiert, aber mindestens eine Notice ausspucken sollte (bei E\_ALL).  
          >   
            
          1\. Natürlich ist E\_ALL  
            
          2\. Ja es gibt einige Notices auf nicht definierte Variabeln die aber unerheblich sind und nichts mit der aktuellen Frage zu tun haben.  
            
          3\. Das Beispiel Array basiert, wie schon mehrfach <gebetsmuehle>geschrieben</gebetsmuehle> auf der Ausgabe von print\_r.  
            
          Das impliziert, dass das Originalarray nicht so deklariert wurde sondern vorhanden ist, genauer gesagt aus einem Object erzeugt wurde.  
            
            
          Fazit: Man kann es drehen und wenden wie man will, Tatsache egal wieviel Code ich hier noch posten soll, $w['ModificationDate'] ist einfach nicht existent, sofern ich var\_dump und print\_r glauben schenken darf. Somit ist jedweder weiterer Code belanglos und ändert nichts an dem Problem. Ich denke hier liegt schlichtweg ein BUG vor.  
            
          Im Moment versuche ich krampfhaft ein "postfähiges" Beispiel zu erstellen, dass den gleichen Fehler reprodukziert, bisher erfolglos.  
            
            
          Heinz  
            
            
            
            
            
          
          
          1. Hi,

            1. Das Beispiel Array basiert, wie schon mehrfach <gebetsmuehle>geschrieben</gebetsmuehle> auf der Ausgabe von print_r.

            var_export existiert.

            Das impliziert, dass das Originalarray nicht so deklariert wurde sondern vorhanden ist, genauer gesagt aus einem Object erzeugt wurde.

            Das könnte evtl.(!) auf ein Problem mit der Sichtbarkeit der Eigenschaften dieses Objektes hindeuten.
            In dem Sinne, dass die Eigenschaft durchaus sichtbar ist an der Stelle, wo die originale Fehlermeldung auftritt - nicht aber an der, wo du deine Kontrollausgabe machst.

            Fazit: Man kann es drehen und wenden wie man will, Tatsache egal wieviel Code ich hier noch posten soll, $w['ModificationDate'] ist einfach nicht existent, sofern ich var_dump und print_r glauben schenken darf.

            Darfst du vielleicht gar nicht, bzw. nicht in dem Sinne, in dem du es tust, siehe oben.
            Da "glaube" ich der If-Abfrage, die zur Ausführung des nachfolgenden Codes führt und zudem keine "undefined index"-Meldung wirft, schon eher.

            Somit ist jedweder weiterer Code belanglos und ändert nichts an dem Problem. Ich denke hier liegt schlichtweg ein BUG vor.

            Ich wage nach wie vor zu behaupten, dass dieser Bug aber bei *dir* liegt, und nicht bei PHP.

            Die Fehlermeldung ist absolut eindeutig - der Wert ist vorhanden, und lediglich von einem für date unbrauchbaren Typ.

            Im Moment versuche ich krampfhaft ein "postfähiges" Beispiel zu erstellen, dass den gleichen Fehler reprodukziert, bisher erfolglos.

            echo date('r', 'blahblubb');

            Bitte sehr, so einfach.
            Meldet, wie zu erwarten,
            Warning:  date() expects parameter 2 to be long, string given

            Wo hingegen
            echo date('r', (int) 'blahblubb');
            fehlerfrei "Thu, 01 Jan 1970 01:00:00 +0100" ausgibt.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
            1. Hi,

              »» 3. Das Beispiel Array basiert, wie schon mehrfach <gebetsmuehle>geschrieben</gebetsmuehle> auf der Ausgabe von print_r.

              var_export existiert.

              auch das habe ich längst getestet.

              Bitte sehr, so einfach.
              Meldet, wie zu erwarten,
              Warning:  date() expects parameter 2 to be long, string given

              Wo hingegen
              echo date('r', (int) 'blahblubb');
              fehlerfrei "Thu, 01 Jan 1970 01:00:00 +0100" ausgibt.

              Auch klar und sogar als erstes versucht. Was nützt das? Laut print_r nunmal nicht vorhanden und wenn ich mir die XML-Datei anschaue aus der ich dieses Array erzeuge, dann ist der Wert ebenso nicht vorhanden.

              Wenn ihr das alle so anzweifelt, dann sagt mir doch mal endlich wie es sein kann, dass hier ein String vermutet wird, der 100%ig nicht da sein kann?

              Heinz

              1. Hi,

                Auch klar und sogar als erstes versucht.

                Was genau versucht?

                Laut print_r nunmal nicht vorhanden und wenn ich mir die XML-Datei anschaue aus der ich dieses Array erzeuge, dann ist der Wert ebenso nicht vorhanden.

                Wieso versuchst du dann überhaupt auf ihn zuzugreifen?

                Wenn ihr das alle so anzweifelt, dann sagt mir doch mal endlich wie es sein kann, dass hier ein String vermutet wird, der 100%ig nicht da sein kann?

                Ich zweifle immer noch genau eins an: Dass deine Behauptung, der Wert könne "100%ig nicht da" sein, korrekt ist.

                MfG ChrisB

                --
                „This is the author's opinion, not necessarily that of Starbucks.“
                1. Hi,

                  »» Auch klar und sogar als erstes versucht.

                  Was genau versucht?

                  Den angeblichen String als (int) zu konvertieren.

                  »» Laut print_r nunmal nicht vorhanden und wenn ich mir die XML-Datei anschaue aus der ich dieses Array erzeuge, dann ist der Wert ebenso nicht vorhanden.

                  Wieso versuchst du dann überhaupt auf ihn zuzugreifen?

                  Sehr einfach, weil meistens in diesen XML-Dateien der Wert vorhanden ist, diesmal aber nicht. Die If Anweisung ist ja genau dafür da.

                  »» Wenn ihr das alle so anzweifelt, dann sagt mir doch mal endlich wie es sein kann, dass hier ein String vermutet wird, der 100%ig nicht da sein kann?

                  Ich zweifle immer noch genau eins an: Dass deine Behauptung, der Wert könne "100%ig nicht da" sein, korrekt ist.

                  100%ig laut print_r, das ist nicht diskussionsfähig, sondern FAKT.

                  Heinz

                  1. Hi,

                    100%ig laut print_r, das ist nicht diskussionsfähig, sondern FAKT.

                    So lange du kein testbares Beispiel lieferst, welches das Problem nachvollziehbar macht, ist das ganze m.E. jetzt nicht mehr diskussions*würdig*.

                    MfG ChrisB

                    --
                    „This is the author's opinion, not necessarily that of Starbucks.“
                    1. »» 100%ig laut print_r, das ist nicht diskussionsfähig, sondern FAKT.

                      So lange du kein testbares Beispiel lieferst, welches das Problem nachvollziehbar macht, ist das ganze m.E. jetzt nicht mehr diskussions*würdig*.

                      Nicht *fähig wäre OK, nicht *würdig ist schlichtweg arrogant.
                      Nur weil dir keine Erfahrungswerte und somit keine Lösung bei dem Problem einfällt, bedeutet das nicht zwangsweise, dass ein anderer das nicht vielleicht durch gezielte Fragen ermitteln kann.

                      Heinz

                      1. Hi,

                        »» 100%ig laut print_r, das ist nicht diskussionsfähig, sondern FAKT.

                        So lange du kein testbares Beispiel lieferst, welches das Problem nachvollziehbar macht, ist das ganze m.E. jetzt nicht mehr diskussions*würdig*.

                        Nicht *fähig wäre OK, nicht *würdig ist schlichtweg arrogant.

                        Es ist bisher für absolut keinen der ausser dir hier an der Diskussion Beteiligten möglich, dass Problem auch nur im geringsten nachzuvollziehen.

                        Nur weil dir keine Erfahrungswerte und somit keine Lösung bei dem Problem einfällt, bedeutet das nicht zwangsweise, dass ein anderer das nicht vielleicht durch gezielte Fragen ermitteln kann.

                        Das scheint ja bisher auch noch keinem anderen gelungen zu sein, die Beteiligung am Thread ist für ein PHP-Thema ja schon recht breit, und enthält auch Antworten von einigen Leuten hier aus dem Forum, die ich bzgl. PHP für recht kompetent einschätze.

                        Dass du dich auf die Ausgaben, die print_r & Co. dir bei XML-/Objekt-Verarbeitung unter ggf. speziellen Umständen liefern, nicht unbedingt felsenfest verlassen darfst, schrieb ich dir übrigens auch bereits - was du dann in einer Antwort auf Sven, wo er ähnliches schreibt, mit "endlich, der erste der mich versteht" beantwortest ...

                        MfG ChrisB

                        --
                        „This is the author's opinion, not necessarily that of Starbucks.“
                        1. »» Nicht *fähig wäre OK, nicht *würdig ist schlichtweg arrogant.

                          Es ist bisher für absolut keinen der ausser dir hier an der Diskussion Beteiligten möglich, dass Problem auch nur im geringsten nachzuvollziehen.

                          Das ist mir durchaus klar, ansonsten wäre mit garantiert selbst eine Lösung oder zumindest eine klare Begründung eingefallen und ich hätte mir die Frage hier sparen können. Aber, wo ein Fehler auftaucht, so seltsam er auch anmutet, kann auch ein Leser sein,d er sich an Ähnliches  erinnert.

                          Dass du dich auf die Ausgaben, die print_r & Co. dir bei XML-/Objekt-Verarbeitung unter ggf. speziellen Umständen liefern, nicht unbedingt felsenfest verlassen darfst, schrieb ich dir übrigens auch bereits - was du dann in einer Antwort auf Sven, wo er ähnliches schreibt, mit "endlich, der erste der mich versteht" beantwortest ...

                          Wenn du das meinst:

                          Das könnte evtl.(!) auf ein Problem mit der Sichtbarkeit der Eigenschaften dieses Objektes hindeuten.
                          In dem Sinne, dass die Eigenschaft durchaus sichtbar ist an der Stelle, wo die originale Fehlermeldung auftritt - nicht aber an der, wo du deine Kontrollausgabe machst.

                          ist das wohl nicht das Gleiche wie Svens Aussage, zumindest so wie ich die Deinige verstehe. Du versuchst mir einzureden ich würde die Kontrollausgabe an der falschen Stelle machen, was Quark ist.

                          Heinz

                          1. Hi,

                            Du versuchst mir einzureden ich würde die Kontrollausgabe an der falschen Stelle machen, was Quark ist.

                            Ich habe lediglich versucht, basierend auf dem Bisschen an Information, dass du das Problem betreffend bisher liefern konntest, mögliche Ursachen eines Fehlverständnisses aufzufinden.

                            In wie weit das weiterhelfen wird oder nicht, kann ich nicht im voraus absehen; zumal ich deinen Kenntnisstand auch nicht einschätzen kann.

                            MfG ChrisB

                            --
                            „This is the author's opinion, not necessarily that of Starbucks.“
              2. Moin!

                Wenn ihr das alle so anzweifelt, dann sagt mir doch mal endlich wie es sein kann, dass hier ein String vermutet wird, der 100%ig nicht da sein kann?

                Wir drehen uns ja augenscheinlich im Kreis.

                Du hast Code gepostet, der das Problem nicht aufweist, sondern so funktioniert, wie es zu erwarten war. Also ist das Beispiel zur Untersuchung des Problems nicht nutzbar.

                Dein Originalcode aber zeigt das Problem, nur behaupten deine Debugging-Ausgaben etwas über den Variableninhalt, was nicht mit dem Codeverhalten übereinstimmen kann.

                Entweder ist also der Variableninhalt schlecht debuggt, oder der Code nicht korrekt widergegeben.

                Ich gebe nur mal so zu bedenken: Wenn XML im Spiel ist, dann könnte es durchaus sein, dass dein XML-Parser kein wahres PHP-Array produziert, sondern irgendeine nette Objekt-Sonderform mit Gettern und Settern, die ein Array nur simulieren. Solch eine Konstruktion deckt man mit var_dump eventuell nicht auf.

                - Sven Rautenberg

                1. Hi,

                  Ich gebe nur mal so zu bedenken: Wenn XML im Spiel ist, dann könnte es durchaus sein, dass dein XML-Parser kein wahres PHP-Array produziert, sondern irgendeine nette Objekt-Sonderform mit Gettern und Settern, die ein Array nur simulieren. Solch eine Konstruktion deckt man mit var_dump eventuell nicht auf.

                  Endlich jemand der mich versteht. Da geht auch meine Vermutung hin.

                  Leider zeigen alle Typenprüfungen mir keine Arrayprobleme auf. Sicherheitshalber habe ich sogar getestet indem ich zwangsweise das Object alternativ durchlaufe:

                  function object2array($obj) {  
                  $_arr = is_object($obj) ? get_object_vars($obj) : $obj;  
                  foreach ($_arr as $key => $val) {  
                  # $x++;echo "<h5>$x</h5>"; // nur test  
                  $val = (is_array($val) || is_object($val)) ? object2array($val) : $val;  
                  $arr[$key] = $val;  
                  }  
                  return $arr; 
                  

                  Also werde ich weiter testen bis ich ein brauchbares Negativbeispiel hier einstellen kann.

                  Gruss
                  Heinz

                  1. Moin!

                    »» Ich gebe nur mal so zu bedenken: Wenn XML im Spiel ist, dann könnte es durchaus sein, dass dein XML-Parser kein wahres PHP-Array produziert, sondern irgendeine nette Objekt-Sonderform mit Gettern und Settern, die ein Array nur simulieren. Solch eine Konstruktion deckt man mit var_dump eventuell nicht auf.
                    »»

                    Endlich jemand der mich versteht. Da geht auch meine Vermutung hin.

                    Dann musst du wohl mal Reflection an den Start bringen, um die Objektinterna aufzudecken.

                    http://de2.php.net/reflection

                    Ich gehe einfach mal davon aus, dass hier PHP 5 verwendet wird, ansonsten wäre es definitiv von dir erwähnt worden, dass nicht.

                    - Sven Rautenberg

                2. Hi Sven,

                  Ich gebe nur mal so zu bedenken: Wenn XML im Spiel ist, dann könnte es durchaus sein, dass dein XML-Parser kein wahres PHP-Array produziert, sondern irgendeine nette Objekt-Sonderform mit Gettern und Settern, die ein Array nur simulieren. Solch eine Konstruktion deckt man mit var_dump eventuell nicht auf.

                  Darüber hab ich gestern auch schon nachgedacht, bin allerdings zu dem Schluss gekommen, dass du es nicht schaffst, den Namen der Klasse bzw. die Tatsache, dass $w ein Objekt ist vor var_dump() und print_r() zu verstecken.

                  Ich habs grade mal ausprobiert, einmal mit einer selbst geschriebenen Klasse (Quick'n Dirty) und einmal mit der PHP-Klasse ArrayObject():

                  <?php  
                    
                  class MyArr implements ArrayAccess {  
                    private $_data;  
                    public function __construct() {  
                      $this->_data = array();  
                    }  
                    public function offsetGet($k) {  
                      return $this->_data[$k];  
                    }  
                    public function offsetSet($k, $v) {  
                      $this->_data[$k] = $v;  
                    }  
                    public function offsetExists($k) {  
                      return isset($this->_data[$k]);  
                    }  
                    public function offsetUnset($k) {  
                      unset($this->_data[$k]);  
                    }  
                    public function __get($k) {  
                      return $this->_data[$k];  
                    }  
                    public function __set($k, $v) {  
                      $this->_data[$k] = $v;  
                    }  
                    public function __isset($k) {  
                      return isset($this->_data[$k]);  
                    }  
                    public function __unset($k) {  
                      unset($this->_data[$k]);  
                    }  
                  }  
                    
                  $w = new MyArr();  
                  $w['test'] = 'ABC';  
                  print_r($w);  
                  var_dump($w);  
                    
                  $w = new ArrayObject();  
                  $w['test'] = 'DEF';  
                  print_r($w);  
                  var_dump($w);
                  

                  Sowohl print_r() als auch var_dump() geben in beiden Fällen korrekt die Identität des Objekts wieder, also object(MyArr) bzw. object(ArrayObject).
                  Wobei man bei der MyArr-Klasse die __*-Methoden auch genauso gut weglassen kann, denn die werden nie genutzt, wenn man auf das Objekt wie auf ein Array zugreift.

                  Viele Grüße,
                    ~ Dennis.

      3. Hi,

        Normalerweise komme ich zurecht. Das Seltsame ist, wenn ich ein Beispiel aus den Werten erstelle die mir print_r gibt, passiert kein Fehler:

        Damit widersprichst du deiner eigenen Aussage, normalerweise würdest du "zurecht kommen".

        [...]
        if($w['ModificationDate']){
        echo '<h5>DER WERT IST VORHANDEN</h5>';
        $lastmod  = date("D, d.m.Y",$w['ModificationDate']);
        }

        // Mal sehen ob eine Fehlermeldung kommt
        echo $lastmod  = date("D, d.m.Y",$w['ModificationDate']);

        Wenn ich diesen Code bei mir Copy&Paste teste, kommt - neben, wie schon erwähnt wurde, zahlreichen Meldungen der Form
        Notice:  Use of undefined constant Title - assumed 'Title'
        am Ende auch die Meldung
        Notice:  Undefined index:  ModificationDate

        • und zwar einmal an der Stelle, wo du den nicht existenten Wert per if abzufragen versuchst, und dann nach dem if, wo du ihn als Parameter für date zu verwenden versuchst.
          Die Ausgabe der H5-Überschrift kommt natürlich nicht.

        Deine eingangs genannte Meldung

        Warning: date() expects parameter 2 to be long, string given

        kommt (wie zu erwarten) nicht.

        Folglich: Dein gezeigter Code passt nicht zum Problem, immer noch nicht.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hi,

          Folglich: Dein gezeigter Code passt nicht zum Problem, immer noch nicht.

          Das gibts es doch nicht.

          NOCHMAL FÜR ALLE: Der Beispielcode entspricht nahezu dem Originalcode. ausser dass das Array natürlich bereits vorhanden ist. Somit sollte der gleiche Fehler autreten wie im Original oder aber im Original eben KEIN Fehler wie im Beispiel.

          Heinz

  3. echo $begrüßung;

    Warning: date() expects parameter 2 to be long, string given in....

    if($w['ModificationDate']){

    echo '<h5>DER WERT IST VORHANDEN</h5>';
    $lastmod  = date("D, d.m.Y",$w['ModificationDate']);
    }

    
    > Das liegt daran, dass $w['ModificationDate'] gar nicht existiert wie mir print\_r($w) auch zeigt.  
    > Was mache ich falsch?  
      
    Deine Beschreibung passt nicht zum geposteten Code. Jedenfalls ist es für mich nicht nachvollziehbar. Deinen Code mit vorangestelltem  
      
      $w = array();  
      
    ausgeführt ergibt lediglich eine  
      
      Notice:  Undefined index:  ModificationDate in ...  
      
    An welcher Stelle machst du denn die Kontrollausgabe? Direkt vor dem geposteten Code?  
      
      
    echo "$verabschiedung $name";
    
    1. Hi,

      Deine Beschreibung passt nicht zum geposteten Code. Jedenfalls ist es für mich nicht nachvollziehbar. Deinen Code mit vorangestelltem

      Das ist das Problem, der Beispielcode funktioniert so wie der originalcode funktionieren sollte. Da das ganze Script sehr weitreichend ist ist eine Reproduktion des Fehlers sehr schwierig. Also teste ich erst mal was eigentlich so alles im Array $w drin ist. ModificationDate definitiv nicht, nicht mal als Key.

      Oder vereinfacht ausgedrückt:

      Warnmeldung sagt: $w['ModificationDate'] wäre ein String

      print_r und var_dump sagen: Es gibt gar kein $w['ModificationDate']

      Die If allerdings hält es jedoch mit der Warmeldung: $w['ModificationDate'] wäre ein String, der sich aber weder anzeigen, auslesen, verarbeiten, identifizieren lässt. Unglaublich!

      An welcher Stelle machst du denn die Kontrollausgabe? Direkt vor dem geposteten Code?

      Beides! Sowohl davor, als auch dahinter.

      Heinz

  4. Hi,

    ich bekomme folgende Fehlermeldung:

    poste bitte einen ausreichenden Code-Teil, *der Deine Debug-Ausgabeversuche enthält*, sowie das Ergebnis der Ausgabe (aus dem Quelltext des Resultats, nicht aus der Interpretation durch einen Browser).

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      poste bitte einen ausreichenden Code-Teil, *der Deine Debug-Ausgabeversuche enthält*, sowie das Ergebnis der Ausgabe (aus dem Quelltext des Resultats, nicht aus der Interpretation durch einen Browser).

      Das habe ich bereits mehrfach getan, mehr kann man wohl kaum hier einbringen es sein denn endlos lange Classes und Scripte um das ganze abzurunden.

      Und wenn du "genau" auf das achtest was ich hier als Ausgabe poste, wirst du erkennen, dass zb. <pre> nicht von der Browserausgabe stammen kann, sondern bereits vom Quelltext.

      Heinz

      1. Hi,

        »» poste bitte einen ausreichenden Code-Teil, *der Deine Debug-Ausgabeversuche enthält*, sowie das Ergebnis der Ausgabe (aus dem Quelltext des Resultats, nicht aus der Interpretation durch einen Browser).
        Das habe ich bereits mehrfach getan,

        bitte verlinke den Artikel, in dem Du einen relevanten Code-Ausschnitt gepostet hast, der eine Debug-Ausgabe durchführt.

        Und wenn du "genau" auf das achtest was ich hier als Ausgabe poste, wirst du erkennen, dass zb. <pre> nicht von der Browserausgabe stammen kann, sondern bereits vom Quelltext.

        Diese Debug-Ausgabe ist ohne Kontext und somit nutzlos.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  5. Hi,

    Warning: date() expects parameter 2 to be long, string given in....

    if($w['ModificationDate']){
    echo '<h5>DER WERT IST VORHANDEN</h5>';
    $lastmod  = date("D, d.m.Y",$w['ModificationDate']);
    }

    
    >   
    > Das liegt daran, dass $w['ModificationDate'] gar nicht existiert wie mir print\_r($w) auch zeigt.  
      
    Nein, das tut es ziemlich sicher \*nicht\*.  
    Computer allgemein und demzufolge auch PHP sind "zu dumm zum Lügen".  
    PHP sagt, der Wert ist an der Stelle, wo du ihn date als zweiten Parameter übergibst, vom Typ String - also sehe ich zunächst mal keinen Grund, ihm das nicht zu glauben.  
      
    
    > Nur, die If reagiert da anders und gibt den Text '<h5>DER WERT IST VORHANDEN</h5>' aus, was wohl bedeutet es würde doch existieren.  
      
    Nein, das bedeutet a) dass ein Wert vorliegt (und vom Typ String ist, statt long, was date gerne als zweiten Parameter hätte), und b) dass dein Debugging hier der Teil ist, der offenbar fehlschlägt.  
      
    MfG ChrisB  
      
    
    -- 
    „This is the author's opinion, not necessarily that of Starbucks.“
    
    1. Hi,

      »» Das liegt daran, dass $w['ModificationDate'] gar nicht existiert wie mir print_r($w) auch zeigt.

      Nein, das tut es ziemlich sicher *nicht*.
      Computer allgemein und demzufolge auch PHP sind "zu dumm zum Lügen".
      PHP sagt, der Wert ist an der Stelle, wo du ihn date als zweiten Parameter übergibst, vom Typ String - also sehe ich zunächst mal keinen Grund, ihm das nicht zu glauben.

      Und wie erklärst du dann das Fehlen bei var-dunp und print_r?

      »» Nur, die If reagiert da anders und gibt den Text '<h5>DER WERT IST VORHANDEN</h5>' aus, was wohl bedeutet es würde doch existieren.

      Nein, das bedeutet a) dass ein Wert vorliegt (und vom Typ String ist, statt long, was date gerne als zweiten Parameter hätte), und b) dass dein Debugging hier der Teil ist, der offenbar fehlschlägt.

      Der String ist aber nicht da, nada niente nothing.

      Heinz

      1. Hi,

        PHP sagt, der Wert ist an der Stelle, wo du ihn date als zweiten Parameter übergibst, vom Typ String - also sehe ich zunächst mal keinen Grund, ihm das nicht zu glauben.

        Und wie erklärst du dann das Fehlen bei var-dunp und print_r?

        Neben dem Verdacht, dass es wirklich an deinen Debug-Versuchen liegt - eventuell auch damit.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“