Jackery IFA Fireplace

PHP Eingaben vom linken Textfeld verschlüsseln und ins Rechte eintragen

Big-Blue

Lieutenant
Registriert
Mai 2010
Beiträge
569
Hallöchen,

ich bin momentan am "Rumspielen" mit PHP und mir hat es die Kryptographie angetan.
Da ich in Websprachen allerdings noch nicht wirklich begabt bin, da ich vorher fast nur mit Java gearbeitet habe, stellt mich folgende Aufgabe vor ein Problem:
Ich brauche zwei Text-Felder und einen Button. Das rechte Textfeld sollte für den User unbeschreibbar sein. Per Buttonklick wird eine Methode ausgeführt, die den Text des linken Feldes durch meine "encrypt($string)"-Function laufen lässt (Da reines PHP war die nicht so das Problem) und im rechten Textfeld einfügt.
Das einzige, was ich bisher mit User-Eingaben in PHP gemacht habe, ist ein ziemlich einfacher Login...
Was ich *denke*, was ich brauche sind HTML-Forms. Für den Button hatte ich an JavaScript gedacht, aber das scheint laut Google-Recherchen rein Clientseitig zu sein und nicht ohne Erweiterungen mit PHP zu kommunizieren.
Ich erwarte hier keinen ganzen Sourcecode, sondern würde mir ein, zwei Anstöße von euch wünschen. Wie kann ich das am besten realisieren? Brauche ich noch mehr außer HTML-Forms und PHP?
 
Also wenn du es nur mittels HTML und PHP machen willst muss die Seite nach dem Drücken des Buttons neugeladen werden, wenn du es aber dynamisch haben willst, sprich ohne des erneuten Ladens der Seite wirst du an JS nicht rumkommen.

Brauchst da für JS keine Erweiterung, klar mit jQuery ist einfach und eleganter , kannst aber auch eine AJAX-Kommunikation mit dem Server(wo dein PHP-Script läuft) mittels der Bordmittel von JavaScript realisieren.

Google einfach an "Javascript AJAX" und findest abertausende Tutorials ;)

Grüß,

iDave
 
Hi,

Für den Button hatte ich an JavaScript gedacht, aber das scheint laut Google-Recherchen rein Clientseitig zu sein und nicht ohne Erweiterungen mit PHP zu kommunizieren

Nicht mit Erweiterung. Das Stichwort heißt "AJAX". Damit kannst du in JS eine Methode auf dem Server ausführen.

Aber in diesem Fall geht es evtl auch einfacher: Einfach die linke Box (die beschreibbare) und den Button in eine "Form" (Formular) und den Button als "Submit" benutzen. Dann kriegst du die Daten an den Server geschickt (form action="auswertung.php") und kannst von da aus dann deine Verschlüsselung machen und die "unbeschreibbare" Textbox mit dem neuen Wert füllen.

AJAX ist in diesem Fall einfach eleganter, weil nur die Werte hin- und hergeschickt werden und die Seite an sich nicht neu geladen werden muss.

VG,
Mad

Edit: 2 Hirne, ein Gedanke ;)
 
Ouh, danke für die schnelle Antwort, AJAX ist anscheinend bisher an mir vorbeigerast.
Die Tutorial-Serie auf w3schools.com sieht recht vielversprechend aus, ich geh mal davon aus, dass ich das hinkriege. :D
 
Hi,

und wenn nicht: Einfach wieder hier posten, dann "werden Sie geholfen" ;)

VG,
Mad
 
Tjaja, dann muss mir wohl doch wieder geholfen werden ^^"
AJAX scheint perfekt für das zu sein, was ich brauche, doch anscheinend scheitert es bei mir am JavaScript, ich vermute mal am Aufrufen der Funktion mit den Parametern. (Da mehrere Eingaben, die verschlüsselt werden sollen)
Script (formular.php):
Code:
<script type="text/javascript">
function transfer(input,output) {
var xmlhttp;
if (input.length==0) { 
  document.getElementById(output).innerHTML="";
  return;
}
if (window.XMLHttpRequest) {
  xmlhttp=new XMLHttpRequest();
}
else {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    document.getElementById(output).innerHTML=xmlhttp.responseText;
  }
}
xmlhttp.open("GET","transfer.php?input="+input,true);
xmlhttp.send();
}
</script>

