<?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>Ralf Eisenreich &#187; PHP</title>
	<atom:link href="http://sqlblog.de/blog/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://sqlblog.de/blog</link>
	<description>SQLBlog.DE &#124; ..things to remember</description>
	<lastBuildDate>Mon, 09 Apr 2012 07:11:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>SSIS: Excel Import Column Data Types</title>
		<link>http://sqlblog.de/blog/2009/04/ssis-excel-import-column-data-types/</link>
		<comments>http://sqlblog.de/blog/2009/04/ssis-excel-import-column-data-types/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 08:39:59 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[ssis]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=428</guid>
		<description><![CDATA[When Excel data is not coming into SSIS right, then do the following: use option &#8220;IMEX=1&#8221; in ConnectionString (Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\..\MyExcel.xls;Extended...]]></description>
			<content:encoded><![CDATA[<p>When Excel data is not coming into SSIS right, then do the following:</p>
<ol>
<li>use option &#8220;<code>IMEX=1</code>&#8221; in ConnectionString (<code>Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\..\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"</code>)</li>
<li>modify registry setting &#8220;<code>TypeGuessRows=8</code>&#8221; to a much higher value</li>
<li>use a sql statement to retrieve data (e.g. &#8220;<code>SELECT * FROM [sheet1$A5:M2000]</code>&#8220;)</li>
</ol>
<p>NOTE: The setting <code>IMEX=1</code> tells the Excel driver to use <em>Import</em> mode. This mode reads the registry setting &#8220;<code>ImportMixedTypes=Text</code>&#8221; which forces mixed data to be converted to text. To achieve a more reliable column type recognition, the registry setting &#8220;<code>TypeGuessRows=8</code>&#8221; should be increased. By default the ISAM driver analyzes  the first eight rows and determines the column datatypes from this sampling. If the first analysed rows contain only numeric values, then setting <code>IMEX=1</code> will not convert this column datatype to Text &#8211; it will remain numeric.</p>
<p>ATTENTION: The IMEX setting has some other modes:</p>
<ul>
<li>0 is Export mode</li>
<li>1 is Import mode</li>
<li>2 is Linked mode (full update capabilities)</li>
</ul>
<p>Registry Setting Location:<br />
<code><br />
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\X.X\Engines\Excel<br />
</code></p>
<p><strong>supplement</strong><br />
If you experience following error the above described solution could fix it.<br />
1. An OLE DB error has occurred. Error code: 0x80040E21.<br />
2. Failed to retrieve long data for column &#8220;XYZ&#8221;.<br />
3. There was an error with output column &#8220;XYZ&#8221; (55488) on output &#8220;Excel Source Output&#8221; (109). The column status returned was: &#8220;DBSTATUS_UNAVAILABLE&#8221;.<br />
4. The &#8220;output column &#8220;XYZ&#8221;  (55488)&#8221; failed because error code 0xC0209071 occurred, and the error row disposition on &#8220;output column &#8220;XYZ&#8221; (55488)&#8221; specifies failure on error. An error occurred on the specified object of the specified component.<br />
5. [DTS.Pipeline] Error: The PrimeOutput method on component &#8220;Info Source&#8221; (101) returned error code 0xC0209029.  The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.<br />
6. [DTS.Pipeline] Error: Thread &#8220;SourceThread0&#8243; has exited with error code 0xC0047038. </p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2009/04/ssis-excel-import-column-data-types/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>T-SQL: Dynamic Pivot</title>
		<link>http://sqlblog.de/blog/2008/05/t-sql-dynamic-pivot/</link>
		<comments>http://sqlblog.de/blog/2008/05/t-sql-dynamic-pivot/#comments</comments>
		<pubDate>Thu, 08 May 2008 08:56:41 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=255</guid>
		<description><![CDATA[Here is an example using dynamic Pivot: The Pivot columns (country short names) are dynamically generated from a query. Single...]]></description>
			<content:encoded><![CDATA[<p>Here is an example using dynamic Pivot:</p>
<p>The Pivot columns (country short names) are dynamically generated from a query.<br />
Single Quotations within Single Quotations can be realized by using 2 singe Quotations at once.</p>
<p>DECLARE @wave_id int<br />
SET @wave_id = 2</p>
<p>&#8211; Populate table variable with list of MPC_SHORT_NAMES<br />
SET NOCOUNT ON<br />
DECLARE @T AS TABLE(y nvarchar(10) NOT NULL PRIMARY KEY)<br />
INSERT INTO @T SELECT DISTINCT MPC_NAME_SHORT_EN_US FROM VL8C_DWH.VL8RS_DIM_MPCS WHERE WAVE_ID = @wave_id</p>
<p>&#8211; Construct the column list for the IN clause<br />
&#8211; e.g., [D],[E],[F]<br />
DECLARE @cols AS nvarchar(MAX), @y AS nvarchar(10)<br />
SET @y = (SELECT MIN(y) FROM @T)<br />
SET @cols = N&#8221;<br />
WHILE @y IS NOT NULL<br />
BEGIN<br />
SET @cols = @cols + N&#8217;,[' + @y + N']&#8216;<br />
SET @y = (SELECT MIN(y) FROM @T WHERE y &gt; @y)<br />
END<br />
SET @cols = SUBSTRING(@cols, 2, LEN(@cols))<br />
&#8211;SELECT @cols</p>
<p>&#8211; Construct the full T-SQL statement and execute it dynamically.<br />
DECLARE @sql AS nvarchar(MAX)<br />
SET @sql = N&#8217;<br />
SELECT<br />
*<br />
FROM<br />
(<br />
SELECT<br />
KEY_TYPES.KEY_TYPE_NAME,<br />
KEY_TYPES.KT_SORT_ORDER,<br />
DATA.MPC_NAME_SHORT_EN_US,<br />
DATA.K29*100 AS K29<br />
FROM<br />
(<br />
SELECT<br />
KC.KEY_TYPE_CLUSTER,<br />
KC.KT_NAME_EU AS KEY_TYPE_NAME,<br />
KC.KT_SORT_ORDER<br />
FROM<br />
VL8C_DWH.VL8RS_DIM_KEY_TYPE_CLUSTERS KC<br />
WHERE<br />
WAVE_ID = &#8216; + CAST(@wave_id AS nvarchar) + N&#8217;<br />
) KEY_TYPES</p>
<p>LEFT JOIN<br />
(<br />
SELECT<br />
M.MPC_NAME_SHORT_EN_US,<br />
KC.KEY_TYPE_CLUSTER,<br />
FM.K29_CNP_INDEX_TOTAL_BUSINESS AS K29<br />
FROM</p>
<p>VL8C_DWH.VL8RS_FACTS_MAIN FM</p>
<p>INNER JOIN<br />
VL8C_DWH.VL8RS_DIM_KEY_TYPES K<br />
ON	FM.KEY_TYPE_ID = K.KEY_TYPE_ID</p>
<p>INNER JOIN<br />
VL8C_DWH.VL8RS_DIM_KEY_TYPE_CLUSTERS KC<br />
ON	K.KEY_TYPE_CLUSTER_ID = KC.KEY_TYPE_CLUSTER_ID</p>
<p>INNER JOIN<br />
VL8C_DWH.VL8RS_DIM_WAVES W<br />
ON	FM.WAVE_ID = W.WAVE_ID</p>
<p>INNER JOIN<br />
VL8C_DWH.VL8RS_DIM_COMPETITORS C<br />
ON	FM.COMPETITOR_ID = C.COMPETITOR_ID</p>
<p>INNER JOIN<br />
VL8C_DWH.VL8RS_DIM_MPCS M<br />
ON	FM.MPC_ID = M.MPC_ID</p>
<p>WHERE<br />
W.WAVE_ID = &#8216; + CAST(@wave_id AS nvarchar) + N&#8217;<br />
AND	C.COMPETITOR_NAME = &#8221;MB&#8221; AND<br />
M.EUX_MEMBER = 1 AND<br />
(K.REPORT_RELEVANCY = &#8221;B&#8221; OR K.REPORT_RELEVANCY = &#8221;E&#8221;)<br />
) DATA<br />
ON	KEY_TYPES.KEY_TYPE_CLUSTER = DATA.KEY_TYPE_CLUSTER</p>
<p>WHERE<br />
DATA.K29 IS NOT NULL AND<br />
DATA.MPC_NAME_SHORT_EN_US &lt;&gt; &#8221;D&#8221;<br />
) p<br />
pivot<br />
(<br />
sum(K29)<br />
for MPC_NAME_SHORT_EN_US<br />
in (&#8216; + @cols + N&#8217;)<br />
) as p&#8217;<br />
PRINT @sql &#8212; for debugging<br />
EXEC sp_executesql @sql</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2008/05/t-sql-dynamic-pivot/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Social Community: MeineLeu.de</title>
		<link>http://sqlblog.de/blog/2007/12/social-community-meineleude/</link>
		<comments>http://sqlblog.de/blog/2007/12/social-community-meineleude/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 07:49:36 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[bookmarks]]></category>
		<category><![CDATA[by the way]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[community]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/index.php/2007/12/04/social-community-meineleude/</guid>
		<description><![CDATA[&#8220;Meine Leude&#8221; ist eine kostenlose Internetplattform zur Bildung von sozialen Netzwerken im deutschsprachigen Raum. Sie wurde im Oktober 2006 von...]]></description>
			<content:encoded><![CDATA[<p><a href="http://meineleu.de"><img src='http://sqlblog.de/blog/wp-content/uploads/2007/12/meineleude.jpg' alt='MeineLeude Logo' /></a></p>
<p>&#8220;Meine Leude&#8221; ist eine kostenlose Internetplattform zur Bildung von sozialen Netzwerken im deutschsprachigen Raum. Sie wurde im Oktober 2006 von Stefan Maischner entwickelt und liegt mittlerweile in der beta5 vor.</p>
<p>Auf jeden Fall ist <a href="http://meineleu.de">MeineLeu.de</a> ein absoluter Surftipp!</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2007/12/social-community-meineleude/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP Editor: Visual Studio</title>
		<link>http://sqlblog.de/blog/2007/11/php-editor-visual-studio/</link>
		<comments>http://sqlblog.de/blog/2007/11/php-editor-visual-studio/#comments</comments>
		<pubDate>Fri, 30 Nov 2007 00:23:04 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/index.php/2007/11/30/php-editor-visual-studio/</guid>
		<description><![CDATA[Ein sehr guter PHP Editor inklusive Debugging-, Deployment- und (Smarty)-Template-Unterstützung heißt VS.PHP von Jcx.Software. AuÃŸerdem gibt es 4 verschiedene Versionen:...]]></description>
			<content:encoded><![CDATA[<p><img src="http://sqlblog.de/blog/wp-content/uploads/2007/11/vsphp.png" alt="VS.PHP" /></p>
<p>Ein sehr guter PHP Editor inklusive Debugging-, Deployment- und (Smarty)-Template-Unterstützung heißt <a href="http://www.jcxsoftware.com/jcx/vsphp/home">VS.PHP</a> von <a href="http://www.jcxsoftware.com">Jcx.Software</a>.</p>
<p>AuÃŸerdem gibt es 4 verschiedene Versionen:</p>
<ul>
<li>
<ol>VS.Php Standalone Edition</ol>
<ol>VS.Php for Visual Studio 2005</ol>
<ol>VS.Php for Visual Studio .Net 2003</ol>
<ol>VS.Php for Visual Studio .Net</ol>
</li>
</ul>
<p>Besonders die Integration in Visual Studio ist sehr interessant.</p>
<p>Das sagt Jcx.Software dazu:</p>
<blockquote><p>If you are a .Net developer you may wonder why VS.Php? Php is one of the most popular languages for developing web applications. In fact, the Php community has the largest pool of rich open source applications, frameworks and resources to make your development life easier. VS.Php lets those who enjoy using Visual Studio use their favorite IDE for Php development. VS.Php also provides many unique features by leveraging the Visual Studio IDE like Php/Javascript debugging.</p></blockquote>
<p>[Quelle: <a href="http://www.jcxsoftware.com">Jcx.Software</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2007/11/php-editor-visual-studio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP: SQL-Injection</title>
		<link>http://sqlblog.de/blog/2006/12/php-sql-injection/</link>
		<comments>http://sqlblog.de/blog/2006/12/php-sql-injection/#comments</comments>
		<pubDate>Wed, 06 Dec 2006 09:12:16 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[sql-injection]]></category>

		<guid isPermaLink="false">http://ralf-eisenreich.de/blog/index.php/2006/12/06/php-sql-injection/</guid>
		<description><![CDATA[Über die Sicherheit der Daten innerhalb einer Webanwendung sollte man sich stets Gedanken machen. übergibt man POST-Variablen ungeprüft der Anwendung...]]></description>
			<content:encoded><![CDATA[<p>Über die Sicherheit der Daten innerhalb einer Webanwendung sollte man sich stets Gedanken machen. übergibt man POST-Variablen ungeprüft der Anwendung kann die Sicherheit bereits gefährdet sein.</p>
<p>Angreifer können unter Umständen mittels SQL-Injektion Anfragen verändern oder neue erstellen.</p>
<p>Meine Schutzmaßnahme in einer PHP-Anwendung mit MySQL besteht in einer kleinen Hilfsfunktion, die alle Variablen, die in einer Anwendung verarbeitet werden für den SQL-Syntax valide terminiert:</p>
<p><code><br />
// sanitize strings for db queries<br />
function sanitize_sql($value) {<br />
if (get_magic_quotes_gpc()) {<br />
$value = stripslashes($value);<br />
}<br />
return mysql_real_escape_string($value);<br />
}<br />
</code></p>
<p>In jeder Datenbankanfrage, der Variablen übergeben werden, bereinigt diese Funktion eventuellen Schadcode mittels Terminierung:</p>
<p><code><br />
// get userID<br />
function check_user($username, $userpass) {<br />
$sql="SELECT userid<br />
FROM mars_users<br />
WHERE username='".$this-&gt;sanitize_sql($username)."' AND<br />
userpass='".$this-&gt;sanitize_sql(md5($userpass))."' LIMIT 1";<br />
$result=mysql_query($sql) or $this-&gt;errorLog($this-&gt;page, mysql_error());<br />
if (mysql_num_rows($result)==1):<br />
$resultarray=mysql_fetch_assoc($result);<br />
return $resultarray['userid'];<br />
else:<br />
return false;<br />
endif;<br />
}<br />
</code></p>
<p>In PHP selbst kann man auch Variablen mittels Regular Expressions prüfen. Eine einfache Funktion zur Überprüfung eines Strings könnte so aussehen:</p>
<p><code><br />
// sanitize string<br />
function sanitize_string($value) {<br />
$value=preg_replace("/[^\w\040\-_.!?]/","",$value);<br />
$value=trim($value);<br />
return $value;<br />
}<br />
</code></p>
<p>Dazu bietet sich noch die Validierung von Formulareingaben mittels JavaScript an, wie im Beitrag vorher erwähnt.</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2006/12/php-sql-injection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regular Expressions Library</title>
		<link>http://sqlblog.de/blog/2006/12/regular-expressions-library/</link>
		<comments>http://sqlblog.de/blog/2006/12/regular-expressions-library/#comments</comments>
		<pubDate>Tue, 05 Dec 2006 14:28:52 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[regular expressions]]></category>

		<guid isPermaLink="false">http://ralf-eisenreich.de/blog/index.php/2006/12/05/regular-expressions-library/</guid>
		<description><![CDATA[Unter http://regexlib.com findet man eine sehr nette Sammlung an Regular Expressions. Möchte man beispielsweise ein Eingabefeld eines Formulars mit Regular...]]></description>
			<content:encoded><![CDATA[<p>Unter <a href="http://regexlib.com">http://regexlib.com</a> findet man eine sehr nette Sammlung an Regular Expressions.</p>
<p>Möchte man beispielsweise ein Eingabefeld eines Formulars mit Regular Expressions validieren kann das mit JavaScript so aussehen:</p>
<p><code><br />
&lt;script type="text/javascript"&gt;&lt;!--<br />
function allow_alpha(obj) {<br />
	if (/[^a-z]/i.test(obj.value))<br />
		obj.value=obj.value.replace(/[^a-z\040\-_.!?]/gi,'');<br />
	obj.value+='';<br />
	obj.focus();<br />
	return;<br />
}<br />
function allow_numeric(obj) {<br />
	if (/[^0-9]/i.test(obj.value))<br />
		obj.value=obj.value.replace(/[^0-9\040\-]/g,'');<br />
	obj.value+='';<br />
	obj.focus();<br />
	return;<br />
}<br />
function allow_alpha_numeric(obj) {<br />
	if (/[^\w]/i.test(obj.value))<br />
		obj.value=obj.value.replace(/[^\w\040\-_.!?]/gi,'');<br />
	obj.value+='';<br />
	obj.focus();<br />
	return;<br />
}<br />
// --&gt;&lt;/script&gt;<br />
&lt;input onkeyup="allow_alpha(this);" size="20" type="text" /&gt;alpha<br />
&lt;input onkeyup="allow_numeric(this);" size="20" type="text" /&gt;numeric<br />
&lt;input onkeyup="allow_alpha_numeric(this);" size="20" type="text" /&gt;alpha numeric<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2006/12/regular-expressions-library/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>PRADO PHP Framework</title>
		<link>http://sqlblog.de/blog/2006/09/prado-php-framework/</link>
		<comments>http://sqlblog.de/blog/2006/09/prado-php-framework/#comments</comments>
		<pubDate>Fri, 22 Sep 2006 06:30:59 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[prado]]></category>

		<guid isPermaLink="false">http://blog.ralf-eisenreich.de/blog/index.php/2006/09/22/prado-php-framework/</guid>
		<description><![CDATA[Ein beeindruckendes und leistungsstarkes Framework ist das PRADO PHP Framework. Es ist besonders fÃ¼r die Entwicklung groÃŸer PHP-Projekte geeignet und...]]></description>
			<content:encoded><![CDATA[<p>Ein beeindruckendes und leistungsstarkes Framework ist das <a href="http://www.pradosoft.com/">PRADO PHP Framework</a>. Es ist besonders fÃ¼r die Entwicklung groÃŸer PHP-Projekte geeignet und besitzt ein ereignisgesteuertes sowie komponentenbasiertes Konzept.</p>
<p>Hier noch ein paar Infos:</p>
<blockquote><p>
    * Open Source<br />
    * Object-oriented and highly reusable code<br />
    * Event-driven programming<br />
    * Separation of presentation and logic<br />
    * Configurable and pluggable modular architecture<br />
    * Feature-rich Web components: HTML input controls, validators, datagrid, wizard&#8230;<br />
    * Built-in support of internationalization (I18N) and localization (L10N)<br />
    * Seamless Ajax support<br />
    * Customizable and localizable error/exception handling<br />
    * Multiway message logging with filters<br />
    * Generic caching modules and selective output caching<br />
    * Extensible authentication and authorization framework<br />
    * Security measures: cross-site script (XSS) prevention, cookie protection&#8230;<br />
    * XHTML compliance<br />
    * Rich documentation and strong userbase
</p></blockquote>
<p>Quelle: [<a href="http://www.pradosoft.com/">PRADOSOFT</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2006/09/prado-php-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Patterns Pages</title>
		<link>http://sqlblog.de/blog/2006/07/php-patterns-pages/</link>
		<comments>http://sqlblog.de/blog/2006/07/php-patterns-pages/#comments</comments>
		<pubDate>Mon, 24 Jul 2006 07:17:55 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[patterns]]></category>

		<guid isPermaLink="false">http://blog.ralf-eisenreich.de/blog/index.php/2006/07/24/php-patterns-pages/</guid>
		<description><![CDATA[Neulich erst entdeckt: Es gibt einige PHP-Patterns-Seiten, die gute Informationen bereitstellen. PatternsForPHP.com IBM Developers (PHP) Also unbedingt in die Bookmarks...]]></description>
			<content:encoded><![CDATA[<p>Neulich erst entdeckt:<br />
Es gibt einige PHP-Patterns-Seiten, die gute Informationen bereitstellen.</p>
<ul>
<li><a title="Patterns for PHP" href="http://www.patternsforphp.com">PatternsForPHP.com</a></li>
<li><a title="IBM Developers (PHP)" href="http://www-128.ibm.com/developerworks/library/os-php-designptrns/">IBM Developers (PHP)</a></li>
</ul>
<p>Also unbedingt in die Bookmarks aufnehmen!</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2006/07/php-patterns-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

