dempsey
Goto Top

PHP Funktion

ich bin noch nicht wirklich belesen mit den funktionen von php und würde mich über ein bisschen hilfe freuen

Hallo Zusammen,
ich programmiere momentan mit PHP/HTML ein Gästebuch und es läuft soweit auch schon. Nun möchte ich mein Gästebuch verfeinern.
Als Aufgabe wurde mir gestellt, dass ich zu Smilies einbinde, wenn jemand ins Textfeld face-smile, face-sad usw. eingibt.
Mit meinen beiden Arrays war ich auch erfolgreich doch nun soll ich das mit einer Funktion ins Gästebuch einbinden und da komme ich ins schleudern.
	function textsmileconv($text){
	
		$smileys = array(0 => ":-)", 1 => ";-)", 2 => ":-\(", 3 => ":-P", 4 => ":-D");  
		$gif = array(0 => "smile.gif", 1 => "zwinker.gif", 2 => "sad.gif", 3 => "zunge.gif", 4 => "lol.gif");  

		for($i = 0; $i <= 4; $i++) {
		//alle vorkommen von ? ersetzen durch ?
		$text = eregi_replace($smileys[$i],"<img src='img/".$gif[$i]."' alt='$smileys[$i]'>",$text);  
		}
		return($textsmileconv);
			
	}

Hinter der Variable $text verbirgt sich die Textausgabe in meinem Gästebuch. Leider greift diese Funktion nicht und ich weiss nicht wieso.
Kann mir da jemand helfen?

LG,
dempsey

Content-ID: 152581

Url: https://administrator.de/contentid/152581

Ausgedruckt am: 24.11.2024 um 22:11 Uhr

awagner82
awagner82 07.10.2010 um 16:31:54 Uhr
Goto Top
Hi,

also erstmal würde ich $text zurückgeben, das ist ja der String den du verändert hast...

Und dann einfach aufrufen mit

//Beispiel: $text = ";)"
$ausgabe = textsmileconv($text);

und dann ggf. ausgeben
echo $ausgabe;

und dann hast du dein smiley

;)
dempsey
dempsey 07.10.2010 um 16:42:42 Uhr
Goto Top
Also.. ich bin mir nicht sicher ob ich deinen Vorschlag richtig interpretiert habe. Jedenfalls hat es noch nicht so funktioniert. Ich gebe dir mal noch die andere Funktion hinzu

ausgabe.php
	function noname($count) {
	
				//function eingabe	
				//das alles bitte auch in eine Funktion
				//rückgabe wert auch hier -> string mit return();
		if( $_POST["name"] == NULL &&  $_POST["text"] == NULL) {  
				//Kommentar: abesende noch nicht gedrücktz, keine items in liste
			$value = "<center><p class=\"texteingabe\"><blink>Bitte gib etwas in die Textfelder ein</blink></p></center>";  
		}
		else{
				//Kommentar: tables werden erstellt. items in der Liste werden verpackt und alte items werden gespeichert
			$value = "<table id=\"ausgabebox\" align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";  
			$value.= "<tr>";  
			$value.= "<td id=\"textboxen\">";  
	
					//ausgabe der neuen daten zuerst
			$value.= ausgabe($_POST["name"], $_POST["text"], $count+1);  

								
					//ausgabe der alten daten:		
					//for schleife mit $i von 0 bis $count		
								
			for($i = 0; $i < $count; $i++) {			
				$tempOldName="name" . $i;  
				$tempOldText="text" . $i;  
				//$tempOldId="id" . $i; 
					
				$value.= ausgabe($_POST[$tempOldName], $_POST[$tempOldText], $count-$i);
			}
			$value.= "</div>";  
			$value.= "</td>";  
			$value.= "</tr>";  
			$value.= "</table>";  
			
		}
		return($value);
	}
	
	function textsmileconv($text){
	
		$smileys = array(0 => ":-)", 1 => ";-)", 2 => ":-\(", 3 => ":-P", 4 => ":-D");  
		$gif = array(0 => "smile.gif", 1 => "zwinker.gif", 2 => "sad.gif", 3 => "zunge.gif", 4 => "lol.gif");  

		for($i = 0; $i <= 4; $i++) {
		//alle vorkommen von ? ersetzen durch ?
		$text = eregi_replace($smileys[$i],"<img src='img/".$gif[$i]."' alt='$smileys[$i]'>",$text);  
		}
		return($text);
			
	}

