Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktions-Ausgabe in schleife geht nicht

Einklappen

Neue Werbung 2019

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

  • Funktions-Ausgabe in schleife geht nicht

    hallo,

    ich habe so eine Schleife zum ausgeben aller Artikel mit zeit. unten ist die Funktion die zeigt wie alt er jeweils ist, hab ich gegoogelt:

    PHP-Code:
    $result=@mysql_query("SELECT * FROM blog ORDER BY id");
    while(
    $row=@mysql_fetch_row($result))
    {
        
    $contentWeb.='<p>'.time_ago('@'.$row[2].'').'</p>';
    }
    echo 
    "".$contentWeb."";

    #Normal: echo time_ago('@1542737619');

    function time_ago($datetime$full=false){
    $now=new DateTime;
    $ago=new DateTime($datetime);
    $diff=$now->diff($ago);

    $diff->w=floor($diff->7);
    $diff->-= $diff->7;

    $string=array(
        
    'y' => 'Jahre',
        
    'm' => 'Monat',
        
    'w' => 'Woche',
        
    'd' => 'Tag',
        
    'h' => 'Stunde',
        
    'i' => 'Minute',
    );
        foreach(
    $string as $k => &$v){
            if(
    $diff->$k){
                if(
    $v=="Tag" || $v=="Monat")
                {
                    
    $v=$diff->$k ' ' $v . ($diff->$k 'en' '');
                }else{
                    
    $v=$diff->$k ' ' $v . ($diff->$k 'n' '');
                }
            }else{
                unset(
    $string[$k]);
            }
        }

        if(!
    $full$string=array_slice($string01);
        return 
    $string 'Vor ' implode(', '$string) : 'Vor 1 Minute';

    problem ist jetzt, die Seite bleibt weiß. habe schon alles mögliche probiert das in der Schleife zu ändern, aber nur mit dem Original-code geht es, aber dann eben direkt der Inhalt der DB:

    PHP-Code:
    $contentWeb.='<p>'.utf8_encode($row[2]).'</p>'
    Was ist da falsch ? :/

  • #2
    @mysql_query
    Du weisst was das @ vor einer Funktion bedeutet?

    Ausserdem sind mysql-Funktionen ohne das i hinten dran alle als veraltet gekennzeichnet, das steht rot im Handbuch unter Warning. wo liest du nach?
    Am besten du änderst das gleich alles inklusive der Verbindung auf Mysqli oder auf PDO.

    Wenn du keine Anzeige oder Fehler ausgegeben bekommst, kannst du ins Error-Log von PHP nachschauen. Schalte aber zudem das Error Reporting ein.

    Ich denke damit bist du schon mal eine Weile beschäftigt.

    Kommentar


    • #3
      also wenn ich mysql_query bzw. mysql_result zu mysqli_query ändere erhalte ich Fehler... dachte einfach ein i hinten dran ?

      und, meinst du das @ in zeile 4 ? aber wenn ich es ohne Schleife mache nutzt er ja die Function richtig...

      Kommentar


      • #4
        Zitat von WerWoPHP Beitrag anzeigen
        also wenn ich mysql_query bzw. mysql_result zu mysqli_query ändere erhalte ich Fehler... dachte einfach ein i hinten dran ?
        Bitte auf keinen Fall irgendwelche Fehlermeldungen verraten, es könnte helfen das Problem zu finden</ironie> einfach mit einem i ist es nicht ganz getan, die Verbindungskennung muss mit angegeben werden (siehe Handbuch).

        Zitat von WerWoPHP Beitrag anzeigen
        und, meinst du das @ in zeile 4 ? aber wenn ich es ohne Schleife mache nutzt er ja die Function richtig...
        Nein, das in den ersten beiden Zeilen - damit unterdrückst du Fehlermeldungen! Dreh außerdem error_reporting auf damit du evtl. auftretende Fehler auch angezeigt bekommst.

        Kommentar


        • #5
          ja gut, das mit PDO schaue ich als nächstes, erst mal will ich das mit unix fixen. das steht in meiner log :

          PHP Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (1471255200) at position 7 (2): Unexpected character' in /var/XXX.php:24\nStack trace:\n#0 /var/XXX.php(24): DateTime->__construct('1471255200')\n#1 /var/XXX.php(16): time_ago('1471255200')\n#2 {main}\n
          zeile 24 ist die :

          PHP-Code:
          $ago=new DateTime($datetime); 

          Kommentar


          • #6
            time... string... 14712... fällt dir was auf? Zu `PDO unix timestamp` wirst du auch was finden.
            [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

            Kommentar


            • #7
              also die Spalte ist ein integer. sehe grad, wenn ich eine row angebe die es nicht gibt, erhalte ich X-mal "Vor 1 Minute" hm

              Kommentar


              • #8
                Zitat von WerWoPHP Beitrag anzeigen
                also die Spalte ist ein integer.
                Das ist ein Fehler. Verwende eins der von MySQL dafür vorgesehenen Formate (z.B. DATETIME).

                Zitat von WerWoPHP Beitrag anzeigen
                sehe grad, wenn ich eine row angebe die es nicht gibt, erhalte ich X-mal "Vor 1 Minute" hm
                Das liegt an der nicht vorhandenen Fehlerbehandlung. $string ergibt in dem Fall in der return-Zeile false womit eben das "Vor 1 Minute" ausgegeben wird. Dein @ vor dem Timestamp ist übrigens notwendig (nicht vor den Funktionen!), nur dann erkennt DateTime::__construct() den Timestamp als solchen (ist im Handbuch leicht zu übersehen, das steht in der Hinweis-Box bei den Parametern), ich finde es aber sauberer den Timestamp über die entsprechende Methode explizit zu setzen.

                Kommentar


                • #9
                  Schleife zum ausgeben aller Artikel mit zeit.
                  Code:
                  "SELECT * FROM blog ORDER BY id"
                  Nicht alles in SQL machen ?
                  https://dev.mysql.com/doc/refman/5.5...functions.html

                  Kommentar

                  Lädt...
                  X