3.1k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo,

kann mir vielleicht jemand helfen??

ich habe vor ein Wörterbuch in PHP zu programmieren, wenn es jemanden hilft werde ich den Quellcode ebenfalls hier posten.

Vielen dank für eure Hilfe.

uebersetzung.html:

<html>
<head>
<title>
Mini Directory</title>
</head>
<body>
<form action = "zahlausgabe.php" method = "POST">
<p>
<font size = "5" color = "green">Mini Directory</font>
</p>
<p><font size = "3" color = "green">Please make your choice:</font></p>
1 from german to english<br>
2 from german to french<br>
3 from english to french<br>
4 from french to english<br>
5 from french to german<br>
6 from english to german<br>
<p>Please enter your number:<input name = "zahl" /></p>
<p><input type = "submit" value = "OK" /></p>
<p><input type = "reset" /></p>
</form>
</body>
</html>

zahlausgabe.php:

<html>
<body>
<?php
$eingabe = $_POST["zahl"];

if($eingabe == "1")
{
echo "You want to translate a word from german to english";
}
else
{
if($eingabe == "2")
{
echo "You want to translate a word from german to french";
}
else
{
if($eingabe == "3")
{
echo "You want to translate a word from english to french";
}
else
{
if($eingabe == "4")
{
echo "You want to translate a word from french to english";
}
else
{
if($eingabe == "5")
{
echo "You want to translate a word from french to german";
}
else
{
if($eingabe == "6")
{
echo "You want to translate a word from english to german";
}
else
{
echo "Please enter a number from 1 to 6!";
}
}
}
}
}
}
?>
<form action = "wortuerbersetzung.php" method = "post">
<p>Please enter your word to translate: <input name = "wort" /></p>
<p><input type = "submit" value = "Ok" /></p>
<p><input type = "reset" /></p>
</body>
</html>

den Quellcode für wortuerbersetzung hab ich noch nicht gemacht.

Mein Problem ist das wenn ich die Zahl 7 eingebe, dann erscheint auf der nächsten Seite immer noch "Please enter your word to translate" obwohl das nicht dort stehen sollte, sondern nur "Please enter a number from 1 to 6!".


Vielen dank für eure HIlfe

2 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Na weil deine HTML-Ausgabe ganz unten in jedem Fall jenen Text ausgibt.

An deiner Arbeit gibt es einiges zu optimieren: [list]
[*]Warum muss eine Zahl eingegeben werden? Sowas kann doch mit einer bereits vorgegebenen Auswahl (per Combobox) viel einfacher gelöst werden.
[*]Warum erst nur eine Zahl eingeben? Besser wär doch die Übersetzungsrichtung zu wählen und dann gleich das zu übersetzende Wort auch.
[*]Warum mehrere Dokumente? Die ganze Logik kann in einem PHP-Dokument Platz finden - da ist gar kein HTML-Dokument davor oder sonstwann nötig.
[*]Warum immer einen neuen Block nach else öffnen?
[*]Warum die Texte mehrfach schreiben?
[*]Warum hast du den [ code ]-Tag nicht hier bei deinem Beitrag für deinen Quelltext verwendet? Jetzt siehst du, dass die ganze Formatierung flöten gegangen ist.
[*]Der HTML-Tag <font> ist voriges Jahrhundert.
[/list]
Da mir etwas langweilig war, hab ich gleich ein funktionierendes Beispiel gebaut und hoffe, dass du daraus einiges lernen kannst. Genug Kommentare sind jedenfalls drin. Es übersetzt sogar ein paar Wörter (z.B. "peace", "house", "two"). Einfach als irgendwas.php abspeichern und aufrufen. Selbsterklärend in der Benutzung.

<?php

// Übersetzungsrichtung, wobei 0=EN, 1=FR und 2=DE
$aSprache= array
( '0-1'=> 'from English to French'
, '0-2'=> 'from English to German'
, '1-0'=> 'from French to English'
, '1-2'=> 'from French to German'
, '2-0'=> 'from German to English'
, '2-1'=> 'from German to French'
);

