Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: foreach-Schleife zur Text-Verschlüsselung

  1. #1
    Youngster Avatar von Permafrost
    Registriert seit
    21.02.2011
    Beiträge
    12
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard foreach-Schleife zur Text-Verschlüsselung

    Hallo zusammen,
    Ich hoffe jemand kennt das Problem oder zumindest die Lösung :) :

    Ziel ist ein PHP-Skript (eingebunden in HTML), welches einen Text aus einem Eingabefeld empfängt, in ein array umwandelt und Wert für Wert mit einem alternativen Alphabet ersetzt. Schließlich wird alles via implode wieder zum string, der in einer Textdatei abgespeichert wird. Übliche Ersetzungsfunktionen habe ich von Anfang an ausgeklammert, da sie stets alle Werte innerhalb eines arrays ersetzen und damit bereits ersetzte Werte nochmals ersetzt werden könnten. Ich habe versucht, mit einer foreach-Schleife mein Text-array zu durchlaufen, jeweils den anvisierten Wert in einem Standartalphabet (ist auch ein array) zu suchen. Der Zielcursor liegt dann im Standartalphabet auf einem Index (0, 1, 2, etc.). Man sucht unter dem selben Index in der eigentlichen Verschlüsselung (array mit genau so vielen Werten wie das Standartalphabet) den neuen Wert. Dieser ersetzt den alten im Text-array.

    Die Browser-Ausgabe des momentan noch fehlerhaften Skriptes ist eine leere Seite.

    Mein Problem ist anscheinend die foreach-Schleife, denn ein Eliminieren der darin enthaltenden if-else-Bedingungen (also ein Vereinfachen) hat scheinbar nichts verändert. Ein vollständiges Entfernen der foreach-Schleife hat darüber hinaus gezeigt, dass sie jedwede Browser-Ausgabe des php-Skriptes verhindert. Ohne sie wird der Rest durchgeführt/angezeigt, mit ihr eben nicht. Vielleicht hat jemand von Euch einen Blick dafür, ob ich etwas bei der Verwendung der Schleife noch grundsätzlich falsch mache oder ob irgendwo kleinere Fehler alles blockieren.

    Vielen Dank für Eure Antworten!



    Das folgende Skript ist nur ein Aussschnitt und enthält eine Vielzahl von Kommentaren, die hoffentlich zum Verständnis beitragen:

    PHP-Code:
    // eingegebener Text wird in einzelne Zeichen zum array gesplittet
    $arrText str_split $Text );

    // Testwiedergabe vom unbehandelten Text-array in array-Form
    print_r$arrText );

    // Text-array wird schrittweise durchlaufen und der Wert des aktuellen Elements jeweils behandelt -- startet automatisch beim ersten Element
    foreach ($arrText as &$value)
        {
        
    // Testnachricht, ob überhaupt mal was beginnt ...
        //echo ".";
        
        
    $AbgleichText array_search ($value$arrAlph);
        
        if ( 
    $AbgleichText FALSE )
            {
            echo 
    "<font color="red">$value</font>";
            }
        
        else
            {
            
    // Testnachricht, ob if überhaupt mal beginnt ...
            //echo ".";
            
            // an welchem Schlüssel befindet sich der array-Zeiger im Alphabet-array?
            
    $ZeigerAlph key ($arrAlph);
            
            
    // Ersetzen des aktuell behandelten Werts durch Äquivalent des Verschlüsselungs-arrays
            
    $value $arrCode[$ZeigerAlph];
            
            echo 
    "<font color="green">$value</font>";
                         
            
    reset $arrAlph );
            }
        
          }
        
    $ReText implode (""$arrText); 
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Kaiser(in)
    Registriert seit
    29.03.2009
    Ort
    1011 1111 1011 WorldWideWeb
    Beiträge
    2.439
    Danke
    2
    Bekam 6 mal "Danke" in 6 Postings

    Standard AW: foreach-Schleife zur Text-Verschlüsselung

    Und wo ist jetzt das Problem? Fehlermeldungen?
    Die Zeile
    PHP-Code:
    if  ( $AbgleichText FALSE
    ist falsch. Vergleiche mit == (in deinem fall ===, denn wenn es das 0te element des arrays ist zählt es mit == auch als false)
    PHP-Code:
    echo "<font color="red">$value</font>"
    Ist enbenfalls grottenfalsch.
    Wo hört der String auf? Bei ". Escape mit \ oder benutze '

    Du hast das script nochnichtmal ausgeführt, richtig?
    Ich mach jetzt mal nicht weiter, führ das mal aus unde verbessre die Fehler, ich bin mit sicher, du findest die Lösung selbst.

    P.S.: Sicher ist das nicht.
    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.
    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  3. #3
    Unregistriert
    Gast

    Standard AW: foreach-Schleife zur Text-Verschlüsselung

    Zitat Zitat von Tobse Beitrag anzeigen
    Und wo ist jetzt das Problem? Fehlermeldungen?
    Siehe oben. Die Schwierigkeit liegt eben darin, dass KEINE Fehlermeldung ausgegeben wird. Die Ausgabe ist (wie gesagt) eine leere Browser-Seite. Und ja, natürlich starte ich das Skript von einem PHP-fähigen Server.

    Zitat Zitat von Tobse Beitrag anzeigen
    Du hast das script nochnichtmal ausgeführt, richtig?
    Ich mach jetzt mal nicht weiter, führ das mal aus unde verbessre die Fehler, ich bin mit sicher, du findest die Lösung selbst.

    P.S.: Sicher ist das nicht.
    Falsch. Warum sollte ich es nie ausgeführt haben und dann Details zur Fehlerfindung geben können? Und ich finde leider das Problem selber nicht. In früheren Skripten ist es mir häufiger passiert, dass eben solche Fehler eingebaut werden, wie du sie oben aufgezeigt hast. Da ich mir PHP selber beibringe (learning by doing), kommt das vor, ohne, dass es mir auffällt. Daher auch die Vermutung, ich hätte die foreach-Schleife vollkommen falsch angewand.

    Und nochmal zur Vergewisserung: $arrText gibt ohne den ganzen Rest dahinter tatsächlich ein indiziertes array. Die wichtigste Grundvorraussetzung ist also erfüllt :P

  4. #4
    Forum Guru Avatar von synaptic
    Registriert seit
    20.06.2007
    Ort
    Butzbach-Wiesental
    Beiträge
    10.901
    Danke
    45
    Bekam 48 mal "Danke" in 46 Postings
    Blog-Einträge
    1

    Standard AW: foreach-Schleife zur Text-Verschlüsselung

    haste auch

    error_reporting(E_ALL);
    und
    ini_set("display_errors", true);

    in deinem script stehen? hier sieht mans ja nicht....
    dann sollten dir nämlich auch fehler angezeigt werden


    das konstrukt hier:
    foreach ($arrText as &$value)
    kenn ich so auch nicht.
    das &-zeichen ist doch als verweis also referenz(zeiger) anzusehen.
    da du nirgendwo eine variable $value hast gibts auch keine "referenzobjekte"
    aber ich bin selber kein pro in php und lass mich da gerne eines besseren belehren
    KEIN support via pn, email, messenger oder falsch geposteten threads
    Futter für deine Schnuffelzwerge gibts bei den Schnuffelzwergen TOP Qualität, also klicken und kaufen

  5. #5
    Youngster
    Themenstarter
    Avatar von Permafrost
    Registriert seit
    21.02.2011
    Beiträge
    12
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: foreach-Schleife zur Text-Verschlüsselung

    Ok, ich dachte, auch ohne Zusatzzeile würde wie immer eine Fehlermeldung kommen. Ich packe es gleich mal mit rein.

    Die Verwendung von &$value ist auch so ne Sache. Auf einer Internetseite steht, damit würde man $value veränderbar machen. Auf einer anderen sollen dadurch eben nur Referenzen erstellt werden, die neben den eigentlichen Werten existieren und sogar vorsichtshalber gelöscht werden sollen, damit das ursprüngliche array in sich ja auch erhalten bleibt. Was generell $value angeht: Die Anwendungsbeispiele auf dne Internetseiten haben alle bedeutet, dass es sich tatsächlich auf die nacheinander abgerufenen Werte vom behandelten array versteht. Man konnte zum Beispiel, alle Werte in einem array mit einer Zahl addieren/multiplizieren/etc.. Also müsste auch eine andere Funktion zum Ersetzen der Werte durch andere funktionieren.

  6. #6
    Youngster
    Themenstarter
    Avatar von Permafrost
    Registriert seit
    21.02.2011
    Beiträge
    12
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: foreach-Schleife zur Text-Verschlüsselung

    Der Zusatz vom error_reporting hat leider nichts geändert. Es kommt weiterhin keine Fehlermeldung, sondern nur eine leere Seite.

  7. #7
    Forum Guru Avatar von synaptic
    Registriert seit
    20.06.2007
    Ort
    Butzbach-Wiesental
    Beiträge
    10.901
    Danke
    45
    Bekam 48 mal "Danke" in 46 Postings
    Blog-Einträge
    1

    Standard AW: foreach-Schleife zur Text-Verschlüsselung

    haste denn die von tobse angezeigten fehler bereits berichtigt?
    du hast da ja oben die parse-errors drin und die &-referenz brauchste in deinem script ja so wie es da steht net
    KEIN support via pn, email, messenger oder falsch geposteten threads
    Futter für deine Schnuffelzwerge gibts bei den Schnuffelzwergen TOP Qualität, also klicken und kaufen

  8. #8
    Youngster
    Themenstarter
    Avatar von Permafrost
    Registriert seit
    21.02.2011
    Beiträge
    12
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: foreach-Schleife zur Text-Verschlüsselung

    Ja, alle Änerdungen sind vorgenommen worden. Die Echos habe ich vorsichtshalber ausgequotet. Das & entfernt, die Bedingung $AbgleichText === FALSE gesetzt.

    ---> leeres Browserfenster und vorher wurden mir auch keine Parse-Errors angezeigt, wie man es vielleicht vermuten würde.

    Falls gewollt, gebe ich einfach das gesamte Skript durch, zu Testzwecken.

  9. #9
    der/die Göttliche Avatar von jojo87
    Registriert seit
    23.03.2007
    Ort
    Leipzig
    Alter
    30
    Beiträge
    3.131
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: foreach-Schleife zur Text-Verschlüsselung

    ganzes script wär nicht verkehrt.
    Und da Synaptic so gerne belehrt wird: $value wird im foreach-Konstrukt erzeugt und erhält bei jedem Durchlauf den nächsten Wert von $arrText. Normal wäre $value eine Kopie, dessen Änderungen sich nicht auf den tatsächlichen Wert in $arrText auswirken. Wird $value im foreach-Konstrukt aber als Referenz ausgewiesen, so werden Änderungen an &$value auch sofort auf den Wert in $arrText angewandt. Inwiefern das gewollt ist muss jeder selber wissen. Meiner Meinung nach liest es sich deutlich einfacher, wenn gewünschte Änderungen explizit wieder in $arrText unter Verwendung des Schlüssels von $value gesetzt werden. Referenzen führen vor Allem bei unerfahrenen Programmierern schnell zu schwer zu findenden Fehlern.

    PS: wo führst du das Script denn aus? manche (free-)Provider unterdrücken nämlich die Ausgabe von Fehlern.

  10. #10
    Youngster
    Themenstarter
    Avatar von Permafrost
    Registriert seit
    21.02.2011
    Beiträge
    12
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: foreach-Schleife zur Text-Verschlüsselung

    PHP-Code:
    <html>
    <body>
    <!--#include file="noadvertising.css" -->

    <?php

    // Keiner der Eingabewerte darf leer sein
    if ( ($_GET['IName'] <> ""
      && (
    $_GET['ISchluessel'] <> ""
      && (
    $_GET['IText'] <> "") )
    {   
        
    // Definition der Eingaben und des resultierenden Dateinamens
        
    $Name     $_GET['IName'];
        
    $Schluessel    $_GET['ISchluessel'];
        
    $Text   $_GET['IText'];
        
    $DatName  "$Name.txt";   
        
        
    // Verschlüsselung
        
    include 's_004.php';
        
        
    // Anlegen der Datei
        
    $Datei fopen $DatName"w+" );   

        
    // Schreiben der Inhalte
        
    fwrite $Datei$Name );
        
    fwrite $Datei"|/|" );
        
    fwrite $Datei$Schluessel );
        
    fwrite $Datei"|/|" );
        
    fwrite $Datei$ReText );

        
    //echo "Der Text wurde $Schluessel-verschlüsselt gespeichert.";

        // Datei wird nicht weiter ausgeführt
        
    exit;      
    }

    else
    {
        echo 
    "Es wurden nicht alle Felder ausgefüllt.";
    }

    ?>

    <form action="verschluesselung_01.html" method="get">

      <p>Name des Textes:<br />
      <input type="Text" name="IName" ></p>

      <p>Verschlüsselung:<br />
      <input type="Text" name="ISchluessel" ></p>

      <p>Text:<br />
      <textarea name="IText" cols="60" rows="15"></textarea></p>

      <input type="Submit" name="" value="speichern">

    </form>


    </body>
    </html>
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    über include wird das eigentlich Verschlüsselungs-Skript aufgerufen:

    PHP-Code:
    <?php

    // Ersetzungstabelle
    $A    "ü";
    $B    "P";
    $C    "o";
    $D    "g";
    $E    "U";
    $F    "z";
    $G    "t";
    $H    "s";
    $I    "e";
    $J    "w";
    $K    "Ö";
    $L    "0";
    $M    "J";
    $N    "ä";
    $O    "v";
    $P    "b";
    $Q    "n";
    $R    "m";
    $S    "A";
    $T    "6";
    $U    "D";
    $V    "f";
    $W    "i";
    $X    "h";
    $Y    "x";
    $Z    "K";
    $Ä    "l";
    $Ö    "ß";
    $Ü    "q";

    $Ak   "Ü";
    $Bk   "O";
    $Ck   "p";
    $Dk   "G";
    $Ek   "u";
    $Fk   "Z";
    $Gk   "T";
    $Hk   "S";
    $Ik   "E";
    $Jk   "W";
    $Kk   "F";
    $Lk   "Y";
    $Mk   "j";
    $Nk   "9";
    $Ok   "V";
    $Pk   "d";
    $Qk   "N";
    $Rk   "M";
    $Sk   "a";
    $Tk   "R";
    $Uk   "B";
    $Vk   "ö";
    $Wk   "5";
    $Xk   "H";
    $Yk   "X";
    $Zk   "k";
    $Äk   "L";
    $Ök   "1";
    $Ük   "Q";

    $sz   "3";

    $eins    "C";
    $zwei    "7";
    $drei    "2";
    $vier    "Ä";
    $fuenf    "8";
    $sechs    "c";
    $sieben    "r";
    $acht    "y";
    $neun    "4";
    $null    "I";

    // fasst Ersetzungstabelle in ein array
    $arrCode = array ($A$B$C$D$E$F$G$H$I$J$K,
                      
    $L$M$N$O$P$Q$R$S$T$U$V,
                      
    $W$X$Y$Z,
                      
    $Ak$Bk$Ck$Dk$Ek$Fk$Gk$Hk$Ik$Jk$Kk,
                      
    $Lk$Mk$Nk$Ok$Pk$Qk$Rk$Sk$Tk$Uk$Vk,
                      
    $Wk$Xk$Yk$Zk$Äk$Ök$Ük,
                      
    $sz,
                      
    $eins$zwei$drei$vier$fuenf$sechs$sieben$acht$neun$null);
                      
    // alle zu ersetzenden Zeichen in gleichförmigen array wie $arrCode
    $arrAlph = array ('A''B''C''D''E''F''G''H''I''J''K',
                      
    'L''M''N''O''P''Q''R''S''T''U''V',
                      
    'W''X''Y''Z''Ä''Ö''Ü',
                      
    'a''b''c''d''e''f''g''h''i''j''k',
                      
    'l''m''n''o''p''q''r''s''t''u''v',
                      
    'w''x''y''z''ä''ö''ü',
                      
    'ß',
                      
    '1''2''3''4''5''6''7''8''9''0');   

    // ------------------------ab hier geht's los----------------------------------------------

    // eingegebener Text wird in einzelne Zeichen zum array gesplittet
    $arrText str_split $Text );

    // Testwiedergabe vom unbehandelten Text-array in array-Form
    print_r$arrText );

    // Text-array wird schrittweise durchlaufen und der Wert des aktuellen Elements jeweils behandelt -- startet automatisch beim ersten Element
    foreach ($arrText as $value)
        {
        
    $AbgleichText array_search ($value$arrAlph);
        
        if ( 
    $AbgleichText === FALSE )
            {
            
    //echo '<font color="red">'$value'</font>';
            
    }
        
        else
            {
            
    // Testnachricht, ob if überhaupt mal beginnt ...
            //echo ".";
            
            // an welchem Schlüssel befindet sich der array-Zeiger im Alphabet-array?
            
    $ZeigerAlph key ($arrAlph);
            
            
    // Ersetzen des aktuell behandelten Werts durch Äquivalent des Verschlüsselungs-arrays
            
    $value $arrCode[$ZeigerAlph];
            
            
    //echo '<font color="green">'$value'</font>';
                         
            
    reset $arrAlph );
            }
        
          }

    // Text-array wird wieder zum string    
    $ReText implode (""$arrText); 

    ?>
    Wundert Euch bitte nicht, wozu es ISchluessel gibt. Das ist ein Relikt und hat ohnehin erstmal keinen Einfluss.

    Als Provider nutze ich funpic.de, da es nach kurzem Umschauen dort noch ne Menge Freiheiten gab, abgesehen vom Bilderhochladen und anderen datenlastigen Handlungen. Bisher wurden mir auch immer brav Fehlermeldungen ausgegeben. Deswegen ist es auch verwunderlich, dass keine Rede war von einem parse error vor den letzten Veränderungen.
    Geändert von Permafrost (22.02.2011 um 13:57 Uhr)

Ähnliche Themen

  1. [PHP] foreach() kaputt ?!?
    Von Tobse im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 5
    Letzter Beitrag: 11.06.2010, 21:51
  2. Brauche Hilfe - Abbruch von foreach Schleife
    Von TanyaTie im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 12
    Letzter Beitrag: 26.06.2009, 20:49
  3. Problem mit Schleife in der Schleife
    Von 1234d1 im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 9
    Letzter Beitrag: 16.06.2009, 18:41
  4. foreach problem
    Von Unregistriert im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 1
    Letzter Beitrag: 05.09.2008, 23:19
  5. Foreach problem
    Von JDF1976 im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 1
    Letzter Beitrag: 17.01.2007, 20:19

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •