php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.08.2005, 16:41  
Gast
 
Beiträge: n/a
Standard 2 Fragen zu meinem Script

Schaut es euch erstmal an:

Code:
<html>
<head>
<title>mscrypt</title>
<meta name="author" content="Thomas Huit">
<meta name="generator" content="Chainsaw Homepage Editor">
</head>

<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<textarea name="ptext" cols="33" rows="20">
<?php
echo $pout; //Ausgabe Plaintext
?>
</textarea>

<input type="Submit" value="encrypt" name="encrypt">
<input type="reset" value="reset">

<textarea name="ctext" cols="33" rows="20">
<?php
echo $cout; //Ausgabe Ciphertext
?>
</textarea>

<input type="Submit" value="decrypt" name="decrypt">
<input type="reset" value="reset">
</form>
<?php
//EINSTELLUNGEN

error_reporting(E_ALL);


//DEKLARATIONSTEIL

$pin=$_POST['ptext'];
$cin=$_POST['ctext'];
$pout="";
$cout="";


//Verschluesselungsalgorithmus

function encrypt ($xin)
{
$xout=strtr($xin, "abcdefghijklmnopqrstuvwxyz1234567890", "pxn781r0zmu3eafb6hj2cgkwosvq5ydi4dl9");
return $xout;
}


//Entschluesselungsalgorithmus

function decrypt ($yin)
{
$yout=strtr($yin, "pxn781r0zmu3eafb6hj2cgkwosvq5ydi4dl9", "abcdefghijklmnopqrstuvwxyz1234567890");
return $yout;
}


//HAUPTPROGRAMM

if (isset($_REQUEST['encrypt']))
{
$cout = encrypt($pin);
$pout=$pin;
}
else
{
$pout = decrypt($cin);
$cout=$cin;
}
?>
</body>
</html>
Meine Fragen:

1.
Ich bekomme immer den Error, dass "ptext" und "ctext" undefinierte Indexe (heißt das so?) sind. Ich frage mich woran das liegt. Kann es mir nicht erklären. Es ist ja einfach nur das einlesen von Daten aus dem Formular. Oder kann das damit zusammenhängen, dass die Textareas am Anfang leer sind.
Vielleicht sollte ich die ausführung des Scripts ja gänzlich davon abhängig machen, ob das Formular abgeschickt wurde oder nicht, d.h., dass das Script erst dann ausgeführt wird, wenn ein Submit Button betätigt wurde.
So wie es jetzt ist, scheint es sofort, wenn die Seite geladen wird ausgeführt zu werden.

2.
Die Variablen, die ich nach dem Abschicken des Formulars in den Textareas ausgeben will sind $pout im oberen und $cout im unteren Feld.
Die werden aber vom Script nicht ausgegeben, was wahrscheinlich daran liegt, dass sich der Parser in dem Moment, in dem das "echo" kommt die erstbeste Definition der Variablen sucht. Und die ist leer.
Wie beseitige ich dieses Problem?
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.08.2005, 16:50  
Gast
 
Beiträge: n/a
Standard

1)
Zitat:
So wie es jetzt ist, scheint es sofort, wenn die Seite geladen wird ausgeführt zu werden.
Genau so funktioniert php auf webservern. Eine Anfrage kommt per http rein. Der Webserver entscheidet sich, dass php das erledigen soll. php arbeitete das Skript von Anfang bis Ende ab. Alles, was dabei ausgegeben wird, wird vom Webserver an den client/browser geschickt. Wenn das Skript beendet ist, wird alles dazugehörige weggeworfen.
Wenn der Benutzer das Formular ausgefüllt hat und abschickt, geht das Spiel wieder von vorne los.

2) ergibt sich aus 1)
 
Alt 06.08.2005, 20:06  
Gast
 
Beiträge: n/a
Standard

Also ich nehme mal an, dass das heißen sollte, dass ich die Ausführung des Scripts davon abhängig machen muss, ob das Formular schon abgeschcikt wurde, oder nicht.
Das hab ich versucht (weiß nicht, ob das, wie ich es gemacht habe bei jedem neuen "<?php" nötig ist. Scheint aber so zu sein).
Jedenfalls stellt sich dabei ja schon wieder das Problem, dass das Script im ersten Teil die Bedingung, unter der es sich selbst ausführen soll nicht erkennen kann.
Undefined index 'decrypt'. Warum 'encrypt nicht undefined ist, bleibt mir ein Rätsel. Außerdem werden beim Abschicken des Formulars die Variablen $pout und $cout als nicht definiert angesehen.
Also irgendwie bin ich darüber ziemlich ratlos. Also helft mir bitte!

