Frage66 Geschrieben 24. August 2010 Geschrieben 24. August 2010 Hallo, ich habe ein script welches "Vertipper" (Beispiel: Lufthanas statt Lufthansa) generiert. Ich würde es gerne haben, das dass Script erst auf Anforderung startet. Hier ignoriert das Script aber die Abfrage über das Formular und gibt automatisch das Ergebnisse aus. Kann jemand weiterhelfen? <?php error_reporting (0); ?> <html> <body> <form> Search <input type=text value="<?=$_GET['titel']?>" name=q> <input type=submit> </form> <hr> <? //vertipper if (strlen ($_GET['titel']) > 0) { function vertipper($wort) { $len = strlen($wort); $liste = array(); // 1. Weggelassene oder doppelte Buchstaben for ($i = 0; $i < $len; ++$i) { $liste[] = substr($wort, 0, $i) . substr($wort, $i+1); $liste[] = substr($wort, 0, $i+1) . substr($wort, $i); } // 2. Buchstabendreher for ($i = 0; $i < $len-1; ++$i) { $liste[] = substr($wort, 0, $i) . $wort{$i+1} . $wort{$i} . substr($wort, $i+2); } // 3. Auf der Tastatur nahe liegende Buchstaben $tastaturzeilen = array( '1234567890ß', 'qwertzuiopü', 'asdfghjklöä', 'yxcvbnm', ); for ($i = 0; $i < $len; ++$i) { $buchst = $wort{$i}; $daneben = array(); foreach ($tastaturzeilen as $zeile) { if (($pos = strpos($zeile, $buchst)) !== false) { if ($pos-1 >= 0) { $daneben[] = $zeile{$pos-1}; } if ($pos+1 < strlen($zeile)) { $daneben[] = $zeile{$pos+1}; } } } foreach ($daneben as $ersatz) { $vertipper = $wort; $vertipper{$i} = $ersatz; $liste[] = $vertipper; } } return array_values(array_unique($liste)); } print_r(vertipper($_GET['titel'])); } ?> </body> </html> Zitieren
lupo49 Geschrieben 25. August 2010 Geschrieben 25. August 2010 Dann frag mittels IF ab, ob deine $_GET-Variable gesetzt ist. Ist das der Fall, dann führe deinen Programmcode (die Ausgabe) aus, wenn nicht, dann wird nichts getan. Zitieren
Frage66 Geschrieben 25. August 2010 Autor Geschrieben 25. August 2010 Das habe ich nicht verstanden. Ich habe doch bereits ein IF-Abfrage gesetzt. if (strlen ($_GET['titel']) > 0) Zitieren
lupo49 Geschrieben 25. August 2010 Geschrieben 25. August 2010 Welche Ausgabe ist denn auf der Seite zu sehen, wenn du das Skript ausführst? Zitieren
Frage66 Geschrieben 25. August 2010 Autor Geschrieben 25. August 2010 Ich rufe meine Seite aus und das Ergebnis ist da. Das heißt, das Script bringt mir sofort das Ergebnis, ohne das ich es ausführen muss. Das <form> wird komplett ignoriert. Zitieren
NoiR Geschrieben 26. August 2010 Geschrieben 26. August 2010 Moin moin. Aaaaaalsooo: zuerst ist das php tag vor //vertipper nicht komplett (<?php nicht nur <?) das selbe ist auch im value im form und das = ist auch fehl am platz. falsch: value="<?=$_GET['titel']?>" richtig: value="<?php $_GET['titel']?>" dann: greifst du $_GET['titel'] ab, setzt die Eingabe im Formfeld mit q (<input type=text value="" name=q>) dein script ist richtig aber die variable titel wird nicht übergeben sondern die variable q. also aus dem q ein titel machen: und zu deinem problem, dass direkt das Ergebnis angezeigt wird. Ich wette das du die seite immer mit gesetzter variable erneuert hast wenn du das http://[...]/seite.php?title=beispielwort nicht weg machst, funktioniert das script natürlich auch, weil es die variable titel ja bekommt. also bei imr läufts jetz einwandfrei... jetzt würde mich aber brennend interessieren wofür man ein vertipperscript macht Gruß Fabi Zitieren
_n4p_ Geschrieben 26. August 2010 Geschrieben 26. August 2010 Moin moin. Aaaaaalsooo: zuerst ist das php tag vor //vertipper nicht komplett (<?php nicht nur <?) das selbe ist auch im value im form und das = ist auch fehl am platz. falsch: value="<?=$_GET['titel']?>" richtig: value="<?php $_GET['titel']?>" falsch, php ini directive shot_open_tags "<?" ist gleichbedeutend mit "<?php" und "<?=" gleichbedeutend mit "<? echo" also auch "<?php echo" Zitieren
NoiR Geschrieben 26. August 2010 Geschrieben 26. August 2010 heißt aber auch immer, das es aktiviert sein muss... bzw interpretiert werden können muss und grade wenn man das was andere macht sollte man doch beim Original bleiben. Es kann jetzt wirklich keiner Argumentieren, dass short-tags zeit sparen... und es macht die ganze sache übersichtlicher, meiner Meinung nach, zumindest... P.S. das mit dem = statt echo war mir neu. Merci ^^ Zitieren
_n4p_ Geschrieben 26. August 2010 Geschrieben 26. August 2010 ich würde nie behaupten das man mit short_open_tags zeit spart. und sicher kann man nicht davon ausgehen das es aktiviert ist, allerdings ist es wohl standardmäßig eingeschaltet. und wäre es nicht an hätte das script gar nichts gemach, wäre ja nich mal interpretiert worden. und ja ich halte short_open_tags für schlechten stil, aber falsch ist es deswegen nicht ^^ gerne ^^ Zitieren
Frage66 Geschrieben 27. August 2010 Autor Geschrieben 27. August 2010 Hallo NoiR, klappt auch mit deinen Angaben nicht. Da das Script bei dir funktioniert, kannst du deine Version hier reinkopieren? Dann fällt mir vielleicht der Fehler auf. PS: Ich habe das Vertipper tool für mich gebaut zwecks eines Projekt für die Uni. Zitieren
NoiR Geschrieben 27. August 2010 Geschrieben 27. August 2010 Ja klar kein Problem. Hab allerdings noch ein bisschen dran rumgespielt. hab $_GET[...] direkt abgefangen um zu vermeiden, dass man am Anfang mit einer undefinierten Variable arbeitet... dann hab ich aus "titel" "title" gemacht^^weil ich mich einfach an English im Code gewöhnt hab^^ achso und das error_reporting hab ich aufgedreht... vielleicht liegts ja bei dir noch an was anderem. <?php error_reporting (E_ALL); if(isset($_GET['title'])) {$title = $_GET['title'];} else {$title = "";} ?> <html> <body> <form> Search <input type=text value="<?php echo $title?>" name=title> <input type=submit> </form> <hr> <?php //vertipper if (strlen ($title) > 0) { function vertipper($wort) { $len = strlen($wort); $liste = array(); // 1. Weggelassene oder doppelte Buchstaben for ($i = 0; $i < $len; ++$i) { $liste[] = substr($wort, 0, $i) . substr($wort, $i+1); $liste[] = substr($wort, 0, $i+1) . substr($wort, $i); } // 2. Buchstabendreher for ($i = 0; $i < $len-1; ++$i) { $liste[] = substr($wort, 0, $i) . $wort{$i+1} . $wort{$i} . substr($wort, $i+2); } // 3. Auf der Tastatur nahe liegende Buchstaben $tastaturzeilen = array( '1234567890ß', 'qwertzuiopü', 'asdfghjklöä', 'yxcvbnm', ); for ($i = 0; $i < $len; ++$i) { $buchst = $wort{$i}; $daneben = array(); foreach ($tastaturzeilen as $zeile) { if (($pos = strpos($zeile, $buchst)) !== false) { if ($pos-1 >= 0) { $daneben[] = $zeile{$pos-1}; } if ($pos+1 < strlen($zeile)) { $daneben[] = $zeile{$pos+1}; } } } foreach ($daneben as $ersatz) { $vertipper = $wort; $vertipper{$i} = $ersatz; $liste[] = $vertipper; } } return array_values(array_unique($liste)); } print_r(vertipper($title)); } ?> </body> </html> [/PHP] Hier zum Beweis, das ich nicht schwindle Für die Uni? Damit eure Profs entziffern können, was ihr wohl eigentlich schreiben wolltet? Fabi Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.