Thread Author: depp1234
Thread ID: 2091
Thread Info
Es gibt 24 Beiträge zu diesem Thema, und es wurde 4302 mal angesehen.
Wer ist hier? 1 Gäste

 Thema drucken
BBCode Schild
depp1234
Hallo!


Habe das gerade geladen und installiert aber wenn ich da jetzt so ein smilie auswähle und einen text dazu schreibe erstellt er nichts...
Kommt aber auch keine fehlermeldung und nichts...

// habe ich bei der schrift comic gelöscht.

Die smilies kann ich auswählen und dann schreibt er auch das ins fenster z.b.: [schild=15][/schild]

Dann geb ich da einen text ein [schild=15]test[/schild] und dann kommt nichts... neuer eintrag wurde erstellt aber da steht nichts drin.


MFG

Bearbeitet von depp1234 am 04.12.2009 um 13:16
 
SC-Ad-Bot
 
depp1234
welche bilder? ich habe alles was im ordner war hochgeladen. Kann die smilies auswählen, die sehe ich.

Ich habe mal alle // drin gelassen ging nicht, dann habe ich der reihe nach alle einzeln raus genommen aber leider auch ohne erfolg.
Bearbeitet von depp1234 am 04.12.2009 um 13:30
 
emblinux
Bitte öffne mal die Datei text2schild.php im Ordner includes/bbcodes/includes und ersetze den kompletten Inhalt mit folgendem Code.

Code 

<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) 2002 - 2008 Nick Jones
| http://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: imgtext.php
| Author: grr
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
require_once "../../../maincore.php";

$text           = (isset($_GET['text']) ? utf8_decode($_GET['text']) : "" );
$smilie         = (isset($_GET['smilie']) ? $_GET['smilie'] : 1 );
$fontcolor      = (isset($_GET['fontcolor']) ? $_GET['fontcolor'] : "000000");
$shadowcolor    = (isset($_GET['shadowcolor']) ? $_GET['shadowcolor'] : "C0C0C0");
$shieldshadow   = (isset($_GET['shieldshadow']) ? $_GET['shieldshadow'] : 1);

//Here we are able to set a special custom font file... if you want ;-)
$fontfile = "";
//$fontfile     = BASEDIR.'images/smilie_schild/comic.ttf';
//$fontfile     = BASEDIR.'images/smilie_schild/comicbd.ttf';
//$fontfile     = BASEDIR.'images/smilie_schild/andlso.ttf';
//$fontfile     = BASEDIR.'images/smilie_schild/comic.ttf';
$fontheight             = '';
$fontwidth              = '';
$character_count        = 0;
$default_smilie         = 1;
$count_smilie           = -1;

if ($smilie == 'undefined' || $smilie == 'standard')
{
        $smilie = 1;
}

//Get all available smilies ( *.png )
$handle = opendir(BASEDIR."images/smilie_schild/");
while ($result = readdir($handle))
{
        if (strtolower(substr($result, (strlen($result) - 3), 3)) == "png")
        {
                $count_smilie++;
        }
}
closedir($handle);


if (version_compare(PHP_VERSION, '4.3.3', '>='))
{
        $gd_info = gd_info();
}
else
{
        $gd_info["FreeType Support"] = 1;
}

if ((!$gd_info["FreeType Support"]) || (!file_exists($fontfile)))
{
        $fontwidth = 6;
        $fontheight = 8;
}
else
{
        if ((!$fontheight) || (!$fontwidth))
        {
                $fontwidth = imagefontwidth($fontfile) + 1;
                $fontheight = imagefontheight($fontfile);
        }
}
$fontheight += 2;


// remove html code tags.
$text = str_replace('%20', ' ', $text);
$text = htmlspecialchars_decode($text);
$text = stripslashes($text);
$text = str_replace("&lt;","<",$text);
$text = str_replace("&gt;",">",$text);

while (substr_count($text, "<"))
{
        $text = ereg_replace(substr($text, strpos($text, "<"), (strpos($text, ">") - strpos($text, "<") + 1)), "", $text);
}

// Have we some text to show ?
if ($text == '')
{
        $text = "...";
}

