Verschlüsselte Textdatei auslesen

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

  • Verschlüsselte Textdatei auslesen

    Hallo Proggis...

    ich habe eine txt-datei die verschlüsselte daten beinhaltet.
    (base64_encode)

    diese datei gibt die aktuellen tagesumsätze wieder als tabelle aus.

    PHP-Code:
    $YourFile "kasse/umsatz.txt";
    $handle fopen($YourFile'r');
    $Data fread($handle50000);
    $Data base64_decode($Data);

                echo 
    $Data; echo "<tr>"
    Anzeige in PHP:
    <td>Kundenname1</td><td>22.03.2009 - 21:22</td><td>12,90</td><td> €</td><tr>

    <td>Kundenname2</td><td>22.03.2009 - 21:45</td><td>12,90</td><td> €</td><tr>

    <td>Kundenname3</td><td>22.03.2009 - 21:50</td><td>12,90</td><td> €</td><tr>

    <td>Kundenname4</td><td>22.03.2009 - 22:30</td><td>12,90</td><td> €</td><tr>
    usw.....
    Klappt wunderbar.
    doch wie kann ich die summe aus spalte 3 zusammenrechnen?

    in der verschlüsselten datei ist nach jedem </td> ein nichtverschlüsseltes + zeichen
    (zur sicherheit falls tatsächlich mal eine angabe gelöscht werden muss)

    Hat jemand eine Idee wie ich das machen kann?

    achja... es ist kein zeilenumbruch in der textdatei.

  • #2
    Mit explode() zerlegst du den Dateiinhalt am <tr>. Über das Ergebnis iterierst du in einer Schleife, zerlegst jeden Teil wiederum am </td><td>. Nun greifst du dir aus dem Ergebnis die gewünschte Spalte, entfernst die HTML-Tags mit strip_tags() oder simplen Stringoperationen. Dann wandelst du das Komma in der Zahl in einen Punkt um und summierst.

    Oder du benutzt preg_match_all() um die Werte rauszufischen.

    Kommentar


    • #3
      Steht das <tr>-Tag mit in der Datei? Fehlt das schließende Tag wirklich? Wenn gültiges XML in der Datei steht, kannst du auch mit der DOM-Extension und XPath drauf losgehen und dir die passenden Werte herausfischen.

      Kommentar


      • #4
        ich habs..

        nochmals danke für die raschen hilfestellungen...

        ich habe es nach stunden-langem rumprobieren hinbekommen.

        das einzige was den soll erfüllt ist ist zwar sehr laienhaft aber es funktioniert...

        wenn jemand ne bessere lösung hat... her damit! :-)

        PHP-Code:
         // Die gespeicherten Tageseinnahmen in Form: (base64_encode verschlüsselst und ohne Zeilenumbruch)
         /*
        <td>Name1</td><td>Uhrzeit1</td><td align="right">Betrag1</td><td> €</td><tr>
        <td>Name2</td><td>Uhrzeit2</td><td align="right">Betrag2</td><td> €</td><tr>
        <td>Name3</td><td>Uhrzeit3</td><td align="right">Betrag3</td><td> €</td><tr>
        <td>Name4</td><td>Uhrzeit4</td><td align="right">Betrag4</td><td> €</td><tr> 
        ... usw
        */     

        //Aufrufen der gewünschten Datei in Form: Ordner/Datei.txt
               
        $file "kasse/umsatz.txt";  
               
        $txt file_get_contents($file); 

        //Inhalt weider entschlüsselln          
               
        $txt1 base64_decode($txt);             
                   
        // Ein paar Zellen entfernen und durch Leerstellen ersetzen !!!!
        // Ersetzt man ohne Leerstellen werden die einzelnen Blöcke nicht getrennt
        // Somit ergibt das auch nur ein zusammenhängendes Gebilde
               
        $txt2 str_replace("<td>"" ",$txt1);
               
        $txt3 str_replace("</td>"" ",$txt2);
               
        $txt4 str_replace('<td align="right">'" ",$txt3);

        // Satzende erzwingen ( Da der Inhalt nur ein Einzeiler ist)
        // Tabellenumbruch durch * ersetzen
               
        $string str_replace("<tr>""*",$txt4);
               
        $sum11 0;
               
        $tok strtok($string"*"); 

        // Auslesen aller Sätze bis zum * und wiederholen so oft wie * vorhanden sind
               
        while ($tok !== false) {
                    
        #echo "$tok<br />";         // Auflistung des Inhalts  (# Hier ausgeblendet)
                    
        $tok strtok("*");         // Array ausgeben

        // Splitten der der Sätze in einzelne Blöcke bei jedem Leerzeichen
                    
        list($ago$bgo$cgo$dgo$ego$fgo) =explode(" "$tok);
                   
        #echo "$ago, $bgo, $cgo, $dgo, $ego, $fgo<br>";

        // Zusammenrechnen von spalte 6 (alle buchungen des Tages als Endsumme)
                    
        $sum11 += $fgo;
               }
                
               if (
        $sum11 0.1) { 
                   
        $sum11 "0,00";
               } else {
                   
        $sum11 =sprintf("%01.2f",$sum11);
               }
        // Ensumme mit zwei stellen hinterm Komma ausgeben
               
        echo $sum11

        Kommentar


        • #5
          base64 ist keine Verschlüsselung. Diese Daten sind für jeden frei lesbar.

          Kommentar


          • #6
            @ h3ll

            base64 ist keine Verschlüsselung. Diese Daten sind für jeden frei lesbar.

            Dann öffne doch bitte mal eine Textdatei mit dem Editor dessen daten base64_encode sind.

            Kommentar


            • #7
              Base64 ist keine Verschlüsselung.
              Es reicht ein base64_decode($inhalt_der_textdatei); um an die Daten zu kommen.

              Kommentar


              • #8
                Original geschrieben von ostems
                Dann öffne doch bitte mal eine Textdatei mit dem Editor dessen daten base64_encode sind.
                Guckst du hier:
                http://wingloon.com/2008/10/28/base6...using-notepad/

                Außerdem kann Total Commander im Handumdrehen jede base64-codierte Datei ruck zuck in normalen Text konvertieren. Total Commander ist ein sehr beliebter und verbreiteter Dateimanager für Windows (für alle Leute, die den Explorer nicht leiden können).

                http://www.ghisler.com/deutsch.htm
                Zuletzt geändert von h3ll; 02.04.2009, 00:06.

                Kommentar


                • #9
                  Äh... um missverständnisse zu vermeiden...

                  es geht bei dieser verschlüsselung darum, das angestellte
                  beim arbeiten mit der kasse nicht einfach daten aus der datei rauslöschen.

                  aber, die datei muss für den admin wieder lesbar im umsatz-Adminbereich
                  angezeigt werden.
                  darum die base64_encode.

                  auf dem kassenrechner befinden sich keine programme die diese datei lesbar anzeigen würden.

                  gibt es noch etwas besseres?
                  dann sach mal an...
                  so überzeugt bin ich nämlich auch nicht von base64

                  ach ja... wo ich schon mal hier bin...

                  kennst du dich mit zeitberechnung aus?

                  Kommentar


                  • #10
                    Original geschrieben von ostems
                    Äh... um missverständnisse zu vermeiden...

                    es geht bei dieser verschlüsselung darum, das angestellte
                    beim arbeiten mit der kasse nicht einfach daten aus der datei rauslöschen.
                    Nochmal: Es ist keine Verschlüsselung. Bitte verwende nicht dieses Wort dafür.

                    Original geschrieben von ostems
                    aber, die datei muss für den admin wieder lesbar im umsatz-Adminbereich
                    angezeigt werden.
                    darum die base64_encode.

                    auf dem kassenrechner befinden sich keine programme die diese datei lesbar anzeigen würden.
                    Die Wahrscheinlichkeit ist sehr gering, aber die Angestellten können Verwandte haben, die sich damit auskennen oder selber nur vorübergehend den Job machen, aber nebenbei Informatik studieren. Jetzt fehlt nur noch eine böse Absicht und schon hast du den Scherbenhaufen.

                    Original geschrieben von ostems
                    gibt es noch etwas besseres?
                    dann sach mal an...
                    so überzeugt bin ich nämlich auch nicht von base64
                    Eine Verschlüsselung mit mcrypt zum Beispiel:
                    http://de.php.net/manual/en/book.mcrypt.php

                    Oder noch besser:
                    Den Leuten, die das nichts angeht, erst gar nicht einen Zugang zu den sensiblen Daten ermöglichen.

                    Original geschrieben von ostems
                    ach ja... wo ich schon mal hier bin...

                    kennst du dich mit zeitberechnung aus?
                    Ja.

                    Kommentar


                    • #11
                      Kanns du mit nachfolgendem code etwas anfangen?

                      musste einiges rausnehmen weil es nicht dazu gehörte.
                      hoffe ich hab jetzt nix wichtiges rausgenommen

                      PHP-Code:
                      // Hier wird ermittelt um welche spielart es sich handelt

                       
                      $sql mysql_query("SELECT nr, art FROM koordinaten Where id='$id'");
                              
                      $art_select mysql_fetch_array($sql);

                              
                      $art $art_select['art'];     // Z.B. Billard
                              
                      $numr  $art_select['nr'];
                             
                      // Ab hier wird wird unterschieden die Art und der Preis zu welcher Zeit
                      // In Billard1 steht z.B 3.50 in Billard2 steht 4.50 und in Billard3 5.50 für die Preis  

                              
                      $sql mysql_query("SELECT
                              Billard1, Billard2, Billard3,
                              Snooker1, Snooker2, Snooker3,
                              Karambol1, Karambol2, Karambol2,
                              Internet1, Internet2, Internet3,
                              zeit1, zeit2, zeit3, zeit4 FROM config"
                      );
                              
                      $row mysql_fetch_array($sql);

                      //von 0:00 Uhr bis 8:00 kostet eine Stunde Billard 5.50 
                              
                      $time3 $row['zeit4'];  // Zeigt 00:00:00  
                      // von 8:00 Uhr bis 16:00 kostet eine Stunde Billard 3.50
                              
                      $time4 $row['zeit1'];    // Zeigt 08:00:00 Uhr  
                      // von 16:00 Uhr bis 20:00 kostet eine Stunde Billard 4.50                                            
                              
                      $time5 $row['zeit2'];    // Zeigt 16:00:00 Uhr
                      // von 20:00 Uhr bis 00:00 kostet eine Stunde Billard 5.50      
                              
                      $time6 $row['zeit3'];    // Zeigt 20:00:00 Uhr       
                                                                
                              
                             
                      $wert = array();
                                             for (
                      $i 1$i <= 4$i++) {
                                                  if (
                      $i != 4) {
                                                      
                      $wert[$i] = $row[$art $i];
                                                  } else {
                                                      
                      $wert[4] = $row[$art 3];
                                                  }
                                             }


                      // Abfrage der Startzeit, Endzeit, Spielart, anzahl Personen und was schon gezahlt wurde
                              
                      $abfrage mysql_query("SELECT  zeit1, zeit2  FROM abr WHERE id = '$id'");
                             while (
                      $rows mysql_fetch_array($abfrage)) {
                            
                              
                      $time1=$rows['zeit1'];  //  ist die startzeit (z.B. 2009-03-28 15:55:32)
                              
                      $time2=$rows['zeit2'];  //  ist die endzeitzeit (z.B. 2009-03-29 02:16:17)

                             
                      }
                      #******************************************************
                      //Der Nachfolgende code ist von dir!  hab ich gerade gesehen.[/b]
                      #******************************************************
                              // aufsplitten der Zeiten $time1 und $time2 



                              
                      function time_to_hours($rows) {
                                  list(
                      $x_date$first_time)=explode(' '$rows);
                                  list(
                      $Y$mo$d) = explode('-'$x_date);
                                  list(
                      $h$m$s) = explode(':'$first_time);
                                  return 
                      $h $m 60 $s 3600;

                              }

                               
                      $prices = array(
                                  array(
                      'value' => $wert[4], 'time' => $time3),    //   => 00:00
                                  
                      array('value' => $wert[1], 'time' => $time4),    //   => 08:00
                                  
                      array('value' => $wert[2], 'time' => $time5),    //   => 16:00
                                  
                      array('value' => $wert[3], 'time' => $time6)     //   => 20:00
                               
                      );

                              
                          if (
                      $end_time $start_time)
                             
                      $end_time += 24.0;
                             
                      $sum 0.0;

                            
                      $sum 0.0;

                          for (
                      $i_cnt 0$i_max count($prices) - 1$i_cnt <= $i_max$i_cnt++) {
                          
                      $current_time time_to_hours($prices[$i_cnt]['time']);
                          
                      $next_time $i_max $i_cnt time_to_hours($prices[$i_cnt 1]['time']) : 48.0;

                          if (
                      $start_time $next_time && $end_time >= $current_time) {
                              
                      $diff_time  $end_time $next_time $end_time $next_time;
                              
                      $diff_time -= $start_time $current_time $start_time $current_time;

                              
                      $sum += $prices[$i_cnt]['value'] * $diff_time;
                          }
                      }
                             
                      echo 
                      $sum
                      Die Summe ($sum) ist nicht richtig berechnet.
                      Zuletzt geändert von ostems; 02.04.2009, 02:24.

                      Kommentar


                      • #12
                        OffTopic:
                        Hattest du den Code zur $sum-Berechnung nicht aus diesem Forum? Ich erinner mich schwach an dieses Problem

                        Kommentar


                        • #13
                          ja, schon
                          hat aber nie funktioniert.
                          bin gerade aber wieder dabei genau dises thema zu behandeln weil die kasse in den verkauf geht.
                          in meinem laden sind die preise 24 std. gebunden.
                          daher ist das auch bei unserer kasse kein problem.

                          aber gelöst hab ich es immer noch nicht.
                          leider

                          Kommentar


                          • #14
                            Das hat sich hier aber noch anders angehört

                            Falls es wirklich falsch ist, dann musste nochmal kurz warten, bis jmd. / ich Zeit dafür hat, sich das Script etc. nochmal anzugucken

                            btw: // Abfrage der Startzeit, Endzeit, Spielart, anzahl Personen und was schon gezahlt wurde
                            Diese Whileschleife kann man sich sparen und es in eine Zeile tun. Fiel mir gerade in den Blick. Du hast da sowieso nur 1 Ergebnis.

                            mfg

                            Kommentar


                            • #15
                              @ Blackgreetz
                              Das ha sich aber anders angehört.
                              ich hatte es nur getestet mit den einzelnen zeitabschnitten.
                              und wenn du keine zeit hast oder lust...
                              musst du es nicht tun.
                              ich hatte h3ll darum gebeten, weil das script auch von ihm ist.

                              ich werd indessen weiter versuchen es selbst zu lösen...


                              Meimst du so?

                              PHP-Code:
                              $abfrage mysql_query("SELECT  zeit1, zeit2  FROM abr WHERE id= '$id'");
                              $rowsmysql_fetch_array($abfrage);
                                      
                              $time1=$rows['zeit1'];
                                      
                              $time2=$rows['zeit2']; 
                              Ergebnis ist das gleiche
                              Zuletzt geändert von ostems; 02.04.2009, 23:35.

                              Kommentar

                              Lädt...
                              X