Ankündigung

Einklappen
Keine Ankündigung bisher.

Geburtstagskalender auf php7 umstellen

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

  • Geburtstagskalender auf php7 umstellen

    Hallo, ich habe einen Geburtstagskalender auf php5 laufen und möchte diesen auf php7 tauglich umstellen.

    Leider komme ich nicht weiter:

    PHP-Code:
    // Zugangsdaten für die Datenbank
    $db_host '  ';
    $db_user '  ';
    $db_name '  ';
    $db_pass '  ';

    // Neue Datenbankverbindung herstellen
    $db = new mysqli($db_host$db_user$db_pass$db_name);

    function 
    datumdeutsch($datum) {
    $d explode("-",$datum);
    return 
    sprintf("%02d.%02d."$d[2], $d[1]);}

    function 
    aktuellesalter($geburtsdatum) {
    $datum explode('-'"$geburtsdatum");
    return 
    date('Y') - $datum[0] - intval(date('n') < $datum[1] || date('n') == $datum[1] && date('j') < $datum[2]);
    }

    // Pruefen ob die Datenbankverbindung hergestellt werden konnte
    if (mysqli_connect_errno() == 0)
    {
     
    // Query vorbereiten und an die DB schicken
     
    $sql 'SELECT `id`,
    `nachname`,
    `vorname`,
    `geburtstag`,
    `klasse`,
    YEAR( CURRENT_DATE( ) ) - YEAR( geburtstag )
    age,
    DATEDIFF(`geburtstag` + INTERVAL
    (YEAR(CURRENT_DATE) - YEAR(`geburtstag`) +
    IF(DATE_FORMAT(CURRENT_DATE, '
    %m%d') >
    DATE_FORMAT(`geburtstag`,'
    %m%d'), 1, 0))
    YEAR, CURRENT_DATE) AS '
    days_to_birthday'
    FROM
    `tblschueler`
    WHERE
       ((DATE_FORMAT(geburtstag, '
    %m%d')!=DATE_FORMAT(CURRENT_DATE, '%m%d'))&&
     (geburtstag!='
    0000-00-00'))
     ORDER BY
     `tagezumgeburtstag`
     limit `3`'
    ;



     
    $ergebnis $db->query$sql );
     
    // Anzahl gefunde Datensaetze ausgeben
     
    echo "<p>Es wurden " .$ergebnis->num_rows" Eintr&auml;ge gefunden.</p>";
     
    // Ergebnisse ausgeben
     
    while ($zeile $ergebnis->fetch_object())
     {

    echo 
    '<table><tr>
    <td width="70">'
    .$row[2].'</td>
    <td width="60"><center>'
    .datumdeutsch($row[3]).'</center></td>
    <td width="30"><center>('
    .$row[4].')</center></td>
    </tr>'
    ;
    echo 
    '</table>';}
    echo 
    "<center><img src="../images/sampledata/fruitshop/smile.gif" alt="Smiley Geburtstag">";

     
    // Resourcen freigeben
     
    $ergebnis->close();
    }
    else
    {
     
    // Es konnte keine Datenbankverbindung aufgebaut werden
     
    echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
    }
    // Datenbankverbindung schliessen
    $db->close();
    ?> 
    Vielleicht kann mir ja jemand helfen. Vielen Dank


  • #2
    Hallo, ich habe einen Geburtstagskalender auf php5 laufen und möchte diesen auf php7 tauglich umstellen.
    Was sagt Dir, dass erdas nicht ist?
    Gibts Fehler ?

    Kommentar


    • #3
      Das, was Du da gepostet hast, ist nicht mal PHP5 tauglich, bzw. hat nichts mit der Version zu tun, schau nur mal hier:
      PHP-Code:
      echo "<center><img src="../images/sampledata/fruitshop/smile.gif" alt="Smiley Geburtstag">"
      Das kann zuvor gar nicht gelaufen sein!
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche Tutorials

      Kommentar


      • #4
        Aktiviere mal dein error reporting https://php-de.github.io/jumpto/faq/#debugging


        PHP-Code:
         while ($zeile $ergebnis->fetch_object())
        echo 
        '
        // ...
        <td width="70">'
        .$row[2].'</td>
        <td width="60"><center>'
        .datumdeutsch($row[3
        .. fetch->object und Zugriff als Array wird nicht funktionieren! Ausserdem fehlt da htmlspecialchars() zur korrekten Behandlung des Ausgabekontextes zu HTML hin. So hast du eine Fehlerquelle und im Grunde auch eine XSS Lücke.
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Jetzt bekomme ich zumindest die aktuellen Geburtstage angezeigt, aber sobald ich den Teil hinzufüge kommt wieder nichts.

          $sql='SELECT id, nachname, vorname, geburtstag, klasse,
          YEAR( CURRENT_DATE( ) ) - YEAR( 'geburtstag' )
          age,
          DATEDIFF('geburtstag' + INTERVAL (YEAR(CURRENT_DATE) - YEAR('geburtstag') + IF(DATE_FORMAT(CURRENT_DATE, '%m%d') >
          DATE_FORMAT('geburtstag', '%m%d'), 1, 0))
          YEAR, CURRENT_DATE) AS 'days_to_birthday'
          FROM
          tblschueler
          WHERE
          geburtstag + INTERVAL YEAR(CURDATE())-YEAR('geburtstag') YEAR = CURDATE() limit3';

          if(!$result = $db->query($sql)){

          die('There was an error running the query [' . $db->error . ']');

          }

          Soll auf php 7 laufen.

          Kommentar


          • #6
            PHP-Code:
            $sql='SELECT id, nachname, vorname, geburtstag, klasse,
            YEAR( CURRENT_DATE( ) ) - YEAR( '
            geburtstag' )
            age,
            DATEDIFF('
            geburtstag' + INTERVAL (YEAR(CURRENT_DATE) - YEAR('geburtstag') + IF(DATE_FORMAT(CURRENT_DATE, '%m%d') >
            DATE_FORMAT('
            geburtstag', '%m%d'), 1, 0))
            YEAR, CURRENT_DATE) AS '
            days_to_birthday'
            FROM
             tblschueler
            WHERE
               geburtstag + INTERVAL YEAR(CURDATE())-YEAR('
            geburtstag') YEAR = CURDATE() limit3';

             if(!
            $result $db->query($sql)){

                die(
            'There was an error running the query [' $db->error ']');


            und hier noch einmal in php

            Kommentar


            • #7
              Da stimmen auch die Quotes hinten und vorne nicht. Du packst alles in einfache Hochkommas, das kann so nicht gehen.

              Pack die Query selbst in doppelte "", dann kannst du innerhalb der Query wenn nötig die einfachen Quotes ohne Probleme nutzen und für Keywords in MySQL nutzt man Backticks ` ` das ist wieder ganz was anderes.

              https://php-de.github.io/jumpto/sql/...ackticks-mysql

              LG
              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Am Rande: Welchen Editor nutzt du grauch der solche Fehler wie im Code #6 nicht zeigt?
                PHP-Klassen auf github

                Kommentar


                • #9
                  Stell den Editor und alles andere auch gleich richtig mal auf UTF-8 ein. Dann passiert sowas nicht - was übrigens ein Merkmal für ein Encoding-Problem und damit auch eine weitere Fehlerquelle sein kann. Nur damit du es im Hinterkopf hast. Solltest du dir mal ansehen. Sieht irgendwie nach "Überkodierung" (glaube so nennt man das) aus.

                  PHP-Code:
                  // Zugangsdaten für die Datenbank 

                  MOD: Verschoben von PHP-Fortgeschritten
                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #10
                    Danke für die Lösungsvorschläge. Jetzt habe ich einiges verändert, funktioniert aber trotzdem noch nicht.
                    [PHP $sql="SELECT
                    id,
                    nachname,
                    vorname,
                    geburtstag,
                    klasse,
                    DATEDIFF(geburtstag + INTERVAL (YEAR(CURRENT_DATE) -YEAR(geburtstag) +
                    IF(DATE_FORMAT(CURRENT_DATE, '%m%d') >DATE_FORMAT(geburtstag, '%m%d'), 1, 0))
                    YEAR, CURRENT_DATE) AS 'tagezumgeburtstag'
                    FROM
                    tblschueler
                    WHERE
                    ((DATE_FORMAT(geburtstag, '%m%d')!=DATE_FORMAT(CURRENT_DATE, '%m%d'))&&(geburtstag!='0000-00-00')
                    ORDER BY
                    tagezumgeburtstag

                    limit3";
                    if(!$result = $db->query($sql))
                    {
                    die('There was an error running the query ['.$db->error.']');

                    }

                    while($row = $result->fetch_assoc())
                    {
                    echo' Alles Gute zum Geburtstag! '.$row['vorname'] .' '.$row[('klasse')] .'<br />';
                    echo'<tr><td>'.$row[2] .' '.$row[4] .'</td><td>'.$row[4] .'</td></tr>';
                    }

                    ][/PHP]

                    Kommentar


                    • #11
                      Funktioniert nicht ist keine ausreichende Fehlerbeschreibung,
                      Welche Fehlermeldung erscheint?
                      Was steht im Error-Log?

                      Kommentar


                      • #12
                        Es erscheint

                        There was an error running the query [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY tagezumgeburtstag limit 3' at line 15]

                        Kommentar


                        • #13
                          &&(geburtstag!='0000-00-00')
                          Doppeltes AND,
                          das Datum 0000-00-00 ist zudem keins.

                          Mache daraus mal AND geburtstag NOT NULL
                          Wenn kein Geburtstag vorhanden ist wird in DATE NULL eingetragen und nichts anderes.
                          Das nusst du also ändern auch wenn mysql dummerweise dieses Datum akzeptiert.

                          Kommentar


                          • #14
                            Danke für die Hilfe, ich habs hingebracht. Leider fehlt noch eine Kleinigkeit:
                            PHP-Code:
                             function aktuellesalter($geburtsdatum) {      $datum explode('-'"$geburtsdatum");       return date('Y') - $datum[0] - intval(date('n') < $datum[1] || date('n') == $datum[1] && date('j') < $datum[2]);      } 
                            Bei dieser Funktion sollte den aktuellen Geburtstag auswerfen. Leider kommt immer nur 2019. Gibt es diese Funktion in Php7 nicht mehr - in php 5.6 lauft das Script einwandfrei.

                            Kommentar


                            • #15
                              Welche Funktion?

                              Der Code ist ja so nicht lesbar.

                              Kommentar

                              Lädt...
                              X