//What if the text length is longer than 33 characters?
if (strlen($text) > 33)
{
        //try to split them into single words
        $words = split(" ", $text);

        if  (is_array($words))
        {
                $i = 0;
                $output[$i] = '';

                //Check the line lenght after each word
                foreach ($words as $word)
                {
                        if ((strlen($output[$i] . " " . $word) < 33) && (!substr_count($word, "[SM")))
                        {
                                $output[$i] .= " " . $word;
                        }
                        else
                        {
                                //limit the shield to 12 lines
                                if ($i <= 11)
                                {
                                        if ($character_count < strlen($output[$i]))
                                        {
                                                $character_count = strlen($output[$i]);
                                        }
                                        $i++;
                                        $output[$i] = $word;
                                }
                        }
                }
        }
        else
        {
                //sorry, no split possible, so we have to cut the line.
                $character_count = 33;
                $output[0] = substr($text, 0, 30) . "...";
        }
}
else
{
        $character_count = strlen($text);
        $output[0] = $text;
}

if (sizeof($output) > 12)
{
        //we have more than 12 lines.... cut the last line.
        $output[12] = substr($output[12], 0, 30) . "...";
}

//Maybe we have to tweak here a bit. Depends on the font...
$width = ($character_count * $fontwidth) + 40;
$height = (sizeof($output) * $fontheight) + 40;
if ($width < 60)
{
        $width = 60;
}

//We have a random smilie ?
mt_srand((double)microtime()*3216549);
if ($smilie == "random")
{
        $smilie = mt_rand(1,$count_smilie);
}


if (!$smilie)
{
        if ($default_smilie)
        {
                $smilie = $default_smilie;
        }
        else
        {
                $smilie = mt_rand(1,$count_smilie);
        }
}

//Main work here
$smilie                               = imagecreatefrompng(BASEDIR."images/smilie_schild/" . $smilie . ".png");
$schild                         = imagecreatefrompng(BASEDIR."images/smilie_schild/schild.png");
$img                            = imagecreate($width, $height);

$fontcolor                      = str_replace("#","",$fontcolor);
$shadowcolor            = str_replace("#","",$shadowcolor);

$bgcolor                        = imagecolorallocate ($img, 111, 252, 134);
$txtcolor                       = imagecolorallocate ($img, hexdec(substr($fontcolor, 0, 2)),   hexdec(substr($fontcolor, 2, 2)),   hexdec(substr($fontcolor, 4, 2)));
$txt2color                      = imagecolorallocate ($img, hexdec(substr($shadowcolor, 0, 2)), hexdec(substr($shadowcolor, 2, 2)), hexdec(substr($shadowcolor, 4, 2)));
$bocolor                        = imagecolorallocate ($img, 0, 0, 0);
$schcolor                       = imagecolorallocate ($img, 255, 255, 255);
$shadow1color           = imagecolorallocate ($img, 235, 235, 235);
$shadow2color           = imagecolorallocate ($img, 219, 219, 219);

$smiliecolor            = imagecolorsforindex($smilie, imagecolorat($smilie, 5, 14));

imagesetpixel($schild, 1, 14, imagecolorallocate($schild, ($smiliecolor["red"] + 52), ($smiliecolor["green"] + 59), ($smiliecolor["blue"] + 11)));
imagesetpixel($schild, 2, 14, imagecolorallocate($schild, ($smiliecolor["red"] + 50), ($smiliecolor["green"] + 52), ($smiliecolor["blue"] + 50)));
imagesetpixel($schild, 1, 15, imagecolorallocate($schild, ($smiliecolor["red"] + 50), ($smiliecolor["green"] + 52), ($smiliecolor["blue"] + 50)));
imagesetpixel($schild, 2, 15, imagecolorallocate($schild, ($smiliecolor["red"] + 22), ($smiliecolor["green"] + 21), ($smiliecolor["blue"] + 35)));
imagesetpixel($schild, 1, 16, imagecolorat($smilie, 5, 14));
imagesetpixel($schild, 2, 16, imagecolorat($smilie, 5, 14));
imagesetpixel($schild, 5, 16, imagecolorallocate($schild, ($smiliecolor["red"] + 22), ($smiliecolor["green"] + 21), ($smiliecolor["blue"] + 35)));
imagesetpixel($schild, 6, 16, imagecolorat($smilie, 5, 14));
imagesetpixel($schild, 5, 15, imagecolorallocate($schild, ($smiliecolor["red"] + 52), ($smiliecolor["green"] + 59), ($smiliecolor["blue"] + 11)));
imagesetpixel($schild, 6, 15, imagecolorallocate($schild, ($smiliecolor["red"] + 50), ($smiliecolor["green"] + 52), ($smiliecolor["blue"] + 50)));


