Ankündigung

Einklappen
Keine Ankündigung bisher.

Php Funktion nach update fehlerhaft.

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

  • Php Funktion nach update fehlerhaft.

    Hey,

    ich möchte eine alte Webseite von mir erneuern und habe dort ein Personalausweis Prüfer drin. Dieser funktioniert nun nicht mehr, und ich bekomme ihn nicht mehr ans laufen.
    Der folgende Fehler erscheint beim aufrufen der Seite ab php v.7+:
    Code:
    [B]Fatal error[/B]: Array and string offset access syntax with curly braces is no longer supported
    Das Script sieht wie folgt aus. Ich habe aufgrund des Fehlers auch schon versucht die geschweiftenklammern gegen eckige auszutauschen, aber das bringt auch nichts.
    PHP-Code:
    <?php
     
    //Pruefnummer ueberpruefen
    function check_number($id$checknumber) {
       
    $p 7;
       
    $sum 0;
       for(
    $i=0$i strlen($id); $i++) {
          
    $char $id{$i};

          if(
    $char >= '0' && $char <= '9')
             
    $int intval($char);
          else
             
    $int ord($char)-55;

             
    $sum += $int*$p;

          if(
    $p==1)
             
    $p=7;
          else if(
    $p==3)
             
    $p=1;
          else if(
    $p==7)
             
    $p=3;
       }

       
    $last_number substr(strval($sum), -1);

       return 
    $last_number == $checknumber;
    }
     
    //Gibt die Art (neu vs. alt) des Personalausweis zurück
    function perso_type($id) {
       
    $splits explode(" "strtoupper($id));
       if(
    strlen($splits[0]) == 11 && strlen($splits[1]) == && strlen($splits[2]) == && strlen($splits[3]) == 1) {
          return 
    'old';
       } else if(
    strlen($splits[0]) == 10 && strlen($splits[1]) == && strlen($splits[2]) == && strlen($splits[3]) == 1) {
          return 
    'new';
       } else {
          return 
    'unknown';
       }
    }
     
    //Sind die Prüfziffern gültig
    function perso_checksum($id) {
       
    $splits explode(" "strtoupper($id));

       
    $checksums = array();
       
    $perso_type perso_type($id);

       if(
    $perso_type == 'unknown') {
          return 
    false;
       }

       
    $checksums[] = array(substr($splits[0],0,9), substr($splits[0],9,1));
       
    $checksums[] = array(substr($splits[1],0,6), substr($splits[1],6,1));
       
    $checksums[] = array(substr($splits[2],0,6), substr($splits[2],6,1));
       
    $checksums[] = array(substr($splits[0],0,10).substr($splits[1],0,7).substr($splits[2],0,7), $splits[3]);


       
    //Überprüfung der Checksummen
       
    foreach($checksums as $checksum) {
          if(!
    check_number($checksum[0], $checksum[1])) {
             return 
    false;
          }
       }

       return 
    true;
    }
     
    //Ist der Perso noch gültig?
    function perso_gueltig($id) {
       
    $splits explode(" "$id);
      
       
    $valid_until mktime(0,0,0substr($splits[2], 22) , substr($splits[2], 42) , "20".substr($splits[2], 02));
     
       
    //Ist der Perso noch gültig
       
    if(time() > $valid_until)
          return 
    false;
     
       return 
    true;
    }
     
    //Informationen aus dem Perso beziehen
    function perso_info($id) {
       
    $splits explode(" "$id);
     
       
    //$return: Ein Objekt mit den Daten aus der Ausweisnummer
       
    $return = new stdClass();
       
    $return->perso_type perso_type($id);
       
    $return->geb = new stdClass();
       
    $return->geb->tag$splits[1]{4} . $splits[1]{5}; //Geburtstag
       
    $return->geb->monat $splits[1]{2} . $splits[1]{3}; //Geburtsmonat
       
    $return->geb->jahr $splits[1]{0} . $splits[1]{1}; //Geburtsjahr
       
    if($return->geb->jahr intval(date("y"))) {
          
    $return->geb->jahr "19".$return->geb->jahr;
       } else {
          
    $return->geb->jahr "20".$return->geb->jahr;
       }
     
     
       
    $alter date("Y") - $return->geb->jahr;
     
       
    //Hatte er schon Geburtstag?
       
    if( (date("n") < $return->geb->monat) OR (date("n") == $return->geb->monat AND date("j") < $return->geb->tag) ) {
          
    $alter--;
       }
     
       
    $return->alter $alter;
     
       if(
    $alter >= 18) {
          
    $return->volljaehrig true;
       } else {
          
    $return->volljaehrig false;
       }
      
       
    $return->ablauf = new stdClass();
       
    $return->ablauf->tag $splits[2]{4} . $splits[2]{5}; //Ausweis Ablauf Tag
       
    $return->ablauf->monat $splits[2]{2} . $splits[2]{3}; //Ausweis Ablauf Monat
       
    $return->ablauf->jahr "20".$splits[2]{0} . $splits[2]{1}; //Ausweis Ablauf Jahr
     
       
    if($return->perso_type == 'old') {
          
    $return->herkunft $splits[0]{10};
       } else {
          
    $return->herkunft $splits[2]{7};
       }
       
    //Ein Deutscher?
       
    if(strtolower($return->herkunft) == "d") {
          
    $return->deutscher true;
       } else {
          
    $return->deutscher false;
       }
       
    //Behördenkennzahl als Nummer
       
    $return->behoerdenkennzahl substr($splits[0], 04);
     
       return 
    $return;
    }
     
     
     
    //Beispiel zur Verwendung
    if(isset($_GET['check'])) {
       
    $perso_id $_POST['ida']." ".$_POST['idb']." ".$_POST['idc']." ".$_POST['idd'];
       
    //Oder:
       //$perso_id = "1234567891D 2345678 9012345 6"
     
       
    if(perso_checksum($perso_id)) {
          echo 
    "Personalausweisnummer korrekt!";
     
       if(!
    perso_gueltig($perso_id)) {
          echo 
    "<br> <b>Perso ist abgelaufen!</b>";
       }
          echo 
    "<br><br> Daten der Ausweisnummer: <pre>";
          
    $data perso_info($perso_id);
          
    print_r($data);
          echo 
    "</pre>";
          
          
    //Zugriff z.B. so:
          //Alter: $data->alter;
          //Geburtsmonat: $data->geb->monat;
          //Ablauftag: $data->ablauf->tag;
       
    } else {
          echo 
    "Personalausweisnummer falsch!<br><br>";
       }
    }
    ?>
     
     
    <!-- Kleines Anwendungsbeispiel -->
    Neuer Personalausweis:<br>
    <form action="?check=1" method="post" >
       IDD &lt;&lt; <input type="text" size="10" maxlength="10" name="ida">&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br>
       <input type="text" size="7" maxlength="7" name="idb"> &lt; <input type="text" size="8" maxlength="8" name="idc">&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<input type="text" size="1" maxlength="1" name="idd"> <br>
       <input type="submit" value="überprüfen">
    </form>
     
    <br><hr><br>
     
    Alter Personalausweis:<br>
    <form action="?check=1" method="post" >
       <input type="text" size="11" maxlength="11" name="ida">&lt;&lt;
       <input type="text" size="7" maxlength="7" name="idb">&lt;
       <input type="text" size="7" maxlength="7" name="idc">&lt;&lt;&lt;&lt;&lt;
       <input type="text" size="1" maxlength="1" name="idd"> <br>
       <input type="submit" value="überprüfen">
    </form>
    Ich hoffe es kann jemand helfen.
    Grüße

  • #2
    Moin Nightland Driver,
    mir sind die geshweiften Klammern auch aufgefallen, diese musst du bei dem ersten Fehler durch eckige Klammern ersetzen um auf den Indexwert zugreifen zu können.
    PHP-Code:
    $return->geb->tag$splits[1]{4} . $splits[1]{5}; 
    PHP-Code:
    $return->geb->tag$splits[1][4] . $splits[1][5]; 


    Versuch mal das.
    PS: Wenn euch mein Post gefallen hat, dann lasst mir ein "Daumen hoch" da!

    Kommentar


    • #3
      Hatte ich zuvor wie oben geschrieben schon gemacht, hat nicht funktioniert.
      Ich habe das ganze jetzt erneut umgeschrieben, jetzt klappt es.

      Kommentar

      homepage-forum.de - Hilfe für Webmaster! Statistiken

      Einklappen

      Themen: 56.952   Beiträge: 431.322   Mitglieder: 28.881   Aktive Mitglieder: 150
      Willkommen an unser neuestes Mitglied, DannyMam.

      Online-Benutzer

      Einklappen

      172 Benutzer sind jetzt online. Registrierte Benutzer: 1, Gäste: 171.

      Mit 3.502 Benutzern waren am 23.01.2020 um 18:20 die meisten Benutzer gleichzeitig online.

      Die neuesten Themen

      Einklappen

      • arnego2
        Antwort auf IP Blacklist und Mails versenden
        nei da kann man IP, Domain und hash abfragen.
        Es gibt auch soinst eine Menge an Bllacklist Checkern....
        Gestern, 22:03
      • Webhelfer
        Antwort auf IP Blacklist und Mails versenden
        @arnego2:
        Aber dort kann man nur IPs eingeben und keine Domains?!?!
        Ja, die IP meines Webservers und meines Mailservers teile ich mit allen anderen Kunden meines Hosters.

        Diese IP ist, wie gesagt, zum Glück dort nicht eingetragen.
        Aber meine Absender IP.
        24.11.2021, 00:07
      • basti1012
        Antwort auf PCR TEST corona
        Alles Mist.
        Letztes Jahr hieß es wir müssen impfen , sonst können wir die Pandemie nie stoppen.
        Dieses Jahr heißt es wir müssen boostern, sondern können wir das nicht stoppen.
        Nächstes Jahr wahrscheinlich nochmal boostern und so weiter. usw.

        Ich hatte heute mein...
        23.11.2021, 22:38
      • Megabyte
        Antwort auf PayPal-Button ignoriert CSS befehle
        admin

        Mein letzter Post hier wurde als Spam deklariert :-(. Bitte freimachen da ich denke dass jemand auf Antwort wartet :-)
        23.11.2021, 20:12
      • Megabyte
        Antwort auf PayPal-Button ignoriert CSS befehle
        koseb - Ergänzung:

        Öffne mal mit F12 die Entwickler-Tools (bei deiner Problemseite). Wie beschrieben findest du dort die folgende Zeilen:

        .paypal-button {
        border: 1px solid transparent;
        border-radius: 0 3px 3px 0;
        position: relative;
        width: 100%;...
        23.11.2021, 20:08

      Die neuesten Beiträge

      Einklappen

      • arnego2
        Antwort auf IP Blacklist und Mails versenden
        nei da kann man IP, Domain und hash abfragen.
        Es gibt auch soinst eine Menge an Bllacklist Checkern....
        Gestern, 22:03
      • Webhelfer
        IP Blacklist und Mails versenden
        Hallo,

        zuerst muss ich erwähnen, dass ich KEINE Massenmails, KEIN Spam und KEINE Newsletter versende, sondern ganz normal Mails.
        Mal an Person x, mal an Person y, usw..

        Auf einige meiner Mails erhalte ich keine Antwort.
        Ok, es kann auch sein, dass die betreffende...
        14.11.2021, 01:27
      • Webhelfer
        Antwort auf IP Blacklist und Mails versenden
        @arnego2:
        Aber dort kann man nur IPs eingeben und keine Domains?!?!
        Ja, die IP meines Webservers und meines Mailservers teile ich mit allen anderen Kunden meines Hosters.

        Diese IP ist, wie gesagt, zum Glück dort nicht eingetragen.
        Aber meine Absender IP.
        24.11.2021, 00:07
      • basti1012
        Antwort auf PCR TEST corona
        Alles Mist.
        Letztes Jahr hieß es wir müssen impfen , sonst können wir die Pandemie nie stoppen.
        Dieses Jahr heißt es wir müssen boostern, sondern können wir das nicht stoppen.
        Nächstes Jahr wahrscheinlich nochmal boostern und so weiter. usw.

        Ich hatte heute mein...
        23.11.2021, 22:38
      • ST747
        PCR TEST corona
        Hi, es gibt Dinge, die glaubt man nicht.

        Der PCR-Test ist normal nur 48 Stunden gültig und kostet bei uns um die 70 EUR. Wer den schneller will, muss über 100 EUR zahlen, falls es überhaupt geht.

        Nun hatte ich gefragt, wie lange es dauert, bis der Test vorliegt. Antwort:...
        08.11.2021, 18:34
      • Megabyte
        Antwort auf PayPal-Button ignoriert CSS befehle
        admin

        Mein letzter Post hier wurde als Spam deklariert :-(. Bitte freimachen da ich denke dass jemand auf Antwort wartet :-)
        23.11.2021, 20:12
      • koseb
        PayPal-Button ignoriert CSS befehle
        Hallo leute,

        ich hoffe mir kann hier jemand weiterhelfen :-)
        folgende Situation.

        Ich habe eine WordPress Seite mit Woocommerce und PayPal Anbindung.


        Auf der Produktseite erscheint der PayPal checkout Button so wie ich es wollte. Soweit so gut. Nur...
        You do not have permission to view this gallery.
        This gallery has 2 photos.
        19.11.2021, 12:32
      • Megabyte
        Antwort auf PayPal-Button ignoriert CSS befehle
        koseb - Ergänzung:

        Öffne mal mit F12 die Entwickler-Tools (bei deiner Problemseite). Wie beschrieben findest du dort die folgende Zeilen:

        .paypal-button {
        border: 1px solid transparent;
        border-radius: 0 3px 3px 0;
        position: relative;
        width: 100%;...
        23.11.2021, 20:08
      • Megabyte
        Antwort auf PayPal-Button ignoriert CSS befehle
        koseb

        Das Problem (oder Segen, je nach dem...) mit CSS ist, dass es theoretisch überall eingebunden werden kann. Fast immer werden die CSS-Direktiven aber als externe Datei gespeichert und innerhalb des <head> mittels <link rel="stylesheet" href="Pfad_zur_Datei.css">...
        23.11.2021, 19:49
      • koseb
        Antwort auf PayPal-Button ignoriert CSS befehle
        Hi Megabyte,


        vielen Dank für Deine Hilfe, so wie du es beschrieben hast, sollte es doch funktionieren.
        Kann deine Schritte auch alle nachvollziehen, nur hängt es bei mir bei dem wohl einfachsten Schritt.
        Woher weiß ich, wo das Script gespeichert ist bzw. welches ich...
        23.11.2021, 15:54
      Lädt...
      X