<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PHP-Friends Blog &#187; PHP</title>
	<atom:link href="http://php-friends.de/rubrik/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://php-friends.de</link>
	<description>Internet, Soft- &#38; Hardware, Erfahrungsberichte, PHP. Unsere Artikel zum digitalen Leben.</description>
	<lastBuildDate>Sat, 21 Aug 2010 22:29:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Vorstellung: cFTP (clients-oriented-ftp)</title>
		<link>http://php-friends.de/php/erfahrung-test-cftp-clients-oriented-ftp/</link>
		<comments>http://php-friends.de/php/erfahrung-test-cftp-clients-oriented-ftp/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 00:22:19 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[Erfahrungsberichte]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=360</guid>
		<description><![CDATA[Hallo liebe Blogleser! Heute wollte ich euch mal eine interessante Websoftware namens &#8220;cFTP&#8221; (clients-oriented-ftp) vorstellen. cFTP allows you to create clients accounts with a very easy to use front end. Then you can upload as much files as you want under each account, with the ability to add a title and description to each one.[...]]]></description>
			<content:encoded><![CDATA[<p>Hallo liebe Blogleser!</p>
<p>Heute wollte ich euch mal eine interessante Websoftware namens &#8220;cFTP&#8221; (clients-oriented-ftp) vorstellen.</p>
<blockquote><p><strong>cFTP</strong> allows you to create clients accounts with a very easy to use front end. Then you can upload as much files as you want under each account, with the ability to add a title and description to each one.<a href="http://code.google.com/p/clients-oriented-ftp/">[...]</a></p></blockquote>
<p>Ich habe das Tool mal angetestet. Viel Spaß beim Lesen!<br />
<span id="more-360"></span></p>
<p>cFTP erlaubt es uns, Benutzer zu erstellen, die über ein einfaches Frontend Dateien (mit Titel und Beschreibung) uploaden und diese dann der ganzen Welt zur Verfügung stellen können. Das klingt ja erstmal gar nicht so schlecht. Die Vorteile oder auch Features von cFTP werden uns auf der <a href="http://code.google.com/p/clients-oriented-ftp/" target="_blank">Entwicklerseite</a> genannt.</p>
<blockquote><p><strong>Some of the features of cFTP:</strong></p>
<ul>
<li>Really simple and attractive design. Ease of use for both users and clients!</li>
<li>Comes with an installer, much like the WordPress one.</li>
<li>User roles (Administrator. Account Manager, Uploader)</li>
<li>Sortable full lists of files, users and clients</li>
<li>Options for localization (you can select your timezone and date format). This is refllected inmediatly on every list.</li>
<li>On the listings, picture files not only have the mandatory download link, but also a thumbnail for easy recognition.</li>
<li>Options and logo selection pages. Your company logo is seen on the clients lists.</li>
<li>Can be translated easily (all texts strings are located on a specific file)</li>
</ul>
</blockquote>
<p>Das benutzerbasierte Uploadscript besitzt also ein &#8220;simple and attractive&#8221; Design, kann Thumbnails bei Bilderuploads erstellen und leicht in alle Sprachen übersetzt werden etc. Ferner sollte man noch erwähnen, dass dieses Script Ajax verwendet und benötigt. Aufgrund all dieser Funktionen haben wir cFTP mal installiert und geschaut was es so alles hergibt:</p>
<p><strong>Installation:</strong> Die Installation ist vollkommen unproblematisch. In der beiliegenden readme.txt sind alle notwendigen Installationsschritte aufgeführt, und wenn man sich daran hält, kann eigentlich nichts schief gehen! <img src='http://php-friends.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Design und Aufbau:</strong> Das Design ist &#8211; wie es schon in der Beschreibung steht &#8211; schlicht und übersichtlich und meiner Meinung nach auch sehr schön. <img src='http://php-friends.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Der Aufbau ist weder überladen, noch findet man sich schwer zurecht. Nachdem man einen &#8220;Client&#8221; angelegt hat, kann das Uploaden auch schon beginnen. Manchmal wird man auch von kleinen (durch Ajax generierte) Fenstern beglückt.</p>
<p><strong>Der Code:</strong> Ich habe nur mal schnell in den Code geguckt &#8211;  Code und Style werden offenbar nicht strikt getrennt. Außerdem wird auf Obektorientierte Programmierung beinahe komplett verzichtet. Die einzige Ausnahme scheint das Datenbankobjekt zu sein.</p>
<p><strong>Anwendung:</strong> Über den Standardbenutzer (admin) kann man nun entweder einen &#8220;Client&#8221; (Uploadberechtigung) oder einen &#8220;User&#8221; (entweder Admin, Account Manger oder Uploaderberechtigung) erstellen. Man stellt fest, dass man einem Client mehr Zusatzinformationen geben kann, als einem User. Nachdem man einen Account hat, der uploadfähig ist, kann direkt der erste Testupload durchgeführt werden. Datei auswählen, Titel und Beschreibung eingeben &#8211; und hochladen! Fertig. Danach wird man zu einer Liste mit allen hochgeladenen Dateien des Benutzers weitergeleitet. Unter anderem bekommt man dort Thumbnails für Bilder und die restlichen Zusatzinformationen angezeigt.</p>
<p><strong>Fazit:</strong> cFTP ist ein sehr interessantes Script und für bestimmte Anwendungsbereiche (z.B. wenn man den Zugriff von Uploadern beschränken möchte) mit Sicherheit hilfreich. Nachteile sind sicherlich, dass so genannte Multiuploads nicht unterstützt werden und ich keine Begrenzung des Uploadlimits finden konnte. Dies ließe sich notfalls (wenn auch unschön) per php.ini regeln. Dennoch sollte man cFTP auf jeden Fall mal ausprobiert haben!</p>
<p><a href="http://www.facebook.com/#!/album.php?aid=23713&amp;id=119992318014257" target="_blank">Screenshots gibt es übrigens hier.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/erfahrung-test-cftp-clients-oriented-ftp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erweiterte/Flexible PHP BBCode Klasse</title>
		<link>http://php-friends.de/php/erweiterte-flexible-phpbbcode-klasse/</link>
		<comments>http://php-friends.de/php/erweiterte-flexible-phpbbcode-klasse/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 12:09:24 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=323</guid>
		<description><![CDATA[Guten Morgen Nach meiner ersten, meiner Meinung nach, etwas missratenen &#8220;einfachen&#8221; PHP BBCode Klasse, wollte ich diese etwas erweitern und verbessern. Dies habe ich erreicht, indem man nun eigene BBCodes in den Parser laden kann, was die ganze Klasse flexibler gestaltet. Außerdem hab ich die alten Klassenstruktur etwas verändert, obwohl ich mit der aktuellen auch]]></description>
			<content:encoded><![CDATA[<p>Guten Morgen <img src='http://php-friends.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Nach meiner ersten, meiner Meinung nach, etwas missratenen &#8220;einfachen&#8221; PHP BBCode Klasse, wollte ich diese etwas erweitern und verbessern. Dies habe ich erreicht, indem man nun eigene BBCodes in den Parser laden kann, was die ganze Klasse flexibler gestaltet. Außerdem hab ich die alten Klassenstruktur etwas verändert, obwohl ich mit der aktuellen auch nicht richtig zufrieden bin. Aber es sollte ja nur ein &#8220;Upgrade&#8221; für die alte PHP BBCode Klasse sein und keine &#8220;Neuentwicklung&#8221;. Genug geredet hier ist sie, wie immer schlecht dokumentiert:</p>
<p><span id="more-323"></span></p>
<p><strong>Erweiterte/Flexible PHP BBCode Klasse(Code)</strong></p>
<pre class="brush: php;">
&lt;?php

class BBCodeParser
{
	private $BBCodesDefault=&quot;&quot;;
	private $BBCodesExtra=&quot;&quot;;
	private $rawText;

	public function __construct()
	{
		if(!isset($this-&gt;BBCodesDefault) OR !isset($this-&gt;BBCodesExtra))
		{
			trigger_error(&quot;Es fehlen wichtige Variablen! Bitte kontrollieren Sie die Klasse.&quot;);
		}
		$this-&gt;addDefaultBBCodes();
	}

	private function addDefaultBBCodes()
	{
		$this-&gt;BBCodesDefault = array(&quot;b&quot; =&gt; array(&quot;/\[b\](.*)\[\/b\]/isU&quot; =&gt; &quot;&lt;b&gt;$1&lt;/b&gt;&quot;),
								      &quot;i&quot; =&gt; array(&quot;/\[i\](.*)\[\/i\]/isU&quot; =&gt; &quot;&lt;i&gt;$1&lt;/i&gt;&quot;),
								      &quot;url&quot; =&gt; array(&quot;/\[url\=(.*)\](.*)\[\/url\]/isU&quot; =&gt; &quot;&lt;a href=\&quot;$1\&quot;&gt;$2&lt;/a&gt;&quot;),
								      &quot;youtube&quot; =&gt; array(&quot;/\[youtube\](.*)\[\/youtube\]/isU&quot; =&gt; &quot;&lt;object width=\&quot;560\&quot; height=\&quot;340\&quot;&gt;&lt;param name=\&quot;movie\&quot; value=\&quot;http://www.youtube.com/v/$1\&quot;&gt;&lt;/param&gt;&lt;param name=\&quot;allowFullScreen\&quot; value=\&quot;true\&quot;&gt;&lt;/param&gt;&lt;param name=\&quot;allowscriptaccess\&quot; value=\&quot;always\&quot;&gt;&lt;/param&gt;&lt;embed src=\&quot;http://www.youtube.com/v/$1\&quot; type=\&quot;application/x-shockwave-flash\&quot; allowscriptaccess=\&quot;always\&quot; allowfullscreen=\&quot;true\&quot; width=\&quot;560\&quot; height=\&quot;340\&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&quot;),
								      &quot;img&quot; =&gt; array(&quot;/\[img\](.*)\[\/img\]/isU&quot; =&gt; &quot;&lt;img src=\&quot;$1\&quot; alt=\&quot;\&quot; title=\&quot;\&quot; /&gt;&quot;));
	}

	public function addExtraBBCode($name, $bbCodePattern, $htmlCodePattern)
	{
		if(!isset($this-&gt;BBCodesExtra[$name]))
		{
			$this-&gt;BBCodesExtra[$name] = array($bbCodePattern =&gt; $htmlCodePattern);
		}
		else
		{
			trigger_error(&quot;BBCodename existiert bereits&quot;);
		}
	}

	private function parseExtraCode()
	{
		if(!is_array($this-&gt;BBCodesExtra)) return $this-&gt;rawText;

		foreach($this-&gt;BBCodesExtra as $BBCode =&gt; $array)
		{
			foreach($array as $BBCodePattern =&gt; $htmlPattern)
			{
				$this-&gt;rawText = preg_replace($BBCodePattern, $htmlPattern, $this-&gt;rawText);
			}
		}
		return $this-&gt;rawText;
	}

	private function iniParse($rawText)
	{
	$this-&gt;rawText = $rawText;
		foreach($this-&gt;BBCodesDefault as $BBCode =&gt; $array)
		{
			if(stripos($this-&gt;rawText, &quot;[&quot;.$BBCode.&quot;]&quot;) !== FALSE &amp;&amp; stripos($this-&gt;rawText, &quot;[/&quot;.$BBCode.&quot;]&quot;) !== FALSE)
			{
				return true;
			}
			continue;
		}
		if(is_array($this-&gt;BBCodesExtra))
		{
			foreach($this-&gt;BBCodesExtra as $BBCode =&gt; $array)
			{
				if(stripos($this-&gt;rawText, &quot;[&quot;.$BBCode.&quot;]&quot;) !== FALSE &amp;&amp; stripos($this-&gt;rawText, &quot;[/&quot;.$BBCode.&quot;]&quot;) !== FALSE)
				{
					return true;
				}
				continue;
			}
		}

		return false;
	}

	private function parseCode()
	{
		if($this-&gt;rawText == &quot;&quot;)
		{
			trigger_error(&quot;Diese Funktion muss erst durch iniParse() initialisert werden!&quot;);
		}

		foreach($this-&gt;BBCodesDefault as $BBCode =&gt; $array)
		{
			foreach($array as $search =&gt; $html)
			{
				$this-&gt;rawText = preg_replace($search, $html, $this-&gt;rawText);
			}
		}

		return $this-&gt;rawText;
	}

	public function Parser($rawText)
	{
		//$this-&gt;rawText = htmlentities($rawText);
		if(!$this-&gt;iniParse($rawText)) return $this-&gt;rawText;
		$this-&gt;parseCode();
		$this-&gt;parseExtraCode();
		return $this-&gt;rawText;
	}
}
?&gt;
</pre>
<p>Eine Demo gibt es hier zu sehen: <a href="http://snippets.php-friends.de/BBCodeTest.php">DEMO</a>. Obwohl man natürlich nur den geparsten Text sehen kann, also bringt es nicht viel.</p>
<p><strong><br />
Erweiterte/Flexible PHP BBCode Klasse &#8211; DEMO(Code)</strong></p>
<pre class="brush: php;">
&lt;?php

include_once(&quot;./BBCode2.class.php&quot;);

// Parser wird initialisiert
$bbcode = new BBCodeParser();

//Test mit BBCode
$text = &quot;[URL=http://php-friends.de]PHP-Friends[/URL][I][B]Text[/B][B]Text2[/B][/I][youtube]gUeeIjyI7QQ[/youtube]&lt;br /&gt;&quot;;

// Text ohne BBCode
$text2 = &quot;ABC&lt;br /&gt;&quot;;

// Eigenen BBCode einfügen

$bbcode-&gt;addExtraBBCode(&quot;h1&quot;, &quot;/\[h1\](.*)\[\/h1\]/isU&quot;, &quot;&lt;h1&gt;$1&lt;/h1&gt;&quot;);

// Wird der eigene BBCode geparst?
$text3 = &quot;[h1]Marvin[/h1]&quot;;

//Ausgabe
echo $bbcode-&gt;Parser($text3);
echo $bbcode-&gt;Parser($text2);
echo $bbcode-&gt;Parser($text);
?&gt;</pre>
<p>Bei Anregungen und/oder Kritik bitte das Kommentarsystem nutzen; E-Mail ist natürlich auch okay.</p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/erweiterte-flexible-phpbbcode-klasse/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>[PHP-Performance] Ordner auslesen</title>
		<link>http://php-friends.de/php/php-performance-ordner-auslesen/</link>
		<comments>http://php-friends.de/php/php-performance-ordner-auslesen/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 00:10:37 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=207</guid>
		<description><![CDATA[Hallo User! Auch noch zur späten bzw frühen Stunde habe ich unermüdlich *gähn* getestet, ob glob() oder opendir() + Konsorten schneller ist. Das Ergebnis: Hier der Code: &#38;lt;?php $dir = dirname(__FILE__).&#38;quot;/&#38;quot;; $start = microtime(); for($i = 1;$i &#38;lt;= 1000; $i++) { $dirHandle = opendir($dir); while(($file = readdir($dirHandle)) !== FALSE) { echo &#38;quot;&#38;lt;p&#38;gt;Filename : &#38;lt;b&#38;gt;$file&#38;lt;/b&#38;gt;&#38;lt;/p&#38;gt;\n&#38;quot;; }]]></description>
			<content:encoded><![CDATA[<p>Hallo User!</p>
<p>Auch noch zur späten bzw frühen Stunde habe ich unermüdlich *gähn* getestet, ob glob() oder opendir() + Konsorten schneller ist. Das Ergebnis:</p>
<p><span id="more-207"></span></p>
<p>Hier der Code:</p>
<pre class="brush: php;">

&amp;lt;?php
$dir = dirname(__FILE__).&amp;quot;/&amp;quot;;

$start = microtime();

for($i = 1;$i &amp;lt;= 1000; $i++)
{
$dirHandle = opendir($dir);
while(($file = readdir($dirHandle)) !== FALSE)
{
echo &amp;quot;&amp;lt;p&amp;gt;Filename : &amp;lt;b&amp;gt;$file&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;\n&amp;quot;;
}
closedir($dirHandle);
}

$end = microtime();
$diff = $end-$start;
echo &amp;quot;.&amp;lt;p&amp;gt;Diese Seite wurde in $diff generiert&amp;lt;/p&amp;gt;\n&amp;quot;;

$start = microtime();

for($i = 1;$i &amp;lt;= 1000; $i++)
{
foreach(glob($dir.&amp;quot;*.*&amp;quot;) as $filename)
{
echo &amp;quot;&amp;lt;p&amp;gt; Filename : &amp;lt;b&amp;gt;&amp;quot;.basename($filename).&amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;;
}
}
$end = microtime();

$diff = $end-$start;
echo &amp;quot;.&amp;lt;p&amp;gt;Diese Seite wurde in $diff generiert&amp;lt;/p&amp;gt;\n&amp;quot;;

?&amp;gt;
</pre>
<p>Die Ausgabe ist zu lang deswegen kann ich sie hier nicht posten!</p>
<p><a href="http://snippets.php-friends.de/dir.php">[Live-Demo]</a></p>
<p>Strg+F -&gt; Suche nach generiert.</p>
<p>Eindeutig ist anders! Und wer liest bitten schön 3 Dateien 1000 mal aus (3*1000=3000 Dateien). Man kann also sagen, dass glob minimal langsamer ist, es sich aber kaum negativ auswirkt, obwohl glob vorher noch eine RegExp bearbeiten muss und damit viel umfangreicher als opendir ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/php-performance-ordner-auslesen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP-BBCode Klasse</title>
		<link>http://php-friends.de/php/php-bbcode-klasse-class/</link>
		<comments>http://php-friends.de/php/php-bbcode-klasse-class/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 18:34:15 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=193</guid>
		<description><![CDATA[Hier ist eine von mir geschrieben leicht erweiterbare PHP BBCode Klasse. Außerdem maskiert sie unnötige HTML Zeichen und ersetzt \n durch &#60;br /&#62;&#8217;s! Standartmäßig sind enthalten im PHP Script enthalten: &#60;a&#62;, &#60;b&#62;, &#60;img&#62;&#60;i&#62; und auch einen youtube BBCode: &#60;?php class BBCodeParser { private $BBCodesEasy = array(&#34;b&#34;, &#34;url&#34;, &#34;img&#34;, &#34;i&#34;, &#34;youtube&#34;); private $rawText = &#34;&#34;; public]]></description>
			<content:encoded><![CDATA[<p>Hier ist eine von mir geschrieben leicht erweiterbare PHP BBCode Klasse. Außerdem maskiert sie unnötige HTML Zeichen und ersetzt \n durch</p>
<p>&lt;br /&gt;&#8217;s!</p>
<p><span id="more-193"></span></p>
<p>Standartmäßig sind enthalten im PHP Script enthalten:</p>
<p>&lt;a&gt;, &lt;b&gt;, &lt;img&gt;&lt;i&gt; und auch einen youtube BBCode:</p>
<pre class="brush: php;">&lt;?php

class BBCodeParser
{
	private $BBCodesEasy = array(&quot;b&quot;, &quot;url&quot;, &quot;img&quot;, &quot;i&quot;, &quot;youtube&quot;);
	private $rawText = &quot;&quot;;

	public function __construct()
	{
		if(!is_array($this-&gt;BBCodesEasy))
		{
			trigger_error(&quot;Bitte trage die zu parsenden BBCodes ein&quot;);
		}
	}

	public function iniParse($rawText)
	{
		foreach($this-&gt;BBCodesEasy[0] as $key =&gt; $BBCode)
		{
			if(stripos($rawText, &quot;[&quot;.$BBCode.&quot;]&quot;) !== FALSE &amp;&amp; stripos($rawText, &quot;[/&quot;.$BBCode.&quot;]&quot;) !== FALSE)
			{
				return true;
			}
			continue;
		}
		return false;
	}

	public function parseText()
	{
		if($this-&gt;rawText == &quot;&quot;)
		{
			trigger_error(&quot;Diese Funktion muss erst durch iniParse() initialisert werden!&quot;);
		}
		$this-&gt;rawText = preg_replace(&quot;/\[b\](.*)\[\/b\]/isU&quot;, &quot;&lt;b&gt;$1&lt;/b&gt;&quot;, $this-&gt;rawText);
		$this-&gt;rawText = preg_replace(&quot;/\[i\](.*)\[\/i\]/isU&quot;, &quot;&lt;i&gt;$1&lt;/i&gt;&quot;, $this-&gt;rawText);
		$this-&gt;rawText = preg_replace(&quot;/\[img\](.*)\[\/img\]/isU&quot;, &quot;&lt;img src=\&quot;$1\&quot; alt=\&quot;\&quot; title=\&quot;\&quot; /&gt;&quot;, $this-&gt;rawText);
		$this-&gt;rawText = preg_replace(&quot;/\[url\=(.*)\](.*)\[\/url\]/isU&quot;, &quot;&lt;a href=\&quot;$1\&quot;&gt;$2&lt;/a&gt;&quot;, $this-&gt;rawText);
		$this-&gt;rawText = preg_replace(&quot;/\[youtube\](.*)\[\/youtube\]/isU&quot;, &quot;&lt;object width=\&quot;560\&quot; height=\&quot;340\&quot;&gt;&lt;param name=\&quot;movie\&quot; value=\&quot;http://www.youtube.com/v/$1\&quot;&gt;&lt;/param&gt;&lt;param name=\&quot;allowFullScreen\&quot; value=\&quot;true\&quot;&gt;&lt;/param&gt;&lt;param name=\&quot;allowscriptaccess\&quot; value=\&quot;always\&quot;&gt;&lt;/param&gt;&lt;embed src=\&quot;http://www.youtube.com/v/$1\&quot; type=\&quot;application/x-shockwave-flash\&quot; allowscriptaccess=\&quot;always\&quot; allowfullscreen=\&quot;true\&quot; width=\&quot;560\&quot; height=\&quot;340\&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&quot;, $this-&gt;rawText);
		return $this-&gt;rawText;
	}

	public function Parser($rawText)
	{
		$this-&gt;rawText = htmlentities($rawText);
		if(!$this-&gt;iniParse($this-&gt;rawText)) return $this-&gt;rawText;
		$this-&gt;parseText();
		$this-&gt;rawText = nl2br($this-&gt;rawText);
		return $this-&gt;rawText;
	}
}

$text = &quot;[URL=http://php-friends.de]PHP-Friends[/URL][I][B]Text[/B][B]Text2[/B][/I]\n\n\n[youtube]bGBOKtaGlyA[/youtube]&quot;;
$bbcode = new BBCodeParser();
$text2 = &quot;ABC&quot;;
echo $bbcode-&gt;Parser($text2);
echo $bbcode-&gt;Parser($text);
?&gt;
</pre>
<p>Es sollte eigentlich selbstklärend sein. Nur auf den Youtube BBCode werde ich näher eingehen:</p>
<p>Um diesen zu verwenden müsst ihr den v= Teil aus dem Link zwischen die Tags kopieren. Bei diesem Link:</p>
<p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/LLjj4xvx6zk&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/LLjj4xvx6zk&#038;fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>wäre es LLjj4xvx6zk. Also</p>
<pre class="brush: plain;">[youtube]LLjj4xvx6zk[/youtube]</pre>
<p>Bei Fragen etc. wie immer Kommentar oder eMail!</p>
<p>Download:  <a href="http://php-friends.de/wp-content/uploads/2009/11/BBcode.zip" target="_self">PHP BBCode Klasse/Class</a></p>
<p>*UPDATE 21.11.2009: Peinlicher Fehler im Script entdeckt und verbessert*</p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/php-bbcode-klasse-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mit PHP alle Dateien in einem Ordner anzeigen?</title>
		<link>http://php-friends.de/php/php-alle-dateien-in-ordner-anzeigen/</link>
		<comments>http://php-friends.de/php/php-alle-dateien-in-ordner-anzeigen/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 13:06:42 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=189</guid>
		<description><![CDATA[Ihr wollte alle Dateien in einem Verzeichnis auslesen? Ohne dieses opendir(), readdir() blabla? Es geht nämlich genauso einfach mit glob()! Hier ist der Code dafür. Einfach die gewünschten Variablen anpassen! &#60;?php // PHP Environment ini_set(&#34;display_errors&#34;, 1); error_reporting(E_ALL ^ E_STRICT); $dir = dirname(__FILE__).&#34;/&#34;; // Pfad zum Ordner der ausgelesen werden soll //$dir = dirname(&#38;amp;quot;../&#38;amp;quot;).&#38;amp;quot;/&#38;amp;quot;; $filePattern =]]></description>
			<content:encoded><![CDATA[<p>Ihr wollte alle Dateien in einem Verzeichnis auslesen? Ohne dieses opendir(), readdir() blabla? Es geht nämlich genauso einfach mit glob()!<br />
<span id="more-189"></span></p>
<p>Hier ist der Code dafür. Einfach die gewünschten Variablen anpassen!</p>
<pre class="brush: php;">
&lt;?php
// PHP Environment
ini_set(&quot;display_errors&quot;, 1);
error_reporting(E_ALL ^ E_STRICT);

$dir = dirname(__FILE__).&quot;/&quot;; // Pfad zum Ordner der ausgelesen werden soll
//$dir = dirname(&amp;amp;quot;../&amp;amp;quot;).&amp;amp;quot;/&amp;amp;quot;;

$filePattern = &quot;*&quot;;
$ext = &quot;*&quot;; // Falls ihr nur bestimmte Dateiendunge ausgelesen haben wollt. Statt dem Sternchen einfach den gewünschten Wert setzen.

foreach(glob($dir.$filePattern.&quot;.&quot;.$ext) as $filename)
{
echo &quot;.&lt;p&gt;&lt;strong&gt;&amp;amp;quot;.basename($filename).&amp;amp;quot; | &amp;amp;quot;.filesize($filename).&amp;amp;quot;&amp;amp;lt;/b&amp;amp;gt;&amp;amp;lt;/p&amp;amp;gt;\n&amp;amp;quot;;
}

?&amp;amp;gt;
</pre>
<p><a href="http://snippets.php-friends.de/readdir.php" target="_blank">[Live-Demo]</a></p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/php-alle-dateien-in-ordner-anzeigen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[POOTMS] 3. Zwischenbericht (neuer Screenshot!)</title>
		<link>http://php-friends.de/php/pootms-dritter-zwischenbericht-screenshot-neu/</link>
		<comments>http://php-friends.de/php/pootms-dritter-zwischenbericht-screenshot-neu/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 22:28:30 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=179</guid>
		<description><![CDATA[Guten Abend (oder gute Nacht) liebe Leser, Ich bin heute extrem weit gekommen und das Frontend ist so gut wie fertig! Es fehlen noch ein UserCP (eigene Seiten verwalten) und eine SearchEngine. Vielleicht noch ein paar andere Kleinigkeiten in Form von Sicherheitupdates. Bevor ich das Backend programmiere werde ich fleißige Alpha- / Beta-Tester suchen, die]]></description>
			<content:encoded><![CDATA[<p>Guten Abend (oder gute Nacht) liebe Leser,</p>
<p>Ich bin heute extrem weit gekommen und das Frontend ist so gut wie fertig! Es fehlen noch ein UserCP (eigene Seiten verwalten) und eine SearchEngine. Vielleicht noch ein paar andere Kleinigkeiten in Form von Sicherheitupdates. Bevor ich das Backend programmiere werde ich fleißige Alpha- / Beta-Tester suchen, die das momentane System auf Stabilität prüfen würden. Außerdem werde ich morgen wichtige Informationen zum POOTMS hinzufügen (Features).</p>
<p>Ein kleiner Trost dafür, dass das POOTMS immer noch nicht fertig ist, ist vielleicht dieser Screenshot vom UserCP:</p>
<p><a rel="attachment wp-att-181" href="http://php-friends.de/php/pootms-dritter-zwischenbericht-screenshot-neu/attachment/blog_usercp-2/"><img class="aligncenter size-medium wp-image-181" title="blog_usercp" src="http://php-friends.de/wp-content/uploads/2009/07/blog_usercp1-300x159.png" alt="blog_usercp" width="300" height="159" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/pootms-dritter-zwischenbericht-screenshot-neu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[POOTMS] 2. Zwischenbericht (mit Screenshot!)</title>
		<link>http://php-friends.de/php/pootms-zweiter-zwischenbericht-screenshot/</link>
		<comments>http://php-friends.de/php/pootms-zweiter-zwischenbericht-screenshot/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 14:20:48 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=153</guid>
		<description><![CDATA[Hallo liebe Leser, bestimmt habt ihr schon gedacht, dass das Projekt POOTMS (ja &#8211; ist ein lustiger Name, dafür aber einzigartig!) bereits wieder eingefroren sei. Aber es war wider erwarten doch ein bisschen schwieriger, die ganze Libraries zu programmieren, vor allem weil ich mich dann mitten während der Projektprogrammierung doch noch für ein Gruppensystem entschieden]]></description>
			<content:encoded><![CDATA[<p>Hallo liebe Leser,</p>
<p>bestimmt habt ihr schon gedacht, dass das Projekt POOTMS (ja &#8211; ist ein lustiger Name, dafür aber einzigartig!) bereits wieder eingefroren sei. Aber es war wider erwarten doch ein bisschen schwieriger, die ganze Libraries zu programmieren, vor allem weil ich mich dann mitten während der Projektprogrammierung doch noch für ein Gruppensystem entschieden hatte&#8230;<br />
<span id="more-153"></span></p>
<p>Mit einer Alpha oder einer Beta kann ich euch leider immer noch nicht beglücken.<br />
Nächstes Wochenende.<br />
Vielleicht.</p>
<p>Allerdings kann ich euch einen Screenshot bieten. Das schöne Design habe ich aus einer Open Source-Quelle und kann es somit für das Projekt verwenden. Vielen Dank auch an <a href="http://famfamfam.com/" target="_blank">FamFamFam</a> für die wundervollen Icons! <img src='http://php-friends.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><div id="attachment_154" class="wp-caption aligncenter" style="width: 310px"><a rel="attachment wp-att-154" href="http://php-friends.de/php/pootms-zweiter-zwischenbericht-screenshot/attachment/pootms_snapshot/"><img class="size-full wp-image-154" title="pootms_snapshot" src="http://php-friends.de/wp-content/uploads/2009/07/pootms_snapshot.png" alt="pootms_snapshot" width="300" height="150" /></a><p class="wp-caption-text">pootms_snapshot</p></div><br />
[Kleines Design-Update]<br />
<a href="http://php-friends.de/php/pootms-zweiter-zwischenbericht-screenshot/attachment/pootms_snap_2/" rel="attachment wp-att-172"><img src="http://php-friends.de/wp-content/uploads/2009/07/pootms_snap_2-300x161.png" alt="pootms_snap_2" title="pootms_snap_2" width="300" height="161" class="aligncenter size-medium wp-image-172" /></a></p>
<p>Bis zum nächsten Update! <img src='http://php-friends.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Marvin</p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/pootms-zweiter-zwischenbericht-screenshot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL-Volltext Suche</title>
		<link>http://php-friends.de/php/mysql-volltext-suche-tipp/</link>
		<comments>http://php-friends.de/php/mysql-volltext-suche-tipp/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 09:21:00 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=149</guid>
		<description><![CDATA[Ihr seid mit der MySQL-internen Suche nicht zufrieden? Ihr wollt keine Indexe mehr setzen und euren Usern eine bessere Suchemaschine anbieten? Ich habe eine Lösung für dieses &#8220;Problem&#8221; gefunden. Auf phpbar findet ihr ein schöne Übersicht! Einfach mal ausprobieren. Außerdem müsste unter &#8220;Diskussion&#8221; schon eine PHP-Klasse verfügbar sein.]]></description>
			<content:encoded><![CDATA[<p>Ihr seid mit der MySQL-internen Suche nicht zufrieden? Ihr wollt keine Indexe mehr setzen und euren Usern eine bessere Suchemaschine anbieten?<br />
Ich habe eine Lösung für dieses &#8220;Problem&#8221; gefunden. Auf <a href="http://www.phpbar.de/w/Volltextsuche">phpbar</a> findet ihr ein schöne Übersicht! Einfach mal ausprobieren. Außerdem müsste unter &#8220;Diskussion&#8221; schon eine PHP-Klasse verfügbar sein. <img src='http://php-friends.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/mysql-volltext-suche-tipp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mehrere MySQL-Anwendungen simulieren</title>
		<link>http://php-friends.de/php/viele-mysql-anwendungen-simulieren/</link>
		<comments>http://php-friends.de/php/viele-mysql-anwendungen-simulieren/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 13:54:49 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=144</guid>
		<description><![CDATA[Bei meinen täglichen Netzaktivitäten bin ich auf eine interessante Seite gestoßen, die beschreibt wie man mehrere MySQL-Anwendungen simuliert. Eigentlich recht einfach: Heddesheimer-Blog: Mehrplatzfähige MySQL-Anwendungen in PHP testen Während der sleep()-Phase einfach das gleiche Script nochmal im Browser (oder in der Shell) aufrufen. So einfach ist das Simulieren mehrerer Besucher.]]></description>
			<content:encoded><![CDATA[<p>Bei meinen täglichen Netzaktivitäten bin ich auf eine interessante Seite gestoßen, die beschreibt wie man mehrere MySQL-Anwendungen simuliert.<br />
<span id="more-144"></span></p>
<p>Eigentlich recht einfach:<br />
<a href="http://www.heddesheimer.de/blog/index.php/2006/01/27/mehrplatzfahige_mysql_anwendungen_in_php" target="_blank">Heddesheimer-Blog: Mehrplatzfähige MySQL-Anwendungen in PHP testen</a></p>
<p>Während der sleep()-Phase einfach das gleiche Script nochmal im Browser (oder in der Shell) aufrufen. So einfach ist das Simulieren mehrerer Besucher. <img src='http://php-friends.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/viele-mysql-anwendungen-simulieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1. Zwischenbericht: POOTMS!</title>
		<link>http://php-friends.de/php/zwischenbericht-pootms-update/</link>
		<comments>http://php-friends.de/php/zwischenbericht-pootms-update/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 20:50:09 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=141</guid>
		<description><![CDATA[Momentan läuft es ganz gut! Habe die Core-, Toplist- und User-Klassen soweit fertig. Feile momentan an dem Rechte-System. Werden wahrscheinlich heute Abend oder morgen damit fertig. Dann wäre die Library fertig. Anschließend alles zusammenwürfeln und ein schönes Design reinmachen. Und voila &#8211; fertig! Hmpf. So einfach wird es wohl nicht. Liebe Grüße, Marvin]]></description>
			<content:encoded><![CDATA[<p>Momentan läuft es ganz gut! Habe die Core-, Toplist- und User-Klassen soweit fertig. Feile momentan an dem Rechte-System. Werden wahrscheinlich heute Abend oder morgen damit fertig. Dann wäre die Library fertig. Anschließend alles zusammenwürfeln und ein schönes Design reinmachen. Und voila &#8211; fertig! Hmpf. So einfach wird es wohl nicht. <img src='http://php-friends.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Liebe Grüße,<br />
Marvin</p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/zwischenbericht-pootms-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Interner Syntax-Highlighter</title>
		<link>http://php-friends.de/php/internes-syntax-highlighting-php/</link>
		<comments>http://php-friends.de/php/internes-syntax-highlighting-php/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 08:58:05 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=123</guid>
		<description><![CDATA[Wusstet ihr schon, dass PHP einen internen Highlighter besitzt? Nein? Stichwort: highlight_string() sowie highlight_file()! Mehr zur simplen Anwendung: &#60;?php highlight_string(&#34;&#60;?php echo 'Banane'; ?&#62;&#34;); ?&#62; Trotzdem denke ich, dass dieser interne Highlighter nicht so schön ist, wie der von WordPress (leider finde ich den Namen des Autors von diesem Plugin nicht mehr). Außerdem scheint er nicht]]></description>
			<content:encoded><![CDATA[<p>Wusstet ihr schon, dass PHP einen internen Highlighter besitzt? Nein?<br />
Stichwort: <a href="http://de.php.net/manual/de/function.highlight-string.php" target="_blank">highlight_string()</a> sowie <a href="http://de.php.net/manual/de/function.highlight-string.php" target="_blank">highlight_file()</a>!<br />
Mehr zur simplen Anwendung:<br />
<span id="more-123"></span></p>
<pre class="brush: php;">
&lt;?php
highlight_string(&quot;&lt;?php echo 'Banane'; ?&gt;&quot;);
?&gt;
</pre>
<p>Trotzdem denke ich, dass dieser interne Highlighter nicht so schön ist, wie der von WordPress (leider finde ich den Namen des Autors von diesem Plugin nicht mehr). Außerdem scheint er nicht mehr XHTML-konform zu sein. Dennoch sind es zwei nette Funktionen. <img src='http://php-friends.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/internes-syntax-highlighting-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP 5.3.0</title>
		<link>http://php-friends.de/php/php-5-3-0-release/</link>
		<comments>http://php-friends.de/php/php-5-3-0-release/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 08:49:24 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[Nachrichten & Interessantes]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=121</guid>
		<description><![CDATA[Seit ein paar Tagen ist es nun soweit: der Release von PHP 5.3.0! Die wichtigste Neuerung ist &#8211; meiner Meinung nach &#8211; der goto() &#8211; Befehl, damit kann nämlich der &#8220;Spaghetti-Code&#8221; revolutioniert werden! Demnächst wird mein Provider wahrscheinlich auch updaten (hoffe ich zumindest mal). Weiterhin müssen wir uns wohl noch ein bisschen auf PHP 6]]></description>
			<content:encoded><![CDATA[<p>Seit ein paar Tagen ist es nun soweit: der Release von <a href="http://www.php.net/archive/2009.php#id2009-06-30-1" target="_blank">PHP 5.3.0</a>!<br />
Die wichtigste Neuerung ist &#8211; meiner Meinung nach &#8211; der goto() &#8211; Befehl, damit kann nämlich der &#8220;Spaghetti-Code&#8221; revolutioniert werden! Demnächst wird mein Provider wahrscheinlich auch updaten (hoffe ich zumindest mal). Weiterhin müssen wir uns wohl noch ein bisschen auf PHP 6 gedulden.</p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/php-5-3-0-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alle MySQL-Tabellen und Daten gelöscht? SQL Injection! (PHP-Security)</title>
		<link>http://php-friends.de/php/mysql-tabellen-daten-geloescht-sql-injection-php-security/</link>
		<comments>http://php-friends.de/php/mysql-tabellen-daten-geloescht-sql-injection-php-security/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 13:06:15 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=111</guid>
		<description><![CDATA[Einleitung Hast du nur noch ein großes &#8220;WTF&#8221; im Kopf, weil du nicht derjenige warst der dies veranlasst hat? Tja, dann bist du wahrscheinlich Opfer einer SQL-Injection worden. Nein, niemand hat deinem PHP Code eine Dosis verabreicht, falls du dies nun denkst. Jemand hat über ein Formular oder eine URL unerwünschten Code in dein Script]]></description>
			<content:encoded><![CDATA[<h2>Einleitung</h2>
<p>Hast du nur noch ein großes &#8220;WTF&#8221; im Kopf, weil du nicht derjenige warst der dies veranlasst hat? Tja, dann bist du wahrscheinlich Opfer einer SQL-Injection worden.<br />
Nein, niemand hat deinem PHP Code eine Dosis verabreicht, falls du dies nun denkst. Jemand hat über ein Formular oder eine URL unerwünschten Code in dein Script geschleust.</p>
<p><span id="more-111"></span></p>
<h2>Ursache</h2>
<p>Die Ursache ist ganz klar eine schlechte Programmierung. Du hast die Usereingaben ungenügend verarbeitet und gefiltert. Aber hier kommen meine Tipps für&#8217;s nächst Mal:</p>
<pre class="brush: php;">
&lt;?php
// Bearbeitung eines Formulars
$password = $_POST['pass'];
$mysqli-&gt;query(&quot;SELECT * FROM users WHERE password = '$password'&quot;);
?&gt;
</pre>
<p>Solange die Benutzer keine &#8220;bösen&#8221; Eingaben machen, läuft alles gut. Doch was bei bösen Eingaben passieren kann, sieht man ja an der Überschrift.</p>
<h2>Vorbeugung</h2>
<p>Als Beispiel nehmen wir das oben gepostete Script. Es ist recht simpel abzusichern. Alle Datenbank-Systeme liefern Funktionen mit, mit denen man Variablen entschärfen / escapen kann. Als Beispiel für MySQL: mysql_escape_string(), MySQLi: myqli_escape_string(), $mysqli-&gt;escape_string().</p>
<pre class="brush: php;">
&lt;?php
// Bearbeitung eines Formulars
$password = $mysqli-&gt;;escape_string($_POST['pass']);
$mysqli-&gt;query(&quot;SELECT * FROM users WHERE password = '$password'&quot;);
?&gt;
</pre>
<p>Schon hat man seine Ruhe. Was machen diese Funktionen? Ganz einfach sie maskieren <em>&#8220;, &#8216;, \</em> und auch <em>NULL-Bytes</em>. SQL-intern werden diese natürlich entfernt und man kann seine Nächte wieder ruhig verbringen. <img src='http://php-friends.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Generell gilt: Man darf nie Usereingaben vertrauen, du musst den Eingaben gegenüber immer misstrauisch sein (und immer den Worst-Case als Ausgangssituation nehmen).</p>
<p>Sehr nützlich ist hierzu auch die <a title="Prepare" href="http://de.php.net/manual/en/mysqli.prepare.php" target="_blank">Prepare</a>-Funktion von MySQLi oder auch PDO. Es lohnt sich auf jeden Fall, mal reinzuschauen.</p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/mysql-tabellen-daten-geloescht-sql-injection-php-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP-Klasse: Cache / Caching-Class</title>
		<link>http://php-friends.de/php/php-class-klasse-cache-caching-anleitung-tutorial-howto/</link>
		<comments>http://php-friends.de/php/php-class-klasse-cache-caching-anleitung-tutorial-howto/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 10:53:34 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=49</guid>
		<description><![CDATA[Da bin ich wieder mit einem neuem, bzw. gerade aus den unendlichen Weiten meines Backups ausgegrabenen Scripts. Die Caching-Klasse ist zwar schon etwas älter, habe sie aber kurz überarbeitet und will sie euch nun vorstellen. Vielleicht braucht ja jemand eine Vorlage! Was macht die Klasse? Diese Klasse ist eine von mir erstellte Caching-Klasse. Sie speichert]]></description>
			<content:encoded><![CDATA[<p>Da bin ich wieder mit einem neuem, bzw. gerade aus den unendlichen Weiten meines Backups ausgegrabenen Scripts. Die Caching-Klasse ist zwar schon etwas älter, habe sie aber kurz überarbeitet und will sie euch nun vorstellen. Vielleicht braucht ja jemand eine Vorlage! <img src='http://php-friends.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-49"></span></p>
<h2>Was macht die Klasse?</h2>
<p>Diese Klasse ist eine von mir erstellte Caching-Klasse. Sie speichert Daten dauerhaft im &#8220;serialziertem&#8221; Zustand in Dateien. Verbesserungen wie immer als Kommentar oder auch per eMail (siehe Impressum).</p>
<h2>Download</h2>
<h3>Changelog:</h3>
<p><a href="http://php-friends.de/wp-content/uploads/2009/07/Cache.rar"></a><a rel="attachment wp-att-48" href="http://php-friends.de/php/php-class-klasse-cache-caching-anleitung-tutorial-howto/attachment/cache/">EasyCachingClassVersion1.0.0</a></p>
<blockquote><p>Datei wurde hochgeladen und zum Download bereitgestellt. Bugs bitte per Kommentar (oder irgendwo anders auf der Seite) melden.</p></blockquote>
<h2>Anwendung</h2>
<p>Die kommentierte index.php zeigt ein kleines Anwendungsbeispiel dieser Klasse. Außerdem enthält das Archiv noch ältere Dateien und Tests (unordentlich), die aber erst ein wenig angepasst werden müssten.<br />
Viel Spaß! <img src='http://php-friends.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/php-class-klasse-cache-caching-anleitung-tutorial-howto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: MultiPaging (Mehrere Seiten mit PHP und MySQL)</title>
		<link>http://php-friends.de/php/tutorial-multipaging-mehrere-seiten-mit-php-mysql-howto-anleitung/</link>
		<comments>http://php-friends.de/php/tutorial-multipaging-mehrere-seiten-mit-php-mysql-howto-anleitung/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 09:11:53 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=43</guid>
		<description><![CDATA[Einleitung Heute möchte ich euch am Beispiel eines Newssystem erklären, wie man viele News auf mehrere Seiten verteilen kann. Ich gehe davon aus, dass ein Newssystem schon besteht und wir dieses nur zu erweitern brauchen. Voraussetzung MySQLi Einen Webserver wie z.B. Apache Eine bestehendes Newssystem oder Ähnliches Der Code &#60;?php # Start wir nun mit]]></description>
			<content:encoded><![CDATA[<h2>Einleitung</h2>
<p>Heute möchte ich euch am Beispiel eines Newssystem erklären, wie man viele News auf mehrere Seiten verteilen kann. Ich gehe davon aus, dass ein Newssystem schon besteht und wir dieses nur zu erweitern brauchen.<br />
<span id="more-43"></span></p>
<h2>Voraussetzung</h2>
<ul>
<li><a title="MySQLi" href="http://de.php.net/manual/en/book.mysqli.php" target="_blank">MySQLi</a></li>
<li>Einen Webserver wie z.B. Apache</li>
<li>Eine bestehendes Newssystem oder Ähnliches</li>
</ul>
<h2>Der Code</h2>
<pre class="brush: php;">
&lt;?php

# Start wir nun mit diesem Script
# Als erstes legen wir die Verbindungsvariablen fest
# folgende Wert müsst ihr anpassen:

$dbHost = &quot;localhost&quot;; // Der Datenbankhost, kann meistens so gelassen werden
$dbUser = &quot;root&quot;; // Der MySQL-Nutzer
$dbPass = &quot;password&quot;; // Das User-Passwort
$dbName = &quot;news&quot;; // Der Datenbank-Name, in welchem sich euer Newssystem befindet
$dbPort = &quot;3306&quot;; // Kann meistens auch so gelassen werden

// Wie viele Einträge willst du pro Seite haben?
$nOffset = 5;

###############################################################################
#### Ab hier nichts mehr verändern! ############################################
// GET Site trägt die aktuelle Seitenzahl in sich
if(!isset($_GET['site']) || $_GET['site'] == &quot;&quot;)
{
	$_GET['site'] = 1;
}
// Falls jemand etwas einschleusen möchte:
$thisSite = intval($_GET['site']);
// Verbindung aufbauen
$dbObj = new MySQLi($dbHost, $dbUser, $dbPass, $dbName, $dbPort);

// Verbindung gescheitert?
if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error().' -- Die Verbindung ist fehlgeschlagen, überprüfe bitte deine Angaben!');
}

// Eigentlich soll man * nicht benutzen, mir blieb nur nichts anderes übrig
// Ale Datensätze holen
$sqlStmt = &quot;SELECT * FROM news&quot;;
// Datensätze zählen
$resultSet = $db-&gt;query($sqlStmt);
// Und speichern
$nNum = $resultSet-&gt;num_rows;
// Als nächstes werden wir berechnen wie viele Seiten wir brauchen
$nPages = ceil($nNum/$nOffset);
############
# Nun geht es darum, den Query vorzubereiten, der eigentlich wichtigiste Teil
// Wir bestimmen hier, ab welchem Datensatz SQL anfangen soll zu lesen
// -1 muss gerechnet werden, da MySQL schon beim Datensatz 0 Anfängt
$nStart = ($thisSite - 1)*$nOffset;

// Nun haben wir alle Zutaten für einen MySQL Query, der nur die Datensätze der Aktuellen Seite zeigt zusammen:
// $thisPage, $nStart, $nOffset und $nPages
// also ran ans Werk

// Mit LIMIT werden nur die Einträge ab $nStart plus $nOffset ausgelesen
// bei Seite 1, wäre das z.B. $nStart = 0 bis 5;
// bei Seite 2, wäre das $nStart = 5 bis 10;

$sqlStmt = &quot;SELECT * FROM news WHERE 1 LIMIT &quot;.$nStart.&quot;,&quot;.$nOffset;

// Jetzt müsst ihr das selber weiterbearbeiten ... weiß ja nicht wie euer Script aufgebaut ist
//......

######################
// Jetzt kommt die Zahlennavi
// Hierfür brauchen wir von oben $nPages und $thisPage

for($i = 1;$i &lt;= $nPages;$i++)
{
	if($i == $thisPage) continue;
	echo &quot;&lt;a href=\&quot;{$_SERVER['PHP_SELF']}?site=$i\&quot;&gt;$i&lt;/a&gt;&quot;;
}

## Um die For-Schleife zu erklären:
# Sie läuft solange, bis $i genauso groß ist wie $nPages
# Falls $i die aktuelle Seite ist (auf der sich der Benutzer gerade befindet)
# wird sie nicht ausgegebe, um ihn nicht zu verwirren
# $_SERVER['PHP_SELF'] solltet ihr durch den Dateinamen dieser Datei ersetzen

# Diese Script stellt eine sehr vereinfachte Variante eines MultiPaging Systems
# Ich hofe ich konnte wenigstens einige helfen

?&gt;
</pre>
<h2>Zum guten Schluss</h2>
<p>Diese Script soll nur einen kleinen Denkanstoß geben, weil früher habe ich mich immer gefragt, wie man so etwas umsetzen kann. Dass es eigentlich so simpel ist, war mir nicht klar. <img src='http://php-friends.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Fehler bitte per Kommentar oder eMail posten! Danke!</p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/tutorial-multipaging-mehrere-seiten-mit-php-mysql-howto-anleitung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP? Kann man das essen?</title>
		<link>http://php-friends.de/php/php-kann-man-das-essen-mysql/</link>
		<comments>http://php-friends.de/php/php-kann-man-das-essen-mysql/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 21:49:15 +0000</pubDate>
		<dc:creator>Marvin Strauch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://php-friends.de/?p=29</guid>
		<description><![CDATA[Natürlich, würde ich euch aber nicht empfehlen. PHP (&#8220;Hypertext PreProcessor&#8221;) ist nämlich eine Programmiersprache. Mit ihr werden Web-Proramme entwickelt, wie z.B. dieses Blog. Überall, wo etwas dynamisch erstellt wird, kommt eine Programmiersprache (bei PHP wäre Interpretensprache angebrachter, weil PHP immer erst durch einen Interpreten gejagt werden muss) zum Einsatz. Neben PHP gibt es auch andere]]></description>
			<content:encoded><![CDATA[<p>Natürlich, würde ich euch aber nicht empfehlen. PHP (&#8220;<strong>H</strong>ypertext <strong>P</strong>re<strong>P</strong>rocessor&#8221;) ist nämlich eine Programmiersprache. Mit ihr werden Web-Proramme entwickelt, wie z.B. dieses Blog. Überall, wo etwas dynamisch erstellt wird, kommt eine Programmiersprache (bei PHP wäre Interpretensprache angebrachter, weil PHP immer erst durch einen Interpreten gejagt werden muss) zum Einsatz. Neben PHP gibt es auch andere mehr oder weniger populäre Sprachen z.B. Python oder Perl.<br />
<span id="more-29"></span></p>
<p>Außerdem arbeitet PHP häufig mit Datenbanksystemen zusammen, um Daten dauerhaft speichern zu können (PHP kann sich Daten nur während der Laufzeit merken, nachdem das Script zu Ende ist, werden sie wieder verworfen). Das wohl bekannteste Datenbanksystem ist MySQL, aufgekauft von SUN.</p>
<p>Ein simples PHP Beispiel:</p>
<pre class="brush: php;">
&lt;?php

// Öffnender PHP Tag
// Ausgabe
echo &quot;Hallo&quot;;
// PHP Tag schließen

?&gt;
</pre>
<p>→ <a href="http://de.php.net" target="_blank">de.php.net</a><br />
→ <a href="http://mysql.de" target="_blank">mysql.de</a></p>
]]></content:encoded>
			<wfw:commentRss>http://php-friends.de/php/php-kann-man-das-essen-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