Gibt es eventuell noch eine andere möglichkeit abzufragen, ob ein Formular abgesendet wurde. Das könnte ich dann in den Textareas einsetzen.

Und warum sind $pout und $cout nicht definiert??

Hier nochmal das modifizierte Script:



Code:
<html>
<head>
<title>mscrypt</title>
<meta name="author" content="Thomas Huit">
<meta name="generator" content="Chainsaw Homepage Editor">
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<textarea name="ptext" cols="33" rows="20">
<?php
error_reporting(E_ALL);
if (isset ($_REQUEST['encrypt']) xor ($_REQUEST['decrypt']))
{
echo $pout; //Ausgabe Plaintext
}
?>
</textarea>

<input type="Submit" value="encrypt" name="encrypt">
<input type="reset" value="reset">

<textarea name="ctext" cols="33" rows="20">
<?php
if (isset ($_REQUEST['encrypt']) xor ($_REQUEST['decrypt']))
{
echo $cout; //Ausgabe Ciphertext
}
?>
</textarea>

<input type="Submit" value="decrypt" name="decrypt">
<input type="reset" value="reset">
</form>

<?php

//BEDINGUNG ZUR AUsFUEHRUNG DES SCRIPTS
if (isset ($_REQUEST['encrypt']) xor ($_REQUEST['decrypt']))
{

//EINSTELLUNGEN

error_reporting(E_ALL);

//DEKLARATIONSTEIL
$pin=$_POST['ptext'];
$cin=$_POST['ctext'];

//Verschluesselungsalgorithmus

function encrypt ($xin)
{
$xout=strtr($xin, "abcdefghijklmnopqrstuvwxyz1234567890", "pxn781r0zmu3eafb6hj2cgkwosvq5ydi4dl9");
return $xout;
}


//Entschluesselungsalgorithmus

function decrypt ($yin)
{
$yout=strtr($yin, "pxn781r0zmu3eafb6hj2cgkwosvq5ydi4dl9", "abcdefghijklmnopqrstuvwxyz1234567890");
return $yout;
}


//HAUPTPROGRAMM

if (isset($_REQUEST['encrypt']))
{
$cout = encrypt($pin);
$pout=$pin;
}
else
{
$pout = decrypt($cin);
$cout=$cin;
}
}
?>

</body>
</html>
 
Alt 06.08.2005, 20:21  
Gast
 
Beiträge: n/a
Standard

wo kommen denn $pout und $cout her, wenn Du sie innerhalb von <textarea> ausgeben lassen willst? Sie müssten vorher gesetzt worden sein, werden sie aber nicht.

Was soll denn isset ($_REQUEST['encrypt']) xor ($_REQUEST['decrypt']) aussagen?
meinst Du vielleicht
isset ($_REQUEST['encrypt']) or isset($_REQUEST['decrypt'])
?
 
Alt 06.08.2005, 22:53  
Gast
 
Beiträge: n/a
Standard

Ja, das mit dem isset wusste ich nicht. Hab das mal so eingegeben.

Wegen der Variablen $pout und $cout habe ich die Deklaration und das Hauptprogramm einfach vor die Textareas verschoben.
Ich habe erst nicht gedacht, dass das so einfach klappt. Denn, diese Maßnahme behebt zwar das Problem der Variablen, aber mir ist immer noch unklar, wieso $pin=$_POST['ptext'] und $cin=$_POST['ctext'] jetzt nicht als undefiniert gelten?
Ist es vielleicht so, dass es für die Variable, die aus einer Formulareingabe erzeugt wird, völlig egal ist, an welcher Stelle diese (die Eingabe) in Relation zum PHP Code steht