Funktionsaufruf (formular.php):
Code:
<form action=""> 
<font size="6">Input1: </font><input type="text" id="input1"/> <button type="button" onclick="transfer(input1,encrypted1)"><- Verschlüsseln -></button> <input type="text" id="encrypted1" readonly="readonly"/>
</form>

Mit der transfer.php scheint alles zu stimmen, über /transfer.php?input=WORT liefert die Zeile "echo $response;" valide Ergebnisse.
 
Zuletzt bearbeitet:
Das Problem liegt vermutlich hier

HTML:
onclick="transfer(input1,encrypted1)">

musst die werte als String definieren also 'input1' & 'encrypted1' oder mit escapten doppelhochkomma also so:

HTML:
onclick="transfer('input1','encrypted1')">
onclick="transfer(\"input1\",\"encrypted1\")">

Des Weiteren kann ich mir irgendwie nicht vorstellen, dass die tranfer.php die richtigen Werte bekommt weil du den Inhalt des "input1" nie abholst, du übergibst nur den Namen.

Du kannst auch das Ganze Element an die Funktion übergeben also so:

HTML:
onclick="transfer(document.getElementById(\"input1\"),document.getElementById(\"encrypted1\")">

Somit musst kannst du in der JS-Funktion direkt mit den Elementen Arbeiten ;-) (glaube das ging auch :D)


Grüß,

iDave
 
Ersetze mal
Code:
onclick="transfer(input1,encrypted1)"
mit
Code:
onclick="transfer(document.getElementById(\"input1\"),document.getElementById(\"encrypted1\"))"
Sonst übergibst du nämlich die Variableninhalte "encrypted1" und "input1" - die du aber nirgends gesetzt hast (ergo: null oder so - kA wie JS das handhabt, sollte wohl mit nem Fehler abbrechen).

ansonsten - try this one ...
Code:
<html>
 <head>
  <script type="text/javascript">
  <!--
	var request = false;

	// Request senden
	function setRequest() {
		// Request erzeugen
		if (window.XMLHttpRequest) {
			request = new XMLHttpRequest(); // Mozilla, Safari, Opera
		} else if (window.ActiveXObject) {
			try {
				request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
			} catch (e) {
				try {
					request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
				} catch (e) {}
			}
		}

		// überprüfen, ob Request erzeugt wurde
		if (!request) {
			alert("Kann keine XMLHTTP-Instanz erzeugen");
			return false;
		} else {
                        // den Inhalt holen und die URL zusammenschuscheln
			var url = "transfer.php?input=" + document.getElementById('myField').value;
			// Request öffnen
			request.open('get', url, true);
			// Request senden
			request.send(null);
			// Request auswerten
			request.onreadystatechange = interpretRequest;
		}
	}

	// Request auswerten
	function interpretRequest() {
		switch (request.readyState) {
			// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
			case 4:
				if (request.status != 200) {
					alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
				} else {
					var content = request.responseText;
					// den Inhalt schreiben
                                        document.getElementById('myField2').value = content;
				}
				break;
			default:
				break;
		}
	}
  //-->
  </script>
 </head>
 <body>
<form action="javascript:setRequest()">
  <p>Feld 1:<br><input id="myField" type="text" size="30" maxlength="40"></p>
  <p>Feld 2:<br><input id="myField2" type="text" size="30" maxlength="40"></p>
<input type="submit" value=" Absenden ">
</form>

 </body>
</html>

@iDave
Code:
onclick="transfer('input1','encrypted1')">
Sollte ihm aber (ohne JS zu können) in die Funktion "transfer" nicht den Inhalt der Felder schieben, sondern einfach nur die Strings "input1" und "encrypted1".
 