Ausschnitt der index.php

	$anzeigen = textsmileconv($count, $text);
	echo $anzeigen;
Arano
Arano 07.10.2010 um 17:50:33 Uhr
Goto Top
Hallo Dempsey

ERSTENS:
Vergleiche folgendes...
function textsmileconv($text){
textsmileconv($count, $text);
Das wirft evtl. auch eine Fehlermeldung - werden die bei dir ausgegeben !?

ZWEITENS:
ereg_replace arbeitet mit regulären Ausdrücken PHP-Manual - ereg_replace
Weil du einfache Zeichenketten als "Suchmuster" verwendet, wäre hier str_replace besser/schöner PHP-Manual str_replace


Viel Erfolg beim weiter tüfteln face-smile
~Arano
dempsey
dempsey 08.10.2010 um 08:32:25 Uhr
Goto Top
Hallo Arano,

ich bin wie gesagt noch nicht so mit php belesen face-wink aber danke für den Tipp mit str_replace. Wenn man eine funktion kennengelernt hat und sie funktioniert, dann nimmt man sie anscheinend öfters - möglichst für alle Situationen face-wink

das mit dem auslesen der Funktion. Ich weiss nicht genau, was ich alles an dieser Stelle erreichen kann. Deswegen habe ich einfach mal rumgespielt. Für das geschulte Auge ist es bestimmt eine Qual was ich hier fabriziert hab aber ich bin gerade etwas hilflos face-sad
Arano
Arano 08.10.2010 um 09:30:40 Uhr
Goto Top
Moin moin,

Ja stimmt da hast du recht, das habe ich auch so gemacht face-smile
Aber mir fiel gerade noch etwas an ereg_replace auf, seit PHP 5.3 ist die Funktion sowieso missbilligt.

Funktioniert es denn jetzt ?
Der Beitrag ist __noch nicht__ als gelöst markiert und aus deiner Antwort kann ich nicht auslesen ob es nun läuft oder was es nun für Probleme sind !?

~Arano
awagner82
awagner82 08.10.2010 um 09:46:08 Uhr
Goto Top
Hi dempsey,

also nochmal langsam ... was genau funktioniert denn nicht?
bzw. was meinst du mit auslesen der Funktion?

Du hast eine Funktion, die einen (in deinem Fall) Text erwartet.
Der Text wird auf Smileys geprüft und diese ggf. ersetzt.
Danach wir der Text wieder zurückgegeben.

Das hier funktioniert doch auch ... (geringfügig geändert)
Wo steckt Dein Problem?

Edit: Rufst Du diese Funktion in deiner übergeordneten Funktion überhaupt auf?

  
<?php

function textsmileconv($text){ 

	$smileys = array(0 => ":-)", 1 => ";-)", 2 => ":-\(", 3 => ":-P", 4 => ":-D");   
	//$gif = array(0 => "smile.gif", 1 => "zwinker.gif", 2 => "sad.gif", 3 => "zunge.gif", 4 => "lol.gif");  
	$gif = array(0 => "SMILE", 1 => "ZWINKER", 2 => "SAD", 3 => "ZUNGE", 4 => "LOL");   

	for($i = 0; $i <= 4; $i++) { 

		//$text = eregi_replace($smileys[$i],"<img src='img/".$gif[$i]."' alt='$smileys[$i]'>",$text);  
		$text = str_replace($smileys[$i],$gif[$i],$text);

		} 
	
	return($text);
	} 

	
$text = "AA:-)BB";  
$ausgabe = textsmileconv($text);

echo "vorher: ".$text;  
echo "<br />";  
echo "nachher: ".$ausgabe."";  

?> 


Gruß
dempsey
dempsey 08.10.2010 um 10:23:36 Uhr
Goto Top
Hallo awagner,

das Problem liegt darin, dass der Text nicht durch die Smilies ersetzt wird. Die Funktion wird nicht gescheit ausgegeben.. Mein Ergebnis sieht so aus, dass ich die komplette Ausgabe nicht sehe oder jenachdem nur die Strings (ohne smilies)
Ich poste nochmal das ganze - an welcher Stelle die Smilies eingebunden werden sollem.

<?php

	
	function ausgabe($name, $text, $id) {
	//so verändern dass hier ein string zurück geggeben wird
	// ausgabe erst dort wo die fkt aufgerufen wird
		
		$value = "<table>";  
		$value.= "<tr>";  

		$value.= "<td><b>Name</b></td>";  
		$value.= "<td>";  
		$value.= "<input name=\"hiddenname\" type=\"hidden\" value=\"1\"/>";  
		$value.= "<div id=\"nametextbox\">";  
		$value.= $name;
		$value.= "</p>";  
		$value.= "</td>";  
		$value.= "</tr>";  
		$value.= "<tr>";  
		$value.= "<td><b>Text </b></td>";  
		$value.= "<td>";  
		$value.= "<input name=\"hiddentext\" type=\"hidden\" value=\"1\"/>";  
		$value.= $text;                                                                                                          //similies hier ersetzen
		$value.= "</td>";  
		$value.= "<tr>";			  
		$value.= "<td><div id=\"datebox\">";				  
		$value.= date('d.m.Y');  
		$value.= "</td><br/>";  
		$value.= "#" . $id;  

		$value.= "</tr>";  
		$value.= "</table>";  

		

		return($value);
	}
	
	function noname($count) {
	
		if( $_POST["name"] == NULL &&  $_POST["text"] == NULL) {  

			$value = "<center><p class=\"texteingabe\"><blink>Bitte gib etwas in die Textfelder ein</blink></p></center>";  
		}
		else{

			$value = "<table id=\"ausgabebox\" align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";  
			$value.= "<tr>";  
			$value.= "<td id=\"textboxen\">";  
	
					//ausgabe der neuen daten zuerst
			$value.= ausgabe($_POST["name"], $_POST["text"], $count+1);  


								
			for($i = 0; $i < $count; $i++) {			
				$tempOldName="name" . $i;  
				$tempOldText="text" . $i;  
				//$tempOldId="id" . $i;  
					
				$value.= ausgabe($_POST[$tempOldName], $_POST[$tempOldText], $count-$i);
			}
			$value.= "</div>";  
			$value.= "</td>";  
			$value.= "</tr>";  
			$value.= "</table>";  
			
		}
		return($value);
	}
	
	function textsmileconv($text){

		$smileys = array(0 => ":-)", 1 => ";-)", 2 => ":-(", 3 => ":-P", 4 => ":-D");  
		$gif = array(0 => "smile.gif", 1 => "zwinker.gif", 2 => "sad.gif", 3 => "zunge.gif", 4 => "lol.gif");  

		for($i = 0; $i <= 4; $i++) {
			$text = str_replace($smileys[$i],"<img src='img/".$gif[$i]."' 'alt=".$smileys[$i]."'>",$text);  
		}
		return($value);
			
	}

?>
awagner82
awagner82 08.10.2010 um 10:38:52 Uhr
Goto Top
ok ...
wenn ich das mal kurz überfliege, sieht deine Lösung meiner Meinung nach so aus:

in Zeile 23:
<?
$text; //similies hier ersetzen 
?>

folgendes machen:

<?
 $value.= textsmileconv($text);
?>

Vorraussetzung, dass das funktioniert ist aber, dass du in Zeile 78 die Variable $value, die Du in Zeile 80 zurückgibst, füllst:
<?
$value = str_replace($smileys[$i],"<img src='img/".$gif[$i]."' 'alt=".$smileys[$i]."'>",$text);   
?>

Gruß
Arano
Arano 08.10.2010 um 10:40:17 Uhr
Goto Top
Hi

Sollte Zeile 23 nicht so lauten:
$value.= textsmileconv($text);
*weiterles...*

OHHH ! oO
In der Funktion textsmileconv wird die Variable $value zurückgegeben ABER diese Variable existiert nicht !
So sollte Teile 80 wahrscheinlich so lauten:
return($text); 

Es wurde schlicht und einfach (wegen der falschen Variable) "nichts/null/leer" zurückgegeben. face-big-smile


~Arano
awagner82
awagner82 08.10.2010 um 10:42:36 Uhr
Goto Top
So geht es auch - japp.
Sag ich doch ;)
dempsey
dempsey 08.10.2010 um 11:22:38 Uhr
Goto Top
hey danke euch.. ist ja eigentlich auch logisch aber vielleicht kommt das noch bei mir... nach ner Zeit face-wink danke euch
Arano
Arano 08.10.2010 um 11:36:26 Uhr
Goto Top
Kein Problem

Ja klar, das kommt noch. Aber das ist auch ein Fehler aus der Kategorie die man zuerst immer übersieht und erst nach dem 20. mal "erkennt".

~Arano