CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
30.06.2006, 15:57:08
|
Member
|
|
Registriert seit: Jun 2006
Ort: Bayern
Alter: 56
Beiträge: 930
|
|
AW: Übersetzungs Script
Die Variable die bei preg_replace definiert wird, darf natürlich nicht wie dein Eingabefeld heißen.
Häng doch bei der Ausgabe einfach ein Leerzeichen an ($row->wort.' '). Dann sind die Wörter wieder getrennt.
__________________
Grüße Andes
|
30.06.2006, 16:03:22
|
Anfänger
|
|
Registriert seit: Jun 2006
Beiträge: 70
|
|
AW: Übersetzungs Script
Ne das mit der Augabe ist nicht so toll. Da kann ich ja wieder nur ein leerzeichen machen....
Also ich muss
$wort = preg_replace("/ /", "' and sprache <> '$sprache') or (wort = '", $string);
ändern damit mit das mit den Satzzeichen und dem Leerzeichen klappt?
Geändert von theaims (30.06.2006 um 16:04:26 Uhr)
|
30.06.2006, 20:59:00
|
Member
|
|
Registriert seit: Jun 2006
Ort: Bayern
Alter: 56
Beiträge: 930
|
|
AW: Übersetzungs Script
Du sollst die Variable $wort anders nennen.
Die Satzzeichen musst du vor deiner Abfrage aus den Suchbegriffen entfernen. Sonst findest du ja keine Übereinstimmung.
__________________
Grüße Andes
|
30.06.2006, 21:04:41
|
Anfänger
|
|
Registriert seit: Jun 2006
Beiträge: 70
|
|
AW: Übersetzungs Script
Achja die Variable.
Und wie kann ich die entfernen? mit preg_split?
EDIT:
Ich verstehe das noch nicht so ganz mit den Variablen.
So schreibt er immer noch alles zusammen:
PHP-Code:
$string = $_POST['wort'];
$sprache = $_POST['sprache'];
$satz = preg_replace("/ /", "' and sprache <> '$sprache') or (wort = '", $string);
$sql = "SELECT wort FROM uebersetzer WHERE sprache = '$sprache' AND id = ANY (SELECT id FROM uebersetzer WHERE (wort = '$satz' AND sprache <> '$sprache'))";
Geändert von theaims (30.06.2006 um 21:09:26 Uhr)
|
30.06.2006, 23:34:00
|
Member
|
|
Registriert seit: Jun 2006
Ort: Bayern
Alter: 56
Beiträge: 930
|
|
AW: Übersetzungs Script
Du kannst auch für preg_replace Arrays erstellen und diese einsetzen.
PHP-Code:
setlocale(LC_CTYPE, "de_DE"); //Dies in deinem Script notieren ansonsten werden dir auch alle Umlaute mit entfernt
$entf[0] = "/ /";
$einf[0] = "' and sprache <> '$sprache') or (wort = '", $string);
$entf[1] = "/\W/"; //entfernt alle Sonderzeichen aus deinem Satz
$einf[1] = ""; //Sonderzeichen durch nichts ersetzen
$satz = preg_replace($entf, $einf, $string);
Dieser Bereich hat aber nur etwas mit deiner Abfrage zu tun und nicht mit deiner Ausgabe.
Die Datensätze die du Ausgibst musst du natürlich so formatieren wie du sie benötigst. Ansonsten wird ja nur Datensatz für Datensatz ausgegeben. Und in diesen ist ja keine Satzformatierung enthalten. Bsp. Leerzeichen
Frage ich eine Tabelle ab, die nur Dezimalwerte enthält und gebe diese nicht Zeile für Zeile aus. Ergibt die Ausgabe nur Zahlensalat mit dem keiner was anfangen kann.
Bsp. 2 Datensätze gefunden
PHP-Code:
for($a=0; $a<$row; $a++)
{
echo mysql_result($sql, $a, "feld1");
}
Ausgabe:
1.253.45
for($a=0; $a<$row; $a++)
{
echo mysql_result($sql, $a, "feld1")."<br>";
}
Ausgabe:
1.25
3.45
Falls wir mit der Ausgabe an einander vorbei reden. Poste doch dein jetziges Script und schreib mal dazu wie die Ausgabe dann aussehen soll.
Ich hab aber mal ne andere Frage. Wenn du ganze Sätze so übersetzt, kommt doch in der Ausgabe kein vernünftiger Satz bei raus? Die Datensätze werden doch einfach ohne Sortierung ausgegeben. Auch, wenn du eine Sortierung angibst entspricht die ja nicht deinem eingegebenen Satz. Wie bewältigst du dann eine annähernd richtige Übersetzung?
__________________
Grüße Andes
|
01.07.2006, 00:12:17
|
Anfänger
|
|
Registriert seit: Jun 2006
Beiträge: 70
|
|
AW: Übersetzungs Script
Also ich glaube wir reden da ein wenig vorbei wie muss ich das denn formatieren?
Ich möchte das so haben das wenn oben ganze Sätze stehen die auch unten in ganzen Sätzen wieder raukommen. Und halt das er Satzeichen gesondert erkennt.
Das war es eigentlich schon. Was kann man denn da noch machen?
Mein Script:
PHP-Code:
<?php
$verbindung = mysql_connect ("localhost","root", "") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
mysql_select_db("uebersetzer") or die ("Die Datenbank existiert nicht.");
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
Text: <textarea name="wort" ><? if(isset($_POST['wort'])){
echo($_POST['wort']); } ?></textarea>
Sprache:<select name="sprache" >
<option value='de' >Englisch - Deutsch</option>
<option value='en' >Deutsch - Englisch</option>
</select>
<input type="submit" name="submit" value="Los" />
</form>
<?php
$string = $_POST['wort'];
$sprache = $_POST['sprache'];
$satz = preg_replace($entf, $einf, $string);
$wort = preg_replace("/ /", "' and sprache <> '$sprache') or (wort = '", $string);
setlocale(LC_CTYPE, "de_DE"); //Dies in deinem Script notieren ansonsten werden dir auch alle Umlaute mit entfernt
$entf[0] = "/ /";
$einf[0] = "' and sprache <> '$sprache') or (wort = '", $string);
$entf[1] = "/\W/"; //entfernt alle Sonderzeichen aus deinem Satz
$einf[1] = ""; //Sonderzeichen durch nichts ersetzen
$satz = preg_replace($entf, $einf, $string);
$sql = "SELECT wort FROM uebersetzer WHERE sprache = '$sprache' AND id = ANY (SELECT id FROM uebersetzer WHERE (wort = '$wort' AND sprache <> '$sprache'))";
$query = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($query) > 0) {
while($row = mysql_fetch_object($query)) {
echo $row->wort;
}
}
Für diese Zeile gibt er mir einen Fehler:
PHP-Code:
$einf[0] = "' and sprache <> '$sprache') or (wort = '", $string);
Parse error: parse error, unexpected ',' in.......
Und zu deiner anderen Frage. Also google macht ja auch nur eine 1 zu 1 übersetzung oder sehe ich das falsch? Naja sortiert sollte das garnicht werden oder bekommt man das so einfach hin? Ich denke mal nicht.....
Geändert von theaims (01.07.2006 um 00:21:54 Uhr)
|
01.07.2006, 01:00:55
|
Member
|
|
Registriert seit: Jun 2006
Ort: Bayern
Alter: 56
Beiträge: 930
|
|
AW: Übersetzungs Script
Es ist halt schon etwas spät.
PHP-Code:
$einf[0] = "' and sprache <> '$sprache') or (wort = '";
Bei deinem Script muss aber schon viel eher eine Notiz über fehlende Variablen angezeigt werden.
PHP-Code:
$string = $_POST['wort'];
$sprache = $_POST['sprache'];
$satz = preg_replace($entf, $einf, $string); //Hier ist $entf und $einf noch nicht definiert, die Zeile kannst du löschen
$wort = preg_replace("/ /", "' and sprache <> '$sprache') or (wort = '", $string); //dies kannst du komplett aus deinem Script löschen, wenn du die Variante mit den Variablen benutzt
setlocale(LC_CTYPE, "de_DE"); //Dies in deinem Script notieren ansonsten werden dir auch alle Umlaute mit entfernt
$entf[0] = "/ /";
$einf[0] = "' and sprache <> '$sprache') or (wort = '";
$entf[1] = "/\W/"; //entfernt alle Sonderzeichen aus deinem Satz
$einf[1] = ""; //Sonderzeichen durch nichts ersetzen
$satz = preg_replace($entf, $einf, $string);
Mhm, hab mir ja noch nicht viele Seiten von Google übersetzen lassen. Aber ich denke mal schon, dass die etwas Sinn gemäß übersetzen und nicht eins zu eins. Kann mich aber auch täuschen.
Bei deiner Ausgabe fällt mir jetzt erst mal nur auf die Schnelle ein. Das du den eingegeben Satz (String) in ein Array wandelst. Die Treffer in der Datenbank schreibst du ebenfalls in ein Array und vergibst als Key das gesuchte Wort. Welches du halt mit auslesen müsstest. Dann liest du das Array der Eingabe in einer Schleife aus und fragst im Ausgabe-Array nach ob ein Key mit diesem Wort existiert. Wenn ja gibst du den Wert des Ausgabe-Arrays aus und, wenn nicht den Wert des Eingabe-Arrays.
Das könnte dann so aussehen.
Eingabe = „Hallo an alle in dieser Welt“
Eingabe-Array:
Array {
[0] = Hallo
[1] = an
[2] = alle
[3] = in
[4] = dieser
[5] = Welt
}
Ausgabe-Array:
Array {
[Hallo] = Hello
[Welt] = World
}
Abfrage:
Ist der Key Hallo in Ausgabe-Array enthalten, dann gib seinen Wert „Hello“ aus.
Ist er nicht enthalten, dann gib Hallo aus.
Damit erhältst du dann diesen Satz.
Hello an alle in dieser World
Allerdings würdest du mit einer DB in der jede Sprache ihre eigene Tabelle hat und die Wörter mit einer id verknüpft sind komfortablere Abfragen gestalten können.
__________________
Grüße Andes
Geändert von Andes (01.07.2006 um 01:18:47 Uhr)
|
01.07.2006, 11:48:14
|
Anfänger
|
|
Registriert seit: Jun 2006
Beiträge: 70
|
|
AW: Übersetzungs Script
Mit der Augabe werde ich sehen wenn das ganze Script erstmal läuft sprich ganze Sätze übersetzt werden können. Das tut es im momment immer noch nicht. Ab zwei Wörter übersetzt er garnichts mehr. Es kommt kein echo mehr. Noch nicht mal Helloi....
Könnte man es nicht in eine Schleife setzen, das er so lange sucht bis er alles hat?
Hier ist der aktuelle Code. Mit einem Wort geht alles.
PHP-Code:
$string = $_POST['wort'];
$sprache = $_POST['sprache'];
setlocale(LC_CTYPE, "de_DE"); //Dies in deinem Script notieren ansonsten werden dir auch alle Umlaute mit entfernt
$entf[0] = "/ /";
$einf[0] = "' and sprache <> '$sprache') or (wort = '";
$entf[1] = "/\W/"; //entfernt alle Sonderzeichen aus deinem Satz
$einf[1] = ""; //Sonderzeichen durch nichts ersetzen
$satz = preg_replace($entf, $einf, $string);
$sql = "SELECT wort FROM uebersetzer WHERE sprache = '$sprache' AND id = ANY (SELECT id FROM uebersetzer WHERE (wort = '$wort' AND sprache <> '$sprache'))";
$query = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($query) > 0) {
while($row = mysql_fetch_object($query)) {
echo $row->wort;
}
}
|
01.07.2006, 13:20:47
|
Member
|
|
Registriert seit: Jun 2006
Ort: Bayern
Alter: 56
Beiträge: 930
|
|
AW: Übersetzungs Script
Das könntest du schon, bloß kann es auf die Performanz gehen. Auch, wenn er alle Wörter findet hast du dann immer noch das Problem, dass du mit dieser Abfrage nicht beide Wörter (original und übersetzt) ausgelesen bekommst. Die benötigst du aber um die Übersetzung in derselben Reihenfolge wie den gesuchten Satz ausgeben zu können.
Mit drei Tabellen fährst du um einiges besser. Ob du nun 3 Datensätze in einer oder einen in 3 Tabellen anlegst ist doch egal.
Ein Mal vor den Kopf klatsch. Er kann ja auch nichts finden. Durch preg_replace wird ja jedes Wort aneinander gereiht übergeben. Statt sie in die Bedingung zu wandeln. Ist auch klar warum. "\W" entfernt alle nicht alphanumerischen Zeichen und dazu gehört auch das Leerzeichen. Dazu kommt noch, dass die Sonderzeichen erst entfernt werden, wenn die Bedingung schon erstellt wurde. Die jetzige Anweisung macht folgendes.
Satz: Hallo, Test.
beim ersten Durchlauf sieht das noch so aus.
Hallo,' and sprache <> 'de') or (wort = 'Test.' and sprache <> 'de') or (wort = '
nach dem zweiten Durchlauf kommt dieses bei raus
HalloandsparachedeorwortTestandsprachedeorwort
Tausch mal den Bereich
PHP-Code:
$entf[0] = "/ /";
$einf[0] = "' and sprache <> '$sprache') or (wort = '";
$entf[1] = "/\W/"; //entfernt alle Sonderzeichen aus deinem Satz
$einf[1] = ""; //Sonderzeichen durch nichts ersetzen
mit dem hier
PHP-Code:
$entf[0] = "/\W/"; //entfernt alle Sonderzeichen aus deinem Satz, auch Leerzeichen
$einf[0] = " "; //setzt für alle entfernten Sonderzeichen ein Leerzeichen ein
$entf[1] = "/( ){2,}/"; //ersetzt alle doppelten Leerzeichen
$einf[1] = " "; //durch ein Leerzeichen
$entf[2] = "/( )$/"; //ersetzt ein Leerzeichen am Ende
$einf[2] = ""; //durch nichts
$entf[3] = "/ /"; //ersetzt alle Leerzeichen
$einf[3] = "' and sprache <> '$sprache') or (wort = '"; //mit diesem
In deinem Select muss dann auch $satz statt $wort eingesetzt werden.
Damit müsste es funktionieren.
__________________
Grüße Andes
Geändert von Andes (01.07.2006 um 13:26:09 Uhr)
|
05.07.2006, 21:45:28
|
Anfänger
|
|
Registriert seit: Jun 2006
Beiträge: 70
|
|
AW: Übersetzungs Script
Es kommt immer noch zusammen geschrieben raus.
Und kann ich so viele Leerzeichen zwischen den Wörter machen wie ich will?
PHP-Code:
<?php
$verbindung = mysql_connect ("localhost","root", "") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
mysql_select_db("uebersetzer") or die ("Die Datenbank existiert nicht.");
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
Text: <textarea name="wort" ><? if(isset($_POST['wort'])){
echo($_POST['wort']); } ?></textarea>
Sprache:<select name="sprache" >
<option value='de' >Englisch - Deutsch</option>
<option value='en' >Deutsch - Englisch</option>
</select>
<input type="submit" name="submit" value="Los" />
</form>
<?php
$string = $_POST['wort'];
$sprache = $_POST['sprache'];
setlocale(LC_CTYPE, "de_DE"); //Dies in deinem Script notieren ansonsten werden dir auch alle Umlaute mit entfernt
$entf[0] = "/\W/"; //entfernt alle Sonderzeichen aus deinem Satz, auch Leerzeichen
$einf[0] = " "; //setzt für alle entfernten Sonderzeichen ein Leerzeichen ein
$entf[1] = "/( ){2,}/"; //ersetzt alle doppelten Leerzeichen
$einf[1] = " "; //durch ein Leerzeichen
$entf[2] = "/( )$/"; //ersetzt ein Leerzeichen am Ende
$einf[2] = ""; //durch nichts
$entf[3] = "/ /"; //ersetzt alle Leerzeichen
$einf[3] = "' and sprache <> '$sprache') or (wort = '"; //mit diesem
$satz = preg_replace($entf, $einf, $string);
$sql = "SELECT wort FROM uebersetzer WHERE sprache = '$sprache' AND id = ANY (SELECT id FROM uebersetzer WHERE (wort = '$satz' AND sprache <> '$sprache'))";
$query = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($query) > 0) {
while($row = mysql_fetch_object($query)) {
echo $row->wort;
}
}
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 19:45:12 Uhr.
|