@voodoo44

ich weiss aber da er in der JS-Funktion mit getElementByID(die_uebergebene_variable) drauf zugreift kann er auch einfache Strings übergeben.


Da er ja geschrieben hat dass es mehr solche "Transfers" gibt ist es nur logisch die JS-Funktion so zu gestalten dass er diese jedes mal verwenden kann (vorausgesetzt die Verarbeitung ist die selbe und nur die Elemente sich ändern). Das kann man nur realisieren in den man der JS-Funktion entweder die kompletten Elemente übergibt oder die Namen der Elemente und die Funktion holt sich selbst die Elemente mittels der übergebener Namen (getElementByID).


Steht aber auch alles in meiner letzten Antwort. In deiner Lösung sind die Elemente fest verdrahtet in der JS-Funktion.

Tjaja, dann muss mir wohl doch wieder geholfen werden ^^"
AJAX scheint perfekt für das zu sein, was ich brauche, doch anscheinend scheitert es bei mir am JavaScript, ich vermute mal am Aufrufen der Funktion mit den Parametern. (Da mehrere Eingaben, die verschlüsselt werden sollen)
Script (formular.php):

Grüß,

iDave
 
Dankeschön für den Hinweis mit der Übergabe der Parameter. ^^
Aber irgendwas scheint da definitiv faul zu sein...
Wenn ich die Werte per "transfer('nameI','nameO')" übergebe und die Funktion ausführe, passiert nichts offensichtliches. Ich habe also mal ein "alert(xmlhttp.responseText);" gesetzt und siehe da, die Funktion arbeitet korrekt. Es wird nur nichts ins Textfeld geschrieben.
Momentane Funktion:
Code:
function transfer(inputID,outputID) {
	var inputObject = document.getElementById(inputID);
	var outputObject = document.getElementById(outputID);
	var input = inputObject.value;
	var output = outputObject.value;
	var xmlhttp;
	if (input != "") {
		if (window.XMLHttpRequest) {
			xmlhttp = new XMLHttpRequest();
		} else {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4 && xmlhttp.status== 200) {
				output = xmlhttp.responseText;
				alert(xmlhttp.responseText);
			}
		}
		xmlhttp.open("GET","transfer.php?input="+input,true);
		xmlhttp.send();
	}
}
Wenn ich nun aber per anderem Button und einer einfachen "setText()"-Funktion den Inhalt des Feldes ändere, geht das auf einmal...
Code:
function setText() {
	var x = document.getElementById("nameO");
	x.value = "Test";
}
Plötzlich erscheint etwas im zweiten Feld. Danach habe ich mehrmals alles auf Tippfehler geprüft und konnte dennoch nichts finden. Die Parameter scheinen richtig übergeben (ich bekomme ja per alert() einen korrekt verschlüsselten Wert, input funktioniert also) und sonst finde ich auch nichts mehr...
 
hehe isen blöder Tippfehler :D

bei deinem Test hast du es auch richtig gemacht nur im Hauptscript es vergessen.

ersetze

HTML:
output = xmlhttp.responseText;

durch

HTML:
outputObject.innerHTML = xmlhttp.responseText;

du hast den response in die variable output einfach geschoben (was auch sicherlich funktioniert hat, mach jetzt einen alert auf output wirst sehen das Script macht das was du hingeschrieben hast).

Du willst es aber als Inhalt in das Objekt setzen deshalb musst du das outputObject verwenden ;-)

Grüß,

iDave
 
iDave schrieb:
Steht aber auch alles in meiner letzten Antwort. In deiner Lösung sind die Elemente fest verdrahtet in der JS-Funktion.
Jemandem, der sich mit Kryptographie beschäftigt, wird man nicht erklären müssen, dass er an der Stelle dann auch einfach ein Array mit mehreren Objekten/Feldern übergeben kann (vermute ich mal).
 
