Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2006 Teil von April

SELFHTML Forumsarchiv
Logischer Fehler bei for und/oder foreach

Informationsseite
  1. Seite (PHP) Logischer Fehler bei for und/oder foreach von Eduard Ertl, 30. 04. 2006, 03:04
nach unten

Logischer Fehler bei for und/oder foreach

Die folgende Nachricht zum Thema stammt von: Eduard Ertl, 30. 04. 2006, 03:04

Hallo.

Ich möchte in meinem Gästebuch Smileys einbauen. Die werden als :-) in die Datenbank geschrieben, und so auch rausgeholt.
Vor dem Ausgeben möchte ich jetzt den Text scannen nach dem Vorkommen eines Smileys, und es ggf ersetzen.
Momentan mache ich das so:

function show($text){
 //Smileykonfiguration holen
 $import=file_get_contents("gb/smiley_conf.dat");

 //Einlesen
 $smiley_array=explode("\n",$import);
 for($x=0;$x<count($smiley_array);$x++){
  $smiley_array[$x]=explode(",",$smiley_array[$x]);
 }

// print_r($smiley_array);


 //Text scannen nach Smileys
 for($x=0;$x<count($smiley_array);$x++){
  foreach($smiley_array[$x] as $smile){
   $text = str_replace($smile,$smiley_array[$x][0],$text);
   return $text;
  }
 }

}



Der Inhalt der Datei smiley_conf.dat:

<img src="gb/1.gif">,:-),:),:=)
<img src="gb/2.gif">,:-(,:(,:=(


Die Aufteilung des Dateiinhalts in ein mehrdimensionales Array klappt wie ich es wollte, das sagt mir print_r.
Also muss der Fehler irgendwo unten in den for und foreach-Schleifen liegen. Nur finde ich ihn nirgends. Wo ist er denn?

PS: Ich habe den Code selber geschrieben und nirgendwo anders hergeholt.

Viele Grüße
Eduard Ertl

nach obennach unten

fehlende Infos - Nachtrag

Die folgende Nachricht zum Thema stammt von: Eduard Ertl, 30. 04. 2006, 03:09

Sorry, diese Info hab ich noch vergessen:

Es kommt keine Fehlermeldung, das Smiley wird einfach nur nicht ersetzt und wird als :-) ausgegeben.
Es wird mit der Funktion htmlentities in die Datenbank geschrieben, sodass keine äöüß und sonstige Umlaute in die Datenbank kommen. Soweit ich das sehe, wird ein Smiley nicht umgewandelt, da es keine umwandelbaren Teile besitzt (zumeist, ich weiß, aber die was ich momentan definiert habe, haben nichts umwandelbares).

nach obennach unten

Logischer Fehler bei for und/oder foreach

Die folgende Nachricht zum Thema stammt von: Ashura, 30. 04. 2006, 03:28

Hallo Eduard.

»» »» //Smileykonfiguration holen
»» $import=file_get_contents("gb/smiley_conf.dat");
»»
»» //Einlesen
»» $smiley_array=explode("\n",$import);


Diese beiden Schritte kannst du per file zusammen fassen.

»» for($x=0;$x<count($smiley_array);$x++){
»»   foreach($smiley_array[$x] as $smile){
»»    $text = str_replace($smile,$smiley_array[$x][0],$text);
»»    return $text;
»»   }
»» }


Schau dir die Schleife einmal genau an und überlege, wo sie beendet wird. Momentan läuft sie nur ein einziges Mal durch.


Einen schönen Sonntag noch.

Gruß, Ashura

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
„It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
[HTML Design Constraints: Logical Markup]

nach obennach unten

Logischer Fehler bei for und/oder foreach

Die folgende Nachricht zum Thema stammt von: Eduard Ertl, 01. 05. 2006, 00:22

Hi Ashura,


»» Schau dir die Schleife einmal genau an und überlege, wo sie beendet wird. Momentan läuft sie nur ein einziges Mal durch.
Okay, dann nehm ich das Ding mal auseinander:

»» »»   foreach($smiley_array[$x] as $smile){
Für jedes Element in $smiley_array, das in zweiter Ebene liegt, wird der Code durchgangen. Dabei wird das momentane Element für die Zeit in der die Schleife läuft, als $smile definiert.

»» »»    $text = str_replace($smile,$smiley_array[$x][0],$text);
Hier wird jedes Vorkommen von $smile durch das erste Element des Arrays $smile_array[] in der Übergebenen Variable $text ersetzt...

»» »»    return $text;
und zurückgegeben.

»» »»   }
»» »» }
Und hier werden die Schleifen geschlossen.

Hmm, also es tut mir leid, ich sehe nicht, warum die Schleife ein einziges Mal nur durchlaufen sollte.

Hilfst du mir bitte nochmal auf die Sprünge?

Vielen Dank soweit.
Eduard Ertl

nach obennach unten

Logischer Fehler bei for und/oder foreach

Die folgende Nachricht zum Thema stammt von: Ashura, 01. 05. 2006, 00:33

Hallo Eduard.

»» Hmm, also es tut mir leid, ich sehe nicht, warum die Schleife ein einziges Mal nur durchlaufen sollte.

Dann lies einmal die Beschreibung zu return im PHP-Handbuch.


Einen schönen Montag noch.

Gruß, Ashura

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
„It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
[HTML Design Constraints: Logical Markup]

nach obennach unten

[solved] Logischer Fehler bei for und/oder foreach

Die folgende Nachricht zum Thema stammt von: Eduard Ertl, 01. 05. 2006, 22:00

Hi

»» Dann lies einmal die Beschreibung zu return im PHP-Handbuch.

Soooo, jetzt hab ichs. Danke dir, wusste ich nicht dass return die Funktion einfach so beendet.

Vielen vielen Dank
Eduard Ertl

nach obennach unten

Logischer Fehler bei for und/oder foreach

Die folgende Nachricht zum Thema stammt von: Jens Müller, 30. 04. 2006, 07:18

Moin Eduart,


»» Ich möchte in meinem Gästebuch Smileys einbauen. Die werden
»» als :-) in die Datenbank geschrieben, und so auch rausgeholt.

