<?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>Scripts &#8211; Blackbams Blog</title>
	<atom:link href="https://blog.blackbam.at/de/tag/scripts/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.blackbam.at/de</link>
	<description>development - digital arts - internet</description>
	<lastBuildDate>Tue, 16 Oct 2012 22:55:13 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.5</generator>
	<item>
		<title>Sommerzeit/Winterzeit aus UTC-Timestamp berechnen in PHP</title>
		<link>https://blog.blackbam.at/de/2012/10/17/calculate-european-summertime-from-utc-timestamp-in-php/</link>
					<comments>https://blog.blackbam.at/de/2012/10/17/calculate-european-summertime-from-utc-timestamp-in-php/#respond</comments>
		
		<dc:creator><![CDATA[Blackbam]]></dc:creator>
		<pubDate>Tue, 16 Oct 2012 22:53:15 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Snippets]]></category>
		<guid isPermaLink="false">https://blog.blackbam.at/?p=2000</guid>

					<description><![CDATA[Leider ist der Eintrag nur auf Amerikanisches Englisch verfügbar.]]></description>
										<content:encoded><![CDATA[<p class="qtranxs-available-languages-message qtranxs-available-languages-message-de">Leider ist der Eintrag nur auf <a href="https://blog.blackbam.at/en/tag/scripts/feed/" class="qtranxs-available-language-link qtranxs-available-language-link-en" title="English">Amerikanisches Englisch</a> verfügbar.</p><p><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fblog.blackbam.at%2Fde%2F2012%2F10%2F17%2Fcalculate-european-summertime-from-utc-timestamp-in-php%2F&#038;title=Sommerzeit%2FWinterzeit%20aus%20UTC-Timestamp%20berechnen%20in%20PHP" data-a2a-url="https://blog.blackbam.at/de/2012/10/17/calculate-european-summertime-from-utc-timestamp-in-php/" data-a2a-title="Sommerzeit/Winterzeit aus UTC-Timestamp berechnen in PHP"><img src="https://static.addtoany.com/buttons/share_save_120_16.png" alt="Share"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.blackbam.at/de/2012/10/17/calculate-european-summertime-from-utc-timestamp-in-php/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>(English) Basic Ajax Skeleton Code</title>
		<link>https://blog.blackbam.at/de/2012/02/07/basic-ajax-skeleton-code/</link>
					<comments>https://blog.blackbam.at/de/2012/02/07/basic-ajax-skeleton-code/#respond</comments>
		
		<dc:creator><![CDATA[Blackbam]]></dc:creator>
		<pubDate>Tue, 07 Feb 2012 08:26:01 +0000</pubDate>
				<category><![CDATA[JavaScript / Ajax]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[skeleton]]></category>
		<guid isPermaLink="false">https://blog.blackbam.at/?p=1848</guid>

					<description><![CDATA[(English) Nothing new, nothing special... just the working code of a basic Ajax skeleton, as this has to be copied and pasted that often. This example shows an application similar to Google suggest, which searches related values, whenever a key is pressed.]]></description>
										<content:encoded><![CDATA[<p class="qtranxs-available-languages-message qtranxs-available-languages-message-de">Leider ist der Eintrag nur auf <a href="https://blog.blackbam.at/en/tag/scripts/feed/" class="qtranxs-available-language-link qtranxs-available-language-link-en" title="English">Amerikanisches Englisch</a> verfügbar.</p><p><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fblog.blackbam.at%2Fde%2F2012%2F02%2F07%2Fbasic-ajax-skeleton-code%2F&#038;title=%28English%29%20Basic%20Ajax%20Skeleton%20Code" data-a2a-url="https://blog.blackbam.at/de/2012/02/07/basic-ajax-skeleton-code/" data-a2a-title="(English) Basic Ajax Skeleton Code"><img src="https://static.addtoany.com/buttons/share_save_120_16.png" alt="Share"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.blackbam.at/de/2012/02/07/basic-ajax-skeleton-code/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>(English) My todays top 10 most useful Javascript Functions</title>
		<link>https://blog.blackbam.at/de/2011/07/01/my-todays-top-10-most-useful-javascript-functions/</link>
					<comments>https://blog.blackbam.at/de/2011/07/01/my-todays-top-10-most-useful-javascript-functions/#respond</comments>
		
		<dc:creator><![CDATA[Blackbam]]></dc:creator>
		<pubDate>Thu, 30 Jun 2011 22:21:10 +0000</pubDate>
				<category><![CDATA[JavaScript / Ajax]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[javascript functions]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[top 10 javascript]]></category>
		<guid isPermaLink="false">https://blog.blackbam.at/?p=1308</guid>

					<description><![CDATA[(English) These are my todays top 10 Javascript functions which I gathered in more than 6 months of casually Javascript Development. Almost each of them helped out of more than one problem, so they deserve to be perpetuated here and help again. Most of these are not written by me, but by some other great programmer on the web, and I really would like to mention all of them here if I would know where I have got all of these great scripts. Have fun an use wisely. [...]]]></description>
										<content:encoded><![CDATA[<p class="qtranxs-available-languages-message qtranxs-available-languages-message-de">Leider ist der Eintrag nur auf <a href="https://blog.blackbam.at/en/tag/scripts/feed/" class="qtranxs-available-language-link qtranxs-available-language-link-en" title="English">Amerikanisches Englisch</a> verfügbar.</p><p><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fblog.blackbam.at%2Fde%2F2011%2F07%2F01%2Fmy-todays-top-10-most-useful-javascript-functions%2F&#038;title=%28English%29%20My%20todays%20top%2010%20most%20useful%20Javascript%20Functions" data-a2a-url="https://blog.blackbam.at/de/2011/07/01/my-todays-top-10-most-useful-javascript-functions/" data-a2a-title="(English) My todays top 10 most useful Javascript Functions"><img src="https://static.addtoany.com/buttons/share_save_120_16.png" alt="Share"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.blackbam.at/de/2011/07/01/my-todays-top-10-most-useful-javascript-functions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>(English) WordPress improved user search (first name, last name, email) in backend</title>
		<link>https://blog.blackbam.at/de/2011/06/27/wordpress-improved-user-search-first-name-last-name-email-in-backend/</link>
					<comments>https://blog.blackbam.at/de/2011/06/27/wordpress-improved-user-search-first-name-last-name-email-in-backend/#comments</comments>
		
		<dc:creator><![CDATA[Blackbam]]></dc:creator>
		<pubDate>Mon, 27 Jun 2011 22:35:01 +0000</pubDate>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WP Scripts]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[search]]></category>
		<guid isPermaLink="false">https://blog.blackbam.at/?p=1457</guid>

					<description><![CDATA[Leider ist der Eintrag nur auf Amerikanisches Englisch verfügbar.]]></description>
										<content:encoded><![CDATA[<p class="qtranxs-available-languages-message qtranxs-available-languages-message-de">Leider ist der Eintrag nur auf <a href="https://blog.blackbam.at/en/tag/scripts/feed/" class="qtranxs-available-language-link qtranxs-available-language-link-en" title="English">Amerikanisches Englisch</a> verfügbar.</p><p><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fblog.blackbam.at%2Fde%2F2011%2F06%2F27%2Fwordpress-improved-user-search-first-name-last-name-email-in-backend%2F&#038;title=%28English%29%20WordPress%20improved%20user%20search%20%28first%20name%2C%20last%20name%2C%20email%29%20in%20backend" data-a2a-url="https://blog.blackbam.at/de/2011/06/27/wordpress-improved-user-search-first-name-last-name-email-in-backend/" data-a2a-title="(English) WordPress improved user search (first name, last name, email) in backend"><img src="https://static.addtoany.com/buttons/share_save_120_16.png" alt="Share"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.blackbam.at/de/2011/06/27/wordpress-improved-user-search-first-name-last-name-email-in-backend/feed/</wfw:commentRss>
			<slash:comments>74</slash:comments>
		
		
			</item>
		<item>
		<title>Scroll a very big database table with Ajax</title>
		<link>https://blog.blackbam.at/de/2010/10/18/scroll-a-very-big-database-table-with-ajax/</link>
					<comments>https://blog.blackbam.at/de/2010/10/18/scroll-a-very-big-database-table-with-ajax/#respond</comments>
		
		<dc:creator><![CDATA[Blackbam]]></dc:creator>
		<pubDate>Mon, 18 Oct 2010 16:56:41 +0000</pubDate>
				<category><![CDATA[JavaScript / Ajax]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[very big table]]></category>
		<guid isPermaLink="false">http://www.blackbam.at/blog/?p=885</guid>

					<description><![CDATA[This tutorial shows how it is possible to scroll a very big database table using Asynchronous Javascript and JSON with an easy extendable and customizable script. We created four files - index.html (contains the Ajax table), functions.js (contains all the Ajax work), suggest.php (the server-side work), and entries.php (server-side script for instantiating number of table [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>This tutorial shows how it is possible to scroll a very big database table using Asynchronous Javascript and JSON with an easy extendable and customizable script. We created four files - index.html (contains the Ajax table), functions.js (contains all the Ajax work), suggest.php (the server-side work), and entries.php (server-side script for instantiating number of table values). There is also a dummy file to create and fill the database with values fast, which is called "createTable.php".</p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><strong><a href="http://www.blackbam.at/examples/ajaxdb/">Watch the example here</a></strong></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p>Function: When a user types in a certain pattern, the twenty nearest values are fetched from the database. When a user scrolls the table, the values are fetched depending on the position of the cursor or by fetching the next or previous entries from the database.</p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<div class="code_title">index.html</div>
<pre lang="html4strict">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
    <head>
        <title>Scrolling a very big database table</title>
        <script type="text/javascript" src="functions.js">
        </script>
        <style type="text/css">
            #gscr div {
                height: 1px;
                width: 1px;
            }
			
			#result tr td {
				cursor:pointer;
			}
        </style>
    </head>
    <body>
        <h2>Demonstration</h2>
        <p>Shows how to get an fast and precise result from scrolling a big table using Asynchronous Javascript with JSON.</p>
        <br/>
		<div id="loading" style="display:block;"><img src="loader.gif" /></div>
		<div id="container" style="display:none;">
	        <div id="the_table">
	            <div id="result_area" style="float:left; width:200px;">
	                <table id="result"> </table>
	            </div>
	            <div style="float:left;">
	                <a href="javascript:scroll('u')">previous 20</a>
	                <div id="gscr" style="width:40px; height:400px; overflow-y:scroll;" onmouseup="javascript:scrAction();"> </div>
	                <a href="javascript:scroll('d')">next 20</a>
	            </div>
				<div id="collection" style="float:left; padding-left:80px;">
					<h4>Collected values</h4>
				</div>
				<div style="clear:both;"></div>
	        </div><!-- the_table div -->
	        <br/>
			<p>Search for a specific pattern:</p>
			<input type="text" id="suggest_field" onkeyup="javascript:make_suggestion(this.value,'string');"/>
			<input type="hidden" id="allEntries" value="" />
			<input type="hidden" id="mode" value="number" />
			<input type="hidden" id="running" value="no" />
			<input type="hidden" id="current" value="1" />
		</div><!-- container div -->
        <script type="text/javascript">
            make_suggestion("", "entries");
        </script>
    </body>
</html>
</pre>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<div class="code_title">functions.js</div>
<pre lang="javascript">
/**
 * @author Blackbam
 */
var XMLHTTP = null;
var onetime = 1;
var onetime2 = 1;

// Server-Request for data depending on parameters
function make_suggestion(compValue, how){

    if (how == "string") {
        document.getElementById("mode").value = "string";
    }

    // instantiate browser-independent XMLHttpRequest
    if (window.XMLHttpRequest) {
        XMLHTTP = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
            try {
                XMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (ex) {
                try {
                    XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (ex) {
                }
            }
        }
	
    if (how == "entries") {
		// Get the whole number of entries when loading the page
		var scrHeight = document.getElementById("gscr").style.height;
        XMLHTTP.open("GET", "entries.php?height="+scrHeight);
        XMLHTTP.onreadystatechange = setEntries;
    } else {
        if (how == "string" && compValue == "") {
            document.getElementById("current").value = 1;
			numeric_request();
        } else {
                XMLHTTP.open("GET", "suggest.php?compValue=" + compValue + "&how=" + how);
                XMLHTTP.onreadystatechange = MyRequestExecute;
        }
    }
    XMLHTTP.send(null);
}

// is called when the Server-Request reaches a new state
function MyRequestExecute(){
	// the answer from the server is hier when the XMLHTTP.readyState = 4
    if (XMLHTTP.readyState == 4) {
		
		// remove old entries from the table
		var cell = document.getElementById("result");
		if ( cell.hasChildNodes() ){
		    while ( cell.childNodes.length >= 1 ) {
		        cell.removeChild( cell.firstChild );       
		    } 
		}
		
		// Create a valid table content with the Jason-object
		var obj=eval('('+XMLHTTP.responseText+')');
		for(val in obj){
			var tr = cell.appendChild(document.createElement("tr"));
			var td = tr.appendChild(document.createElement("td"));
			td.setAttribute("onclick","javascript:collect(this.firstChild.nodeValue);");
			td.appendChild(document.createTextNode(obj[val]));
		}
		
		// if first time, display the table to the user now
		if (onetime2 == 1) {
			document.getElementById("loading").style.display = "none";
			document.getElementById("container").style.display = "block";
			onetime2 = 0;
		}
    }
}

// this function is called when the page is loaded first
function setEntries(){
	
	// when the server answers the number of table entries
    if (XMLHTTP.readyState == 4) {
		if (onetime == 1) {
			onetime = 0;
			var entries = XMLHTTP.responseText;
			document.getElementById("allEntries").value = entries;
			
			// a little hack: create as many 1px-divs as there are entries in the database
			for (i = 0; i <= entries; i++) {
				document.getElementById("gscr").appendChild(document.createElement("div"));
			}
			
			// now fill the table
			numeric_request();
		}
    }
}

// is used if a user scrolls the table using the scrollbar
function scrAction() {
	// alert(document.getElementById("gscr").scrollTop+1);
	document.getElementById("current").value=(document.getElementById("gscr").scrollTop+1);
	numeric_request();
}

// is called every time a user scrolls the table
function numeric_request(){
	document.getElementById("mode").value = "number";
	var startentry = document.getElementById("current").value;
	make_suggestion(startentry, "number");
}

// is called if a user scrolls the table by previous and next entries
function scroll(wohin){
	
	var curEntr = document.getElementById("current");
	var scrollbar = document.getElementById("gscr");

	var scrval = parseInt(curEntr.value);
	var allEntries = parseInt(document.getElementById("allEntries").value);
	
	if(wohin == 'u'){
		if(scrval < 20) {
			curEntr.value = 1;
			scrollbar.scrollTop = 1;
		} else {
			curEntr.value = (scrval-19);
			scrollbar.scrollTop = (scrval-19);
		}
	} else {
		var scrHeight = parseInt(document.getElementById("gscr").style.height)-2;
		var whole = parseInt(allEntries-scrHeight);
		if(scrval >= whole) {
			curEntr.value = whole;
			scrollbar.scrollTop = whole;
		} else {
			curEntr.value = (scrval+19);
			scrollbar.scrollTop = (scrval+19);
		}
	}
	numeric_request();
}

// stores the values the user has clicked
function collect(value) {
	document.getElementById("collection").appendChild(document.createTextNode(value));
	document.getElementById("collection").appendChild(document.createElement("br"));
}
</pre>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<div class="code_title">suggest.php</div>
<pre lang="php">
<?php
/* Strings 2 compare */
$suggest_string = $_GET["compValue"];
$how = $_GET["how"];

/* MySQL connection */
$hostname = 'localhost';
$username = 'root';
$password = '';

// SQL-Statement
if ($how == "number") {
    $sql = "SELECT * FROM meta ORDER BY random_word LIMIT ".$suggest_string.",20";
} else {
    $sql = "SELECT * FROM meta WHERE random_word LIKE '".$suggest_string."%' ORDER BY random_word LIMIT 20";
}

$result_string = array();
$i = 0;

try {
    // Datenbankverbindung
    $db = new PDO("mysql:host=$hostname;dbname=meta", $username, $password);

    // Ergebnisse holen
    foreach ($db->query($sql) as $row) {
        $result_string[$i] = $row['random_word'];
		$i++;
    }

}
catch(PDOException $e) {
    echo $e->getMessage();
}

echo json_encode($result_string);

?>
</pre>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<div class="code_title">entries.php</div>
<pre lang="php">
<?php
/* MySQL connection */
$hostname = 'localhost';
$username = 'root';
$password = '';

// höhe des scrolldivs hinzurechnen
$height = $_GET["height"]-22;

$sql = "SELECT * from meta";

$result_string = "";

try {
    // database connection
    $db = new PDO("mysql:host=$hostname;dbname=meta", $username, $password);

    // get results
    $result_string = count($db->query($sql)->fetchAll())+$height;

}
catch(PDOException $e) {
    echo $e->getMessage();
}

echo $result_string;

?>
</pre>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<div class="code_title">The dummy - createTable.php</div>
<pre lang="php">
/*** mysql hostname ***/
$hostname = 'localhost';

/*** mysql username ***/
$username = 'root';

/*** mysql password ***/
$password = '';

try {
    $db = new PDO("mysql:host=$hostname;dbname=meta", $username, $password);

    for ($i = 0; $i < 12000; $i++) {
        $random_word = randWord();
        try {
            $db->exec("INSERT INTO meta(random_word) VALUES ('$random_word')");
        }
        catch(PDOException $e) {
            echo "Eintrag ".$random_word." konnte nicht geschrieben werden. <br/>";
        }
    }

}
catch(PDOException $e) {
    echo $e->getMessage();
}

function randWord() {
    $length = rand(5, 15);
    $characters = "abcdefghijklmnopqrstuvwxyz";
    $string = "";

    for ($p = 0; $p < $length; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters))];
    }

    return $string;
}

echo "It is finally done without crashing the server!";

?>
</pre>
<p><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fblog.blackbam.at%2Fde%2F2010%2F10%2F18%2Fscroll-a-very-big-database-table-with-ajax%2F&#038;title=Scroll%20a%20very%20big%20database%20table%20with%20Ajax" data-a2a-url="https://blog.blackbam.at/de/2010/10/18/scroll-a-very-big-database-table-with-ajax/" data-a2a-title="Scroll a very big database table with Ajax"><img src="https://static.addtoany.com/buttons/share_save_120_16.png" alt="Share"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.blackbam.at/de/2010/10/18/scroll-a-very-big-database-table-with-ajax/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