Big-Blue hat doch geschrieben dass er mit PHP und der Webprogrammiert erst anfängt. Da muss man jetzt nicht so herabschauend sein wie du es grade bist voodoo44.

Obwohl er JAVA kann, heisst es nicht umbedingt dass er auch PHP / JS / HTML kann, den grade diese zwei Bereiche (Java und die klassische Webentwicklung) sind sehr verschieden was das programmieren angeht. (Habe in beiden Welten genug Erfahrung um das zu beurteilen. Im Betrieb programmiere ich mit JAVA und COBOL und im Hobby Webentwicklung sowie Objective-C).

Ausserdem hat Kryptographie im Grundwesen so gut wie nichts mit Programmieren zu tun, mehr mit Mathematik.
Kryptographie wird seit Jahrhunderten eingesetzt und Programmiert wird erst seit 60 Jahren also kann ich deine letzte Aussage gar nicht nachvollziehen den sie hat kaum Halt und Fuss.

So ich denke dass alle Probleme und Fehler von Big-Blue gelöst wurden also brauchen wir hier auch nicht weiter zu Spammen, wenn er Hilfe braucht meldet er sich wieder.

Grüß,

iDave
 
iDave schrieb:
Big-Blue hat doch geschrieben dass er mit PHP und der Webprogrammiert erst anfängt. Da muss man jetzt nicht so herabschauend sein wie du es grade bist voodoo44.
Wo bin ich denn herabschauend? Das war eine normale Anmerkung, nicht mehr.

iDave schrieb:
Obwohl er JAVA kann, heisst es nicht umbedingt dass er auch PHP / JS / HTML kann, den grade diese zwei Bereiche (Java und die klassische Webentwicklung) sind sehr verschieden was das programmieren angeht.
Und? Wenn er JAVA kann, dann weiss er, was ein Array ist und dass man das auch an eine Methode übergeben kann. Ich vermute mal stark, dass er (als Programmiererfahrener) auch mit Google umgehen kann und von selbst herausfinden wird, dass es in PHP Arrays gibt - und vermutlich wird er auch ziemlich schnell verstehen, wie die (zumindest in Grundzügen) in PHP funktionieren.
Er wird wohl nicht mit einem Blatt Papier dasitzen und irgendwelche RSA-Kodierungen entschlüsseln. Das habe ich 2x im Studium gemacht - danach haben wir das am Rechner getan - im übrigen sowohl im Mathematica als auch in C, ASM und Java.

iDave schrieb:
Ausserdem hat Kryptographie im Grundwesen so gut wie nichts mit Programmieren zu tun, mehr mit Mathematik.
Ach, echt? Mist - und ich dachte, dass das immer nur mit Programmierung zu tun hat. Woher hast du dieses Wissen?

iDave schrieb:
Kryptographie wird seit Jahrhunderten eingesetzt und Programmiert wird erst seit 60 Jahren also kann ich deine letzte Aussage gar nicht nachvollziehen den sie hat kaum Halt und Fuss.
Ja - und Algorithmen haben wir erst seit knapp 50 Jahren. Du hast schon recht, entschuldige meine Unwissenheit.
Im ernst: was hat das jetzt mit meiner Aussage zu tun? Er kann Java (zumindest Grundkenntnisse scheint er zu haben - ergo kennt er Arrays, Klassen, Objekte, Schleifen, ...- da er damit ja wohl öfter zu tun hat) und beschäftigt sich mit Kryptographie. Wenn er das Grundwissen über die mathematischen Abläufe (Mathematiker und auch Informatiker nennen das "Algorithmus") hat, wird er diese wohl auch implementieren können - auch wenn es nur einfache Kryptographieverfahren sind. Dass er deshalb mit Schleifen und Arrays klarkommt nehme ich an, weil er eben Ahnung von Java UND Kryptographie hat. Und wenn er schon mal was algorithmisches in Java umgesetzt hat, dann wird er sich mit den genannten Themen auch auskennen. Deine Belehrungen kannst du dir sparen.