imagecopy ($img, $schild, ($width / 2 - 3), 0, 0, 0, 6, 4); // Copy image tile
imagecopy ($img, $schild, ($width / 2 - 3), ($height - 24), 0, 5, 9, 17); // Copy image tile
imagecopy ($img, $smilie, ($width / 2 + 6), ($height - 24), 0, 0, 23, 23); // Copy image tile

imagefilledrectangle($img, 0, 4, $width, ($height - 25), $bocolor);
imagefilledrectangle($img, 1, 5, ($width - 2), ($height - 26), $schcolor);

if ($shieldshadow)
{
        imagefilledpolygon($img, array((($width - 2) / 2 + ((($width - 2) / 4) - 3)), 5, (($width - 2) / 2 + ((($width - 2) / 4) + 3)), 5, (($width - 2) / 2 - ((($width - 2) / 4) - 3)), ($height - 26), (($width - 2) / 2 - ((($width - 2) / 4) + 3)), ($height - 26)), 4, $shadow1color);
        imagefilledpolygon($img, array((($width - 2) / 2 + ((($width - 2) / 4) + 4)), 5, ($width - 2), 5, ($width - 2), ($height - 26), (($width - 2) / 2 - ((($width - 2) / 4) - 4)), ($height - 26)), 4, $shadow2color);
}

$i = 0;
while ($i < sizeof($output))
{
        if (((!$gd_info["FreeType Support"]) || (!file_exists($fontfile))))
        {
                if ($shadowcolor)
                {
                        imagestring($img, 2, (($width - (strlen(trim($output[$i])) * $fontwidth) - 2) / 2 + 1), ($i * $fontheight + 6), trim($output[$i]), $txt2color);
                }
                imagestring($img, 2, (($width - (strlen(trim($output[$i])) * $fontwidth) - 2) / 2), ($i * $fontheight + 5), trim($output[$i]), $txtcolor);
        }
        else
        {
                if ($shadowcolor)
                {
                        imagettftext($img, $fontheight, 0, (($width - (strlen(trim($output[$i])) * $fontwidth) - 2) / 2 + 1), ($i * $fontheight + $fontheight + 7), $txt2color, $fontfile, trim($output[$i]));
                }
                imagettftext($img, $fontheight, 0, (($width - (strlen(trim($output[$i])) * $fontwidth) - 2) / 2), ($i * $fontheight + $fontheight + 8), $txtcolor, $fontfile, trim($output[$i]));
        }
        $i++;
}

imagecolortransparent($img, $bgcolor);
imageinterlace($img, 1);

//Send the image to the browser
header("Content-type: image/png");
imagepng($img);
exit;
?>



Bei mir hat es auch nicht funktioniert, da mein Server ganz sensibel eingestellt ist und jede Warnung anmeckert. Jetzt gehts bei mir.

