[PHP] Cäsar code fast fertig nur noch paar probleme -.-

Dieses Thema im Forum "Webentwicklung" wurde erstellt von SoulOfRussia, 23. März 2009 .

  1. 23. März 2009
    Cäsar code fast fertig nur noch paar probleme -.-

    Kann mir jemand helfen???

    der Code soll einen Cäsar-Code darstellen, weiß einfach nicht mehr weiter...

    Problem nr. 1. der gibt nur den ersten Buchstaben verschlüsselt aus.
    Problem nr. 2. die IF-Verzweigung funktioniert nicht -.-

    das Leerzeichen soll nicht verschlüsselt bzw. verschoben werden.
    also nur zeichen von a-z und A-Z deswegen die IF-Anweisung

    PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>
    <title>Caesar Code AWE</title>
    </head>
    <body>
    <form method="POST" action="<?php  echo  $PHP_SELF ?>">
      <input type="text" name="text">
    <br><br>
        <input type="text" maxlength="4" name="verschiebung"><br>
      <br>
        <input type="submit" name="submit" value="Text Verschlüsseln">
    </form>
    <?php
    $text 
    $_POST [ text ];
    $v  $_POST [ verschiebung ];
    $lange  strlen ( $text );
    for (
    $i = 0 $i < $lange $i ++);
    {
    $ausgabe  substr ( $text 0 $lange ); //Text mit substr einlesen
    $ausgabe  ord ( $ausgabe );          //Eingelesener Text mit ord in  Ascii code umgewandelt
    $ausgabe  $ausgabe  $v ;         //Ascii plus verschiebung = neuer Buchstabe
    if ( $ausgabe  122 );
    {
        
    $ausgabe  = & ausgabe  25 ;
    }
    $ausgabe  chr ( $ausgabe );  //Ascii Code  mit $v addieren damit ein neuer Ascii code rauskommt durch Funktion chr wird der Ascii Code in Buchstaben umgewandelt 

    echo  $ausgabe ;
    }
    ?>
    </body>
    </html>
    Danke im vorraus !

    PS: @ MURDOC bitte nicht diesen Threas closen und mir irgendwelche funktionen geben die ich garnicht brauche... danke
     
  2. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    PHP:
    <? php
    $text 
    $_POST [ text ];
    $v  $_POST [ verschiebung ];
    $lange  strlen ( $text );
    for (
    $i = 0 $i < $lange $i ++);
    {
    $ausgabe  substr ( $text 0 $lange ); //Text mit substr einlesen
    $ausgabe  ord ( $ausgabe );          //Eingelesener Text mit ord in  Ascii code umgewandelt
    $ausgabe  $ausgabe  $v ;         //Ascii plus verschiebung = neuer Buchstabe
    if ( $ausgabe  122 );
    {
        
    $ausgabe  = & ausgabe  25 ;
    }
    $ausgabe  chr ( $ausgabe );  //Ascii Code  mit $v addieren damit ein neuer Ascii code rauskommt durch Funktion chr wird der Ascii Code in Buchstaben umgewandelt 

    echo  $ausgabe ;
    }
    ?>
    substr($text,0,$lange);
    du startest immer bei Buchstabe 0.
    substr($text,$i,1);
    PHP: substr - Manual
    str, start[, length
    // alternativ:
    $einZeichen = $text{$i};

    $ausgabe = &ausgabe - 25;
    meinst du
    $ausgabe -= 25;
    aka
    $ausgabe = $ausgabe - 25;

    ? oder ist das & da gewollt.
     
  3. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    Ne das & sollte ein $ sein ^^

    wenn ich
    $ausgabe = substr($text, $i, 1);
    schreibe dann kommt da: 
     
  4. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    Was heißt "Text mit substr einlesen"? :O

    Warum verwendest du nicht einfach gleich $text, es wird bei deiner substr-Operation ja garkein substring ausgewählt.
     
  5. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    ohne substr kommt auch nur  raus wenn man "hallo" eingibt und um 5 verschiebt
     
  6. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    Das Semikolon am Ende dieser zeile ist fehl am platze:

    PHP:
    for ( $i = 0 $i < $lange $i ++);
    Ohne sollte es klappen.

    Gruß,
    Figger

    //und du musst natürlich bei substr mit $i starten und nicht mit 0
     
  7. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    JA es KLAPPT hahah
    danke Figger du bist der beste xD

    und jetzt noch bitte sagen wieso die IF-Verzweigung nicht funktioniert ^^
    also der mit irgendwie "ç" aus wenn ich noch nichts eingegeben habe und "T" wenn ich "m" eingegeben habe und um 5 verschiebe

    ASCII-Tabelle

    if ($ausgabe > 122);
    #die 122 deswegen da das kleine z den Ascii Wert 122 hat
    #jedoch das große Z den Ascii Wert 90 hat...
    #also müsste man 2 Grenzwerte (90 und 122) haben A-Z sind im Ascii 65-90
    #und a-z sind im Ascii 97-122
    {
    $ausgabe = &ausgabe - 25;
    }
     
  8. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    Der fehler liegt wahrscheinlich beim substr. Die syntax ist substr(text, start, länge). Da du immer nur einen Buchstaben willst, muss die Länge immer 1 sein und nicht $lange.

    Du solltest btw, falls du eine reine Cäsar Verschlüsselung implementieren willst, vor dem codieren abfragen ob dein Zeichen überhaupt ein Buchstabe ist, also im Bereich 65-90 oder 97-122 liegt. Dann solltest du deine If Abfrage demensprechend anpassen, dass er zwischen Groß- und Kleinbuchstaben unterscheidet. Das brauchst du allerdings nur wenn du es perfekt machen willst.

    Gruß,
    Figger
     
  9. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    ich glaub ihr habt mich bischen falsch verstanden.
    Es sollen ja alle Buchstaben verschlüsselt werden, deswegen muss da ja $lange hin ^^

    Und das mit der IF-Abfrage...
    wenn der User ein Wort mit z eingibt, und dieses Wort dann um z.b. 5 verschiebt, sollte anstatt dem "z" ein "e" erscheinen.
     
  10. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    Bei der For-Schleife ja, aber du verschlüsselst die Zeichenkette ja Buchstabe für Buchstabe, und somit MUSS da eine 1 hin

    Und wenn der User "#" eingibt? Das ist (in diesem fall) eine unerwünschte eingabe, die muss abgefangen werden. Und wenn er "Z" eingibt? bei einer verschiebung von 5 bekommst du bei deinem Code als verschlüsselten Buchstaben "_" anstatt "E".

    //Wenn man eine Verschiebung jenseits der 25 angibt, dann kommt btw auch crap raus. Sollte auch abgefangen werden.
     
  11. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    jaja deswegen auch if ($ausgabe > 122) dann $ausgabe = $ausgabe - 25
    das funktioniert aber irgendwie nicht...

    wie kann man 2 Grenzwerte in der If Verzweigung einbauen??? also wenn der Wert ab 97 größer als 122(Kleinbuchstaben) ist dann minus 25
    und wenn der Wert ab 65 größer als 90(Großbuchstaben) ist auch minus 25
     
  12. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    PHP:
    <? php
    $text 
    $_POST [ text ];
    $v  $_POST [ verschiebung ];
    if(
    $v > 0 && $v < 25 ){  //nur verschlüsseln wenn die Verschiebung im gültigen Bereich liegt
        
    $lange  strlen ( $text );
        for (
    $i = 0 $i < $lange $i ++)
        {
            
    $buchstabe  substr ( $text $i 1 ); //Text mit substr einlesen
            
    $buchstabe  ord ( $buchstabe );          //Eingelesener Text mit ord in  Ascii code umgewandelt
            
    if( $buchstabe > 64 && $buchstabe < 91 )     //ist das zeichen ein groß- oder kleinbuchstabe?
                
    $grossbuchstabe = true ;
            elseif(
    $buchstabe > 96 && $buchstabe < 123 )
                
    $grossbuchstabe = false ;
            if(isset(
    $grossbuchstabe )){         //ist die variable 'grossbuchstabe' nicht gesetzt, dann wurde ein ungültiges zeichen eingegeben
                    
    $ausgabe  $buchstabe  $v ;         //Ascii plus verschiebung = neuer Buchstabe
                    
    if (( $grossbuchstabe && $ausgabe > 90 )||(! $grossbuchstabe && $ausgabe > 122 ))  //sind wür am ende des Alphabets angelangt?
                
    {
                    
    $ausgabe  = & ausgabe  25 ;
                }
                
    $ausgabe  chr ( $ausgabe );  //Ascii Code  mit $v addieren damit ein neuer Ascii code rauskommt durch Funktion chr wird der Ascii Code in Buchstaben umgewandelt

                
    echo  $ausgabe ;
            }else echo 
    '<br><b><font color="#FF0000">Ung&uuml;ltiges Zeichen: ' . chr ( $buchstabe ). '</font></b>' ;
        }
    }
    ?>
    Habs nicht getestet, aber es sollte so funktionieren...
     
  13. 23. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    PHP:
    <? php
    $text 
    $_POST [ text ];
    $v  $_POST [ verschiebung ];
    $lange  strlen ( $text );
    for (
    $i = 0 $i < $lange $i ++)
    {
    $ausgabe  substr ( $text $i $lange );         //Text mit substr einlesen
    $ausgabe  ord ( $ausgabe );                      //Eingelesener Text mit ord in  Ascii code umgewandelt
    if ( 32  ==  $ausgabe )                          //wenn ausgabe minus $v gleich 32(Ascii-Leerzeichen) ist dann...
    {
        
    $ausgabe  $ausgabe ;                     //... minus den verschiebungswert
    }
    else {
    $ausgabe  $ausgabe  $v ;                     //Ascii plus verschiebung = neuer Buchstabe
    }
    while (
    $ausgabe  122 )                         //Schleife: Solange $ausgabe größer als 122 ist...tue...
    {                            
    if (
    $ausgabe  122 )                            
    {
        
    $ausgabe  $ausgabe  26 ;                 //...minus 26
    }
    }
    while (
    $ausgabe > 90 && $ausgabe < 97 )            
    {
    if (
    $ausgabe  90 )                            
    {
        
    $ausgabe  $ausgabe  26 ;                 //...minus 26
    }
    }

    echo 
    chr ( $ausgabe ); //Ascii Code  mit $v addieren damit ein neuer Ascii code rauskommt durch Funktion chr wird der Ascii Code in Buchstaben umgewandelt 
    }
    ?>
    jetzt hab ich folgendes problem... wenn ich Großbuchstaben eingebe, dann kommen irgendwie kleine buchstaben dazu, wenn ich über 7 oder um 7 verschiebe...
    das is jetzt noch das einzigste problem, da die kleinbuchstaben 97anfangen und 122 aufhören und höher es keine anderen Buchstaben mehr gibt...
    Die Großbuchstaben fangen bei 65 an und enden bei 90... was dann bei einer verschiebung um 7 im bereich der Kleinbuchstaben liegt und diese dann nicht um 26 subtrahiert werden...
     
  14. 25. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    *push*
    problem besteht immernoch
     
  15. 25. März 2009
    AW: Cäsar code fast fertig nur noch paar probleme -.-

    ... diese Problem wurde bereits in dem Code, den ich dir oben angeboten habe gelöst -.- Die einzige modifikation, die du noch brauchst damit es deinen vorstellungen entspricht, ist dass du
    PHP:
    else echo  '<br><b><font color="#FF0000">Ung&uuml;ltiges Zeichen: ' . chr ( $buchstabe ). '</font></b>' ;
    durch
    PHP:
    else echo  chr ( $buchstabe );
    ersetzen musst. Somit werden alle Zeichen, die nicht im Alphabet vorkommen, unverschlüsselt ausgegeben.
     
  16. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.