#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 + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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: + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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; } + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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ültiges Zeichen: ' . chr ( $buchstabe ). '</font></b>' ; }} ?> Habs nicht getestet, aber es sollte so funktionieren... + Multi-Zitat Zitieren
#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... + Multi-Zitat Zitieren
#14 25. März 2009 AW: Cäsar code fast fertig nur noch paar probleme -.- *push* problem besteht immernoch + Multi-Zitat Zitieren
#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ü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. + Multi-Zitat Zitieren