// Wörterbuch: jedes Element besteht aus einem Feld, in welchem im 0ten Element EN, im 1ten FR und im 2ten DE definiert ist. Immer kleingeschrieben!
$aDict= array
( array( 'peace', 'paix', 'frieden' )
, array( 'house', 'maison', 'haus' )
, array( 'we', 'nous', 'wir' )
, array( 'english', 'anglais', 'englisch' )
, array( 'two', 'deux', 'zwei' )
);

// Nur dieses eine Dokument wird benötigt; ein großer Teil der Ausgabe ist immer identisch
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
<title>Mini Directory</title>
<style type="text/css">
body { font: 13px Arial, sans-serif; }
h1 { color: green; }
label { display: block; float: left; width: 130px; text-align: right; margin: 5px 10px 0px 0px; }
input, select { margin-top: 3px; }
</style>
</head><body>
<h1>Mini Directory</h1>';

// Übersetzungsrichtung angegeben? Wenn nicht, wurde die Seite nur aufgerufen statt abgeschickt
$sDirection= isset( $_POST['fromto'] )? $_POST['fromto']: 0;

// Zu übersetzendes Wort angegeben?
$sWord= isset( $_POST['word'] )? $_POST['word']: '';

// Möglicher auszugebender Fehler
$sError= '';

// Mögliche gefundene Übersetzung
$sFound= '';

// Befindet sich die ausgewählte Übersetzungsrichtung überhaupt in unserer Definition des Felds oben?
if( isset( $aSprache[$sDirection] ) ) {
// Wurde überhaupt ein zu übersetzendes Wort angegeben?
if( $sWord!= '' ) {
// Gänsefüßchen und Apostrophe ggf. de-escaped
if( get_magic_quotes_gpc() ) $sWord= stripslashes( $sWord );

// Zahl vor dem Bindestrich ist Quellsprache, Zahl dahinter ist Zielsprache - in Feld aufteilen
$aDirection= explode( '-', $sDirection );

// Zu übersetzendes Wort in Kleinbuchstaben umwandeln, da unser Wörterbuch auch nur Kleinbuchstaben hat
$sWordLower= strtolower( $sWord );

// Wörterbuch durchwandern
foreach( $aDict as $iKey=> $sWert ) {
// Die Quellsprache eines Wörterbuch-Elements stimmt mit dem zu suchenden Wort überein?
if( strcmp( $sWert[$aDirection[0]], $sWordLower )== 0 ) {
// Zielsprache des Elements merken
$sFound= $aDict[$iKey][$aDirection[1]];

// Schleife verlassen und nicht zu Ende durchlaufen
break;
}
}

// Falls nichts gefunden, dann Hinweis ausgeben
if( $sFound== '' ) $sError= 'No translation found';
} else $sError= 'Please enter a word';
}

// Fehlermeldung auszugeben?
if( $sError!= '' ) echo '
<p style="color: red;">'. $sError. '!</p>';

// Formular beginnen
echo '<form action="'. $_SERVER['PHP_SELF']. '" method="post"><div>
<label for="fromto">Direction:</label>
<select name="fromto" id="fromto">';

// Alle Übersetzungsrichtungen anbieten
foreach( $aSprache as $sKey=> $sWert ) echo '
<option value="'. $sKey. '"'. ( $sDirection== $sKey? ' selected="selected"': '' ). '>'. $sWert. '</option>';

// Ggf. zu übersetzendes Wort wieder mit ausgeben
echo '
</select><br/>

<label for="word">Word to translate:</label>
<input name="word" id="word" value="'. htmlentities( $sWord ). '" /><br/>';

// Übersetzung gefunden? Zusätzliche unveränderliche Textbox
if( $sFound ) echo '
<label for="found" style="color: green;">Found translation:</label>
<input id="found" style="background-color: #EFE;" readonly="readonly" value="'. htmlentities( $sFound ). '" /><br/>';

// Formularende
echo '
<label>&nbsp;</label>
<input type="submit" />
<input type="reset" />
</div></form>
</body></html>';

?>
0 Punkte
Beantwortet von mrbleach Einsteiger_in (11 Punkte)
Vielen dank für die schnelle Hilfe :D
...