<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[一个用GTK与MySQL 数据库管理新闻的程序]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sun, 29 Jun 2008 10:29:30 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	一个用GTK与MySQL 数据库管理新闻的程序<br/><br/>1、 数据库为 gtk_php<br/><br/>create table code_news<br/>(<br/>id int(9) not null default 0 auto_increment,<br/>title char(255) not null,<br/>author char(30) not null,<br/>author_contact char(75) not null,<br/>news text,<br/>PRIMARY KEY (id),<br/>UNIQUE ID (id)<br/>);<br/><br/>2 、GTK 程序部分，用于图形化管理新闻 - admin.php<br/><br/>CODE:<br/>[Copy to clipboard]<br/>#!/usr/local/bin/php -q <br/>&lt;? <br/><br/>if(strtoupper(substr(PHP_OS, 0, 3)) == &#039;WIN&#039;) <br/>dl(&#039;php_gtk.dll&#039;); <br/>else <br/>dl(&#039;php_gtk.so&#039;); <br/><br/><br/>function destroy() <br/>{ <br/>Gtk::main_quit(); <br/>} <br/><br/>function handle_select($clist,$row,$column,$event) <br/>{ <br/>global $ret, $entry, $SELECTED_ID; <br/>$id = $clist-&gt;get_text($row,0); <br/>$SELECTED_ID = $id; <br/>} <br/><br/>function add_record() <br/>{ <br/>global $entry, $SELECTED_ID, $fields, $API_URL, $USERNAME, $PASSWORD; <br/>while(list($f,$l) = each($fields)) <br/>{ <br/>$$f = $entry[$f]-&gt;get_text(); <br/>} <br/>$news = $entry[&#039;news&#039;]-&gt;get_chars(0,$entry[&#039;news&#039;]-&gt;get_length()); <br/><br/>$file = $API_URL.&#039;?a=add&amp;p=&#039;.$PASSWORD.&#039;&amp;u=&#039;.$USERNAME. <br/>&#039;&amp;news[title]=&#039;.urlencode($title).&#039;&amp;news[author]=&#039;.urlencode($author). <br/>&#039;&amp;news[author_contact]=&#039;.urlencode($author_contact). <br/>&#039;&amp;news[news]=&#039;.urlencode($news); <br/><br/>$fp = fopen($file,&#039;r&#039;); <br/>if($fp) <br/>{ <br/>$contents = trim(fread($fp,4096)); <br/>if(!eregi(&quot;^0:[A-Z]*&quot;,$contents)) <br/>{ <br/>clear_entries(); <br/>update_clist(); <br/>} <br/>else <br/>{ <br/>echo &quot;n$contentsn&quot;; <br/>} <br/>} <br/>reset($fields); <br/>} <br/><br/>function delete_record() <br/>{ <br/>global $entry, $SELECTED_ID, $USERNAME, $PASSWORD, $API_URL; <br/>$file = $API_URL.&#039;?u=&#039;.$USERNAME.&#039;&amp;p=&#039;.$PASSWORD.&#039;&amp;a=del&amp;id=&#039;.$SELECTED_ID; <br/>$fp = fopen($file,&#039;r&#039;); <br/>if($fp) <br/>{ <br/>$contents = trim(fread($fp,4096)); <br/>if(!eregi(&quot;^0:[A-Z]*&quot;,$contents)) <br/>{ <br/>update_clist(); <br/>} <br/>else <br/>{ <br/>echo &quot;n$contentsn&quot;; <br/>} <br/>} <br/>} <br/><br/>function update_record() <br/>{ <br/>global $entry, $SELECTED_ID; <br/>echo &quot;n************************* NOT IMPLEMENTED *************************n&quot;; <br/>echo &quot;nUPDATE RECORD : $SELECTED_IDn&quot;; <br/>echo &quot;n************************* NOT IMPLEMENTED *************************n&quot;; <br/>} <br/><br/>function update_clist() <br/>{ <br/>global $clist, $API_URL, $PASSWORD, $USERNAME, $ret; <br/>// Grab everything from our API <br/>$fp = fopen($API_URL.&#039;?a=get&amp;p=&#039;.$PASSWORD.&#039;&amp;u=&#039;.$USERNAME,&#039;r&#039;); <br/>if($fp) <br/>{ <br/>$contents = fread($fp,4096); <br/>if(!ereg(&quot;^0:[A-Z]*&quot;,$contents)) <br/>{ <br/>$clist-&gt;clear(); <br/>$ret = unserialize(trim($contents)); <br/>$clist-&gt;freeze(); <br/>while(list($id,$info) = each($ret)) <br/>{ <br/>// $info = $ret[$i]; <br/>$row = array($info[&#039;id&#039;],$info[&#039;author&#039;],$info[&#039;title&#039;]); <br/>$clist-&gt;append($row); <br/>} <br/>$clist-&gt;thaw(); <br/>} <br/>else <br/>{ <br/>echo &quot;nERROR: &quot;.$contents.&quot;n&quot;; <br/>} <br/>} <br/>} <br/><br/>function clear_entries() <br/>{ <br/>global $entry; <br/>$entry[&#039;title&#039;]-&gt;set_text(&#039;&#039;); <br/>$entry[&#039;author&#039;]-&gt;set_text(&#039;&#039;); <br/>$entry[&#039;author_contact&#039;]-&gt;set_text(&#039;&#039;); <br/>// echo $entry[&#039;news&#039;]-&gt;get_text(); <br/>// $foo = $entry[&#039;news&#039;]-&gt;get_chars(0,$entry[&#039;news&#039;]-&gt;get_length()); <br/>// echo &quot;n&quot;.$foo.&quot;n&quot;; <br/>$entry[&#039;news&#039;]-&gt;backward_delete($entry[&#039;news&#039;]-&gt;get_length()); <br/>} <br/><br/>function delete_event() <br/>{ <br/>return false; <br/>} <br/><br/>$window = &amp;new GtkWindow(); <br/>$window-&gt;connect(&#039;destroy&#039;,&#039;destroy&#039;); <br/>$window-&gt;set_border_width(10); <br/><br/>$box = &amp;new GtkVBox(); <br/>$window-&gt;add($box); <br/>$box-&gt;show(); <br/><br/>$fields = array( <br/>title =&gt; &#039;Title: &#039;, <br/>author =&gt; &#039;Author: &#039;, <br/>author_contact =&gt; &#039;Author Contact: &#039;); <br/><br/>// Set up our regular text fields <br/>while(list($f,$l) = each($fields)) <br/>{ <br/>$vbox = &amp;new GtkVBox(); <br/>$box-&gt;pack_start($vbox,false,false); <br/>$vbox-&gt;show(); <br/>$vbox-&gt;set_border_width(3); <br/><br/>$hbox = &amp;new GtkHBox(); <br/>$vbox-&gt;pack_start($hbox,false,false); <br/>$hbox-&gt;show(); <br/><br/>$label = &amp;new GtkLabel(&quot;$l&quot;); <br/>$label-&gt;set_usize(150,10); <br/>$hbox-&gt;pack_start($label,false); <br/>$label-&gt;show(); <br/><br/>$entry[$f] = &amp;new GtkEntry(); <br/><br/>$hbox-&gt;pack_start($entry[$f],false); <br/>$entry[$f]-&gt;show(); <br/>} <br/><br/>$vbox = &amp;new GtkVBox(); <br/>$box-&gt;pack_start($vbox,false,false); <br/>$vbox-&gt;show(); <br/>$vbox-&gt;set_border_width(3); <br/><br/>$label = &amp;new GtkLabel(&#039;News:&#039;); <br/>$vbox-&gt;pack_start($label); <br/>$label-&gt;show(); <br/><br/>$entry[&#039;news&#039;] = &amp;new GtkText(); <br/>$entry[&#039;news&#039;]-&gt;set_editable(TRUE); <br/>$vbox-&gt;pack_start($entry[&#039;news&#039;]); <br/>$entry[&#039;news&#039;]-&gt;show(); <br/><br/>$buttons = array( <br/>Add =&gt; &#039;add_record&#039;, <br/>Delete =&gt; &#039;delete_record&#039;, <br/>Update =&gt; &#039;update_record&#039;, <br/>Clear =&gt; &#039;clear_entries&#039;, <br/>Refresh =&gt; &#039;update_clist&#039;, <br/>Quit =&gt; &#039;destroy&#039;); <br/><br/>$hbox = &amp;new GtkHBox(); <br/>$hbox-&gt;set_border_width(3); <br/>$vbox-&gt;pack_start($hbox,false,false); <br/>$hbox-&gt;show(); <br/><br/>while(list($l,$f) = each($buttons)) <br/>{ <br/>$button = &amp;new GtkButton($l); <br/>$button-&gt;connect(&#039;clicked&#039;,$f); <br/>$hbox-&gt;pack_start($button); <br/>$button-&gt;show(); <br/>} <br/><br/>$scrolled_win = &amp;new GtkScrolledWindow(); <br/>$scrolled_win-&gt;set_border_width(5); <br/>$scrolled_win-&gt;set_policy(GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); <br/><br/>$titles = array(&#039;ID&#039;,&#039;Author&#039;,&#039;Title&#039;); <br/>$clist = &amp;new GtkClist(sizeof($titles),$titles); <br/>$scrolled_win-&gt;add($clist); <br/>$clist-&gt;show(); <br/><br/>$USERNAME = md5(&#039;joestump&#039;); <br/>$PASSWORD = md5(&#039;phpgtk&#039;); <br/>$API_URL = &#039;http://127.0.0.1/gtk/news_api/api.php&#039;; <br/><br/>// Grab everything from our API <br/>update_clist(); <br/><br/>$clist-&gt;set_usize(400,300); <br/>$clist-&gt;connect(&#039;select-row&#039;,&#039;handle_select&#039;); <br/><br/>$auto_resize = array(0,1); <br/>for($i = 0 ; $i &lt; sizeof($auto_resize) ; ++$i) <br/>$clist-&gt;set_column_auto_resize($auto_resize[$i],true); <br/><br/>$vbox-&gt;pack_start($scrolled_win); <br/>$scrolled_win-&gt;show(); <br/><br/>$window-&gt;show_all(); <br/>Gtk::main(); <br/><br/>?&gt; <br/><br/>3、 用于执行管理程序，向数据库加入数据的代码 api.php <br/>&lt;? <br/><br/>// Change username and password accordingly <br/>$link = mysql_connect(&#039;192.168.192.47&#039;,&#039;root&#039;,&#039;&#039;) <br/>or die(&#039;0:DB ERROR&#039;); <br/><br/>mysql_select_db(&#039;gtk_php&#039;,$link) or die(&#039;0:DB ERROR&#039;); <br/><br/>// Create a username and password to protect the <br/>// API from outside people. THIS IS VERY IMPORTANT! <br/>$USERNAME = md5(&#039;joestump&#039;); <br/>$PASSWORD = md5(&#039;phpgtk&#039;); <br/><br/>switch($a) <br/>{ <br/>case &#039;add&#039;: <br/>// Make sure we are getting the 4 fields <br/>// we want <br/>if(sizeof($news) == 4) <br/>{ <br/>// Check the given username and password against <br/>// the ones we have - $p and $u are md5()&#039;d in the <br/>// GTK app and then sent along so no one can easily <br/>// decrypt them. <br/>if($p == $PASSWORD &amp;&amp; $u == $USERNAME) <br/>{ <br/>// extract($news); <br/>while(list($key,$val) = each($news)) <br/>$$key = addslashes($val); <br/><br/>$sql = &quot;INSERT INTO code_news <br/>(title,author,author_contact,news) <br/>VALUES <br/>(&#039;$title&#039;,&#039;$author&#039;,&#039;$author_contact&#039;,&#039;$news&#039;)&quot;; <br/><br/>$r = mysql_query($sql); <br/>if($r) <br/>{ <br/>if(mysql_affected_rows($r)) <br/>echo &#039;1:SUCCESS&#039;; <br/>else <br/>echo &#039;0:FAILURE&#039;; <br/>} <br/>} <br/>else <br/>{ <br/>echo &#039;0:BAD PASSWORD&#039;; <br/>} <br/>} <br/>else <br/>{ <br/>echo &#039;0:BAD INFO ARRAY&#039;; <br/>} <br/>break; <br/>case &#039;get&#039;: <br/>if($p == $PASSWORD &amp;&amp; $u == $USERNAME) <br/>{ <br/>$sql = &quot;SELECT * FROM code_news&quot;; <br/>$r = mysql_query($sql); <br/>if(@mysql_num_rows($r)) <br/>{ <br/>while($row = mysql_fetch_assoc($r)) <br/>$ret[$row[&#039;id&#039;]] = $row; <br/>echo serialize($ret); <br/>} <br/>else <br/>{ <br/>echo &#039;0:NO RECORDS&#039;; <br/>} <br/>} <br/>break; <br/>case &#039;del&#039;: <br/>if($id) <br/>{ <br/>if($p == $PASSWORD &amp;&amp; $u == $USERNAME) <br/>{ <br/>$sql = &quot;SELECT * FROM code_news WHERE id=&#039;$id&#039;&quot;; <br/>$r = mysql_query($sql); <br/>if(@mysql_num_rows($r)) <br/>{ <br/>$sql = &quot;DELETE FROM code_news WHERE id=&#039;$id&#039;&quot;; <br/>$r = mysql_query($sql); <br/>include(&#039;http://&#039;.$SERVER_NAME.$PHP_SELF.&#039;?u=&#039;.$USERNAME.&#039;&amp;p=&#039;.$PASSWORD.&#039;&amp;a=get&#039;); <br/>} <br/>else <br/>{ <br/>echo &#039;0:ID NOT ON RECORD&#039;; <br/>} <br/>} <br/>} <br/>else <br/>{ <br/>echo &#039;0:NO ID GIVEN&#039;; <br/>} <br/>break; <br/>default: <br/>echo &#039;0:UNRECOGNIZED ACCESS&#039;; <br/>} <br/><br/>?&gt; <br/><br/>4 、显示新闻 不用多说了- news.php&nbsp;&nbsp;<br/>&lt;? <br/><br/>// Change username and password accordingly <br/>$link = mysql_connect(&#039;192.168.192.47&#039;,&#039;root&#039;,&#039;&#039;) <br/>or die(&#039;0:DB ERROR&#039;); <br/><br/>mysql_select_db(&#039;gtk_php&#039;,$link) or die(&#039;0:DB ERROR&#039;); <br/><br/>$sql = &quot;SELECT * FROM code_news&quot;; <br/>$r = mysql_query($sql); <br/><br/>if(@mysql_num_rows($r)) <br/>{ <br/>while($row = mysql_fetch_array($r)) <br/>{ <br/>extract($row); <br/>echo &#039;&lt;b&gt;&#039;.$title.&#039;&lt;/b&gt; <br/>&#039;; <br/><br/>if(ereg(&quot;@&quot;,$author_contact)) <br/>$href = &#039;mailto:&#039;.$author_contact; <br/>else <br/>$href = $author_contact; <br/><br/>echo &#039;Posted By: &lt;a href=&quot;&#039;.$href.&#039;&quot;&gt;&#039;.$author.&#039;&lt;/a&gt; <br/>&#039;; <br/>echo $news.&#039;&lt;hr&gt;&#039;; <br/>} <br/>} <br/>else <br/>{ <br/>echo &#039;NO NEWS!&#039;; <br/>} <br/><br/>?&gt;
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 一个用GTK与MySQL 数据库管理新闻的程序]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>