EDIT: habe gerade nochmal was aktualisiert, war noch eine Debugausgabe drinne. (13:42 Uhr)
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
depp1234
okay das klappt jetzt das er ein smilie mit text anzeigt aber er nimmt immer das gleiche smilie egal welches ich auswähle. :-(
 
emblinux
Habe ich auch gerade gemerkt und den Quelltext nochmal angepasst. Bitte nochmal ersetzen.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
depp1234
Super! Vielen DANK!!!
 
depp1234
Sorry das ich nochmal störe aber klappt das mit der schrift bei dir? Wenn du sie änderst?
Bearbeitet von depp1234 am 04.12.2009 um 13:49
 
emblinux
Das habe ich noch nicht probiert, werde ich gleich mal probieren.

EDIT: Bei mir funktioniert die Schrift. Was genau hast du gemacht und was passirt bzw. was passirt nicht. Ich habe lediglich eine Schrift auskommentiert und diese hat dann auch funktioniert. Die Schrift muss natürlich vorhanden sein, im Ordner images/smilie_schild.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
depp1234
ich habe das so geändert also einfach die zwei // weg
$fontfile = BASEDIR.'images/smilie_schild/comic.ttf';
sonst habe ich nichts getan.

wenn ich dann ein smilie erstellen möchte, kommt keine fehlermeldung und nichts, der eintrag ist da aber kein inhalt... also so wie am anfang.
Bearbeitet von depp1234 am 04.12.2009 um 15:25
 
depp1234
hab es schon gefunden ich musste die addy ändern weil ich es unter files habe... Danke für deine hilfe!
 
emblinux

Code 

$text           = (isset($_GET['text']) ? utf8_decode($_GET['text']) : "" );
$smilie         = (isset($_GET['smilie']) ? $_GET['smilie'] : 1 );
$fontcolor      = (isset($_GET['fontcolor']) ? $_GET['fontcolor'] : "000000");
$shadowcolor    = (isset($_GET['shadowcolor']) ? $_GET['shadowcolor'] : "C0C0C0");
$shieldshadow   = (isset($_GET['shieldshadow']) ? $_GET['shieldshadow'] : 1);

//Here we are able to set a special custom font file... if you want ;-)
$fontfile = "";
//$fontfile     = BASEDIR.'images/smilie_schild/comic.ttf';
//$fontfile     = BASEDIR.'images/smilie_schild/comicbd.ttf';
//$fontfile     = BASEDIR.'images/smilie_schild/andlso.ttf';
//$fontfile     = BASEDIR.'images/smilie_schild/comic.ttf';



Das was rot markiert ist habe ich angepasst. Wenn eine Variable irgendwo benutzt wird, sie jedoch nicht initialisiert wurde, kommt eine Warnung, sie die Variable $fontfile, deshalb habe ich diese noch initialisiert. Das sollte man eigentlich immer machen, da dass sonst mal zu einem Sicherheitsrisiko führen kann.

Und die Abfrage, ob eine Variable gesetzt ist, bevor man sie einer anderen Variable zuordnet ist bei einer sehr empfindlichen Servereinstellung Pflicht. Tut man dies nicht, kann auch das zu einem Sicherheitsrisiko werden.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
Hasi98
Zitat emblinux schrieb:

Code 

$text           = (isset($_GET['text']) ? utf8_decode($_GET['text']) : "" );
$smilie         = (isset($_GET['smilie']) ? $_GET['smilie'] : 1 );
$fontcolor      = (isset($_GET['fontcolor']) ? $_GET['fontcolor'] : "000000");
$shadowcolor    = (isset($_GET['shadowcolor']) ? $_GET['shadowcolor'] : "C0C0C0");
$shieldshadow   = (isset($_GET['shieldshadow']) ? $_GET['shieldshadow'] : 1);

//Here we are able to set a special custom font file... if you want ;-)
$fontfile = "";
//$fontfile     = BASEDIR.'images/smilie_schild/comic.ttf';
//$fontfile     = BASEDIR.'images/smilie_schild/comicbd.ttf';
//$fontfile     = BASEDIR.'images/smilie_schild/andlso.ttf';
//$fontfile     = BASEDIR.'images/smilie_schild/comic.ttf';



hm den code generell find ich net so gut, weil wenn die get-variable existiert wird die get-variable selbst verwendet (für die die's noch net wissen : anstatt $_GET['text'] und so kann man auch $text schreiben) und das wäre eine globale variable.
globale variablen sind unsicher und die soll man nicht verwenden.

(des ist nichts gegen des,was emblinux geschrieben hat, sondern eine kritik gegen das system selbst.)
Bearbeitet von Hasi98 am 04.12.2009 um 15:58
Mfg
Hasi
--------------------------------------------------

Swiftgaming - LianTu2 (MMORP Game Metin2 P-Server) Forum
 
emblinux
Der Vorteil dieser Methode liegt auf der Hand.

Du initialisierst eine Variable in Abhängigkeit einer anderen. Soll heißen $text ist immer initialisiert, egal ob $_GET['text'] gesetzt ist oder nicht. Das spart dir für die weitere Arbeit viel Aufwand und Code, da wenn du direkt nur mit der $_GET['text'] Variable arbeitest, diese immer wieder prüfen müstest.

Und das man keine globalen Variablen benutzen soll, müsste jedem guten Entwickler klar sein. Dazu muss natürlich auch der Server so eingestellt sein, sonst ist es für die Katz. Viele Entwickler benutzen bei ausgeschalteten globalen Variablen gerne einen Hack, der alle POST oder GET Variablen wieder globalisiert, damit man wieder seine "geliebten" globalen Variablen hat. Davon kann ich auch nur abraten, auch wenn das Arbeiten mit den POST oder GET Variablen etwas mühsamer ist. Aber es ist sicherer.

Damit denke ich sollte das Thema beendet sein. Schließlich ist das nicht das Thema dieses Threads.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
emblinux
Es könnte evtl. daran liegen, was man in das Schild schreiben möchte. Das mal prüfen.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
emblinux
Ist zwar nur eine vermutung, aber könnte es evtl. an den Umlauten liegen. Probiere doch mal "Sie folgen dem Anfuehrer" und schau was passiert.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
emblinux
dann sollte es doch reichen, wenn du in der bbcode Datei den Zeilenumbruch entfernst, bevor also der Aufruf mit den Parametern erfolgt.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
emblinux
Es kann auch sein, das solche Umbrüche Problematisch sind: \n oder \n\r

Diese entstehen, wenn du in einer Textarea ein Enter machst und werden später für die Ansicht bearbeitet mit der Funktion nl2br ("New Line to break"Wink

Ist also gut möglich, das diese das Problem verursachen. Du musst eigentlich nur den Text vorher rausfiltern, also alles was zwischen [schild][/schild] steht nehmen und diesen mittels preg_replace bearbeiten, so das die Zeilenumbrüche entfernt werden. Das sollte das Priblem beheben.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
emblinux
also als 1. hätte ich lediglich den Text zwischen dem BBCode herausgeholt:

Code 

$text_zw = preg_replace('#\[schild=(random|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30)\](.*?)\[/schild\]#si', '\2" />', $text);



Dann die Umbrüche entfernen

Code 

$text_zw = preg_replace("/<br \/\>/","",$text_zw);
$text_zw = preg_replace("/\\n/","",$text_zw);
$text_zw = preg_replace("/\\r/","",$text_zw);



Dann Text wieder zusammenbauen.

Code 

$text = preg_replace('#\[schild=(random|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30)\](.*?)\[/schild\]#si', '<img src="'.INCLUDES.'bbcodes/includes/text2schild.php?smilie=\1&amp;text='.$text_zw.'" />', $text);




So sollte es evtl. funktionieren. Habe das mal mit einem RapiShare Link gemacht. Ist natürlich ungetestet. Werde sehen, wie ich am WE Lust und Zeit habe, dann mache ich das mal fertig, solltest du es nicht schaffen.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
emblinux
ich habe da noch eine einfachere Lösung. in der Datei text2schild.php wird ja die maincore eingebunden und das nur, damit man die Variable BASEDIR benutzen kann, wozu ?

Also mein Vorschlag. Entferne das includen der maincore und ändere die entsprechende Stelle wie folgt.

vorher:

Code 

$handle = opendir(BASEDIR."images/smilie_schild/");



nacher:

Code 

$handle = opendir(dirname(__FILE__)."/../../../images/smilie_schild/");




Auch dort, wo man die Fonts einbinden kann, muss man es anpassen:

vorher:

Code 

//$fontfile     = BASEDIR.'images/smilie_schild/comic.ttf'; 



nacher:

Code 

//$fontfile     = dirname(__FILE__)."/../../../images/smilie_schild/comic.ttf"; 



Denn in der maincore ist ja das SecSys eingebunden und überprüft die URL. Da aber nun in dieser Datei die maincore nicht mehr eingebunden ist, sollte auch keine Meldung vom SecSys kommen.

Versuchs einfach mal.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 
emblinux
Zitat MarcusG schrieb:
Ein Sicherheitsproblem sollte durch das Austricksen des SecSys ja nicht entstehen oder?


Nein, eigentlich nicht, da ja die Parameter in keiner Datenbank-Anfrage benutzt werden oder als Include für igendwas.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius

Alles wird Gut!

KEIN Support per Mail, ICQ oder PN !
www.heiseclan.de/fusion/sig.gif

www.heiseclan.de/geosig.gif
 

Springe ins Forum:

 Ähnliche Themen 

TEST
Thema Forum Antworten Letzter Beitrag
Seit Scoresystem installation Fehler in Admin->BBCode Infusionen 3 21.11.2011 um 16:27
php fusion 7 flash bbcode Allgemeine Support Fragen 1 14.10.2011 um 16:45
BBCode Bindet ein Google oder Youtube Flash Vidio ein Allgemeine Support Fragen 3 04.06.2011 um 15:45
Problem mit Scorsystem und thanks bbcode Infusionen 7 05.12.2010 um 13:33
bbcode anzeige mit BILD Allgemeine Support Fragen 6 28.11.2010 um 17:55
SGI Fusion