»» Vor dem Ausgeben möchte ich jetzt den Text scannen nach dem
»» Vorkommen eines Smileys, und es ggf ersetzen.

Ich Persoenlich mag es eigendlich nicht, wenn ich irgendwo
>Ungefragt< ein Bild fuer die vielen schoenen :) Text-Smiley's
'hingeklatscht' bekomme... (Eventuell, weil ich schon recht 'Alt' bin
und mit Text-Smiley's gross eworden bin? ;) und Besonders, die
Zappeldinger (animiert ): mag ich gar nicht.

Wenn du so etwas machen moechtest, dann biete es bitte per Link-
option an die Text-Smiley's anzeigen zu lassen, oder eine kleine
Hilfseite wie: SELFHTML-Chat Hilfe

Wie auch immer, wenn du es aendern moechtest dann kannst du
waehrend des auslesens aus der Datenbank mit preg oder ereg
die Smiley's ersetzen.

if(!isset($smileys) or ($smileys == "bild"))
  {
  $datenbank['text'] = ereg_replace("d:/i","&nbsp; <img src=\"/images/smiley/s_zunge.gif\" width=\"15\" height=\"15\" \nalt=\"Zunge raus streckend\" />", $datenbank['text']);
  }

if (isset($smileys))
  {
  if ($smileys == "text")
    {
    $datenbank['text'] = ereg_replace("d:/i","&nbsp; <tt title=\"Zunge raus streckend\">d:</tt>", $datenbank['text']);
    }
  }


gruesse aus'm ruhrpott
  jens mueller
--
I am a scout. How can I use Perl in my day-to-day scout business? For example, helping little old ladies across the street. - See the perllol man page.

nach obennach unten

Logischer Fehler bei for und/oder foreach

Die folgende Nachricht zum Thema stammt von: Ashura, 30. 04. 2006, 10:47

Hallo Jens.

»» Wie auch immer, wenn du es aendern moechtest dann kannst du
»» waehrend des auslesens aus der Datenbank mit preg oder ereg
»» die Smiley's ersetzen.

Nein, wenn überhaupt bitte nur mit Hilfe der preg_*-Funktionen. Die alten ereg_*-Funktionen sollten nicht mehr genutzt werden.
(Und was macht das Apostroph bei „Smileys“?)

Aber warum sollte Eduard hier an Stelle der weitaus performanteren Stringfunktionen reguläre Ausdrücke verwenden?


Einen schönen Sonntag noch.

Gruß, Ashura

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
„It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
[HTML Design Constraints: Logical Markup]

nach obennach unten

Logischer Fehler bei for und/oder foreach

Die folgende Nachricht zum Thema stammt von: dedlfix, 30. 04. 2006, 12:38

echo $begrüßung;

»» Nein, wenn überhaupt

Da stimme ich zu. Für einfachen Zeichenkettentausch braucht man keine regulären Ausdrück. Dafür reichen die weniger teuren Stringfunktionen.

»» bitte nur mit Hilfe der preg_*-Funktionen. Die alten ereg_*-Funktionen sollten nicht mehr genutzt werden.

Hier lege ich Protest ein. Reguläre Ausdrücke im POSIX-Stil sind weder veraltet noch missbilligt. Die Perl-kompatiblen sind einfach "nur" leistungsfähiger.

»» Aber warum sollte Eduard hier an Stelle der weitaus performanteren Stringfunktionen reguläre Ausdrücke verwenden?

Ach, hier hast du das ja auch schon gesagt, dann kann ich ja den ersten Teil weglassen ...


echo "$verabschiedung $name";

nach obennach unten

Logischer Fehler bei for und/oder foreach

Die folgende Nachricht zum Thema stammt von: Ashura, 30. 04. 2006, 13:50

Hallo dedlfix.

»» »» bitte nur mit Hilfe der preg_*-Funktionen. Die alten ereg_*-Funktionen sollten nicht mehr genutzt werden.
»»
»» Hier lege ich Protest ein. Reguläre Ausdrücke im POSIX-Stil sind weder veraltet noch missbilligt.

Von veraltet war auch nicht die Rede. Fakt ist, dass sie älter im Sinne von länger im PHP-Paket enthalten sind.

»» Die Perl-kompatiblen sind einfach "nur" leistungsfähiger.

Und damit vorzuziehen. Zudem sind die POSIX-kompatiblen Funktionen nicht binary-safe, was ihre Verwendung im worker- und prechild-MPM des Apachen unmöglich macht. (Sollte ich hier einem Irrglauben unterliegen, bitte ich Korrektur.)


Einen schönen Sonntag noch.

Gruß, Ashura

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
„It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
[HTML Design Constraints: Logical Markup]

nach obennach unten

Logischer Fehler bei for und/oder foreach

Die folgende Nachricht zum Thema stammt von: Der Martin, 30. 04. 2006, 12:12

Moin Jens,

»» Ich Persoenlich mag es eigendlich nicht, wenn ich irgendwo >Ungefragt< ein Bild fuer die vielen schoenen :) Text-Smiley's 'hingeklatscht' bekomme... (Eventuell, weil ich schon recht 'Alt' bin und mit Text-Smiley's gross eworden bin? ;) und Besonders, die Zappeldinger (animiert ): mag ich gar nicht.

das geht mir ähnlich. Ein "Smiley" ist für mich eine Folge von Interpunktionszeichen, die mit etwas Phantasie als Grinsegesicht gesehen werden kann, wie z.B. der Klassiker :-) oder auch der Zwinkernde ;-) oder...
Deshalb habe ich auch erst nicht verstanden, was Eduard damit:

»» »» Ich möchte in meinem Gästebuch Smileys einbauen. Die werden als :-) in die Datenbank geschrieben, und so auch rausgeholt.

sagen wollte - er *hat* doch schon Smileys drin. Womit will er sie ersetzen?
Aber dann dämmerte mir, dass er sie wohl doch durch grafische Smileys austauschen möchte.

Und ich glaube, Eduard, den entscheidenden Hinweis hat Ashura schon "durch die Blume" gegeben - hast du inzwischen gesehen, was er meinte?

Schönen Tag noch,
 Martin

--
F: Was ist ekliger als ein angebissener Apfel mit einem Wurm drin?
A: Ein angebissener Apfel mit einem halben Wurm.

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2006 Teil von April

© 1998-2006 Seite Impressum, Software: Classic Forum