iDave schrieb:
(Habe in beiden Welten genug Erfahrung um das zu beurteilen. Im Betrieb programmiere ich mit JAVA und COBOL und im Hobby Webentwicklung sowie Objective-C)
Und warum habe ich zu wenig Erfahrung? :( So ein Mist, ich kann weder .NET noch Java oder C/C++ (von CCBasic und ASM ganz zu schweigen!) -- nur PHP und das mach ich auch nur in meiner Freizeit seit 2 Monaten :(

Fassen wir nochmal zusammen:
Ich war herabschauend zum TE, weil ich ihm unterstellt habe, er hätte im Bereich Java schon einmal etwas kryptografisches Programmiert (einen ALGORITHMUS implementiert) und könne deshalb auch selbst auf die Idee kommen, später eventuell iterativ zu arbeiten und seine Javascript-Funktionen sowie PHP-Methoden selbst zu vereinfachen indem er dort mit Arrays und Schleifen seine Daten entsprechend erzeugt und abfragt.
Wie herabschauend, ihm eine Fähigkeit anzuerkennen. Dafür entschuldige ich mich in aller Form beim TE!

Und dann soll ich mich auch noch von 'nem Java-Objekteschubser belehren lassen, was Kryptographie ist ... zum Glück hat man Algorithmen und damit auch Kryptographie ja noch nie auf ASM-Basis umgesetzt - sowas gab es auf alten Satelliten, Raumstationen, Flugzeugen, Militärgeräten ja nie. Die hatten schon immer alles in diesem komischen Java-Bytecode.
 
Hi,

Ach, echt? Mist - und ich dachte, dass das immer nur mit Programmierung zu tun hat. Woher hast du dieses Wissen?

Ich sehe das auch so, dass Kryptographie eher Mathematik als Programmierung ist und ich bin ebenfalls schon ein paar Jahre Programmierer.

Und dann soll ich mich auch noch von 'nem Java-Objekteschubser belehren lassen, was Kryptographie ist ... zum Glück hat man Algorithmen und damit auch Kryptographie ja noch nie auf ASM-Basis umgesetzt - sowas gab es auf alten Satelliten, Raumstationen, Flugzeugen, Militärgeräten ja nie. Die hatten schon immer alles in diesem komischen Java-Bytecode.

Das ist erstens beleidigend - was absolut nicht sein muss, wir können hier doch bitte alle sachlich bleiben.

Zweitens ist es absolut belanglos, da es - wie du ja selbst sagst - bei der Kryptographie eigentlich nur um das Verständnis eines Algorithmus geht und nicht um die verwendete Sprache.

Und drittens hat ein "Java-Objektschubser" mit Sicherheit einiges an Ahnung, wenn er sein Fach beherrscht. Daher ist dein Ton absolut nicht angebracht.

Reisst euch mal zusammen und verlagert eure Grundlagendiskussion inkl. Anfeindung in einen eigenen Thread oder macht das per PN aus, dem TE hilft das hier rein gar nicht.

VG,
Mad
 
Sicher ist Kryptographie mehr Mathematik als Programmierung - es ist ja nun aber nicht so, dass alle Mathematiker nicht programmieren könnten oder dass Mathematik nicht gar eine wichtige Grundlage der Programmierung wäre.

Nur, wenn ich direkt im Eingangsbeitrag des Themenerstellers das hier lese:
durch meine "encrypt($string)"-Function laufen lässt (Da reines PHP war die nicht so das Problem)
gehe ich davon aus, dass er die Grundlage der Programmierung beherrscht - inklusive der Grundlagen für PHP.

Deshalb sehe ich überhaupt nichts verwerfliches daran, ihm zu unterstellen, er könne den Code schlussendlich dann auch selbst auf mehrere Abfragen optimieren, indem er Schleifen und Arrays nutzt. Womit ich damit den TE beleidigt oder gar "herabschauend" behandelt haben soll, weiss ich nicht.
 

Ähnliche Themen

Zurück
Oben