Naja, ich möchte mich jedenfalls schonmal für die Hilfe bedanken. Denn wo ich jetzt das Grundgerüst fertig habe, kann ich mich ganz dem kryptografischen Algorithmus zuwenden, der ja, wie unschwer zu erkennen, bisher nicht gerade sinnbringend ist. Jedes Kleinkind könnte mit Hilfe einfachen Ausprobierens mühelos einen Ciphertext dieser Art entschlüsseln.
 
Alt 06.08.2005, 23:07  
Gast
 
Beiträge: n/a
Standard

http://g00gle.de/search?hl=de&q=regi...a=lr%3Dlang_de
 
Alt 06.08.2005, 23:22  
Gast
 
Beiträge: n/a
Standard

Wie gesagt, wirf php alles weg, nachdem es eine Anfrage bearbeitet hat.
$_GET/_POST/_REQUEST/_COOKIE enthalten nur genau die Werte, die mit der aktuellen Anfrage mitgesendet wurden.
Spätestens wenn Dein browser anzeigt, dass die Seite komplett geladen wurde, ist die ANfrage komlett abgearbeitet. Sämtliche server-seitigen php-Variablen sind dann weg weg weg.
Darüberhinaus ist http stateless, d.h. es wird nicht ermittelt, dass eine Anfrage die Folge einer anderen Anfrage ist.

Anfrage #1 liefert das Dokument zurück, das den client das Formular anzeigen läßt - Ende - alles weg.
Mit Anfrage #2 liefert der client die Werte mit, die der Benutzer in das Formular eingetragen hat - völlig neue Anfrage - das php-Skript läuft wieder von Anfang bis Ende, völlig eigenständig, kein Bezug zu Anfrage #1; d.h. auch die Variablen aus der Instanz, die Anfrage #1 behandelt hat, stehen nicht zur Verfügung.
Wie sich das bei Bedarf überwinden läßt, kannst Du unter http://php.net/session nachlesen. Für diesen Fall hier brauchst Du das aber nicht.

Man könnte einen client auch so programmieren, dass er gleich Anfrage #2 schickt, ohne vorher das Formular abzuholen; php würde ohne weiteres den Unterschied nicht merken.

Du brauchst also eine Fallunterscheidung anhand der übermittelten Werte - nur diese stehen zur Verfügung.


@AxelF: register_globals hat ausnahmsweise mal garnichts mit dem Problem zu tun. Im Skript wird $_REQUEST verwendet, um die von aussen übergebenen Parameter anzusprchen.
 
Alt 06.08.2005, 23:25  
Gast
 
Beiträge: n/a
Standard

Hm, sorry. Hatte nur .... wieso $pin=$_POST['ptext'] und $cin=$_POST['ctext'] jetzt nicht als undefiniert gelten?..... gelesen. Sorry
 
Alt 06.08.2005, 23:29  
Gast
 
Beiträge: n/a
Standard

oh stimmt. $_POST nicht $_RE... ähem.... beides wird verwendet und beides funktioniert mit register_globals=off
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Relay Script PHP-Fortgeschrittene 11 01.06.2005 16:02
[Erledigt] Hilfe bei Download Verwaltungs Script PHP Tipps 2005 8 04.05.2005 10:29
Fehler bei Script, welches Ordner erstellt PsychoEagle PHP Tipps 2005 3 23.04.2005 16:03
Perl Script von PHP aus aufrufen? PHP Tipps 2005 9 11.03.2005 01:39
kurze frage zu script im script PHP Tipps 2005 4 04.02.2005 08:53
Suche Counter Script Beitragsarchiv 8 17.01.2005 13:42
Brauche Script Beitragsarchiv 11 27.11.2004 00:21
Suche Script um Pics zu hosten Beitragsarchiv 4 25.11.2004 14:10
Ganze Objekte an Script weitergeben dreamingof8a PHP Tipps 2004-2 6 23.11.2004 12:17
Watermark zu vorhandem Script hinzufügen? PHP-Fortgeschrittene 0 21.11.2004 18:20
[Erledigt] python script mit php aufrufen... PHP-Fortgeschrittene 1 17.11.2004 17:11
Suche Script: Kommentieren von Textabschnitten Beitragsarchiv 1 08.11.2004 21:38
PHP Script aus PHP aufrufen Stümper PHP Tipps 2004 5 26.09.2004 08:15
"das" Script oder "der" Script?? Simbo Off-Topic Diskussionen 31 16.09.2004 17:04


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.