让我们烤点甜饼(做饼图) 成功地安装了PHP地Shockwave Flash支持后,就可以用PHP创建Shockwave文件了。学习的最好方法就是直接跳到程序去,所以下面就让我们看看程序。第一个文件包括怎样使用类的示例代码,同时也显示了如何将一个Flash文件嵌入到HTML文档中。 <?php // include class needed for flash graph include("class.pie.flash.php"); mysql_connect ("localhost", "root", ""); $query = "SELECT DISTINCT city_name, COUNT(city_id)     FROM city     GROUP BY city_name;"; $result = mysql_db_query ("hermes",$query); while ($row = mysql_fetch_array ($result)) {     $city_counts[] = $row["COUNT(city_id)"];     $city_names[] = $row["city_name"]; } mysql_free_result ($result); // Instantiate new object $graph = new flash_pie($city_counts, "city.swf"); // set graph title (should not exceed about 25 characters) $graph->pie_title("City Results", 30); // set graph legend $graph->pie_legend($city_names); // show graph $graph->show(); // free resources $graph->close(); ?>  <html> <head> <meta http=equiv="Expires" content="Fri, Jun 12 1981 08:20:00 GMT"> <meta http=equiv="Pragma" content="no-cache"> <meta http=equiv="Cache-Control" content="no-cache"> <meta http=equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor=white> <div align=center> <embed src="city.swf" quality=high loop=false pluginspage="http://www.macromedia.com/ shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width=600 height=300></embed> </div> </body> </html>  <?php class flash_pie { // class variables // setup some global colors var $r_arr = array(0.1,  1, 0, 1, 0, 1, 0.388235294, 0.4, 0.388235294, 0.929411765); var $g_arr = array(1,    0, 0, 1, 1, 0, 0.8,         0.4, 0.8,         0.439215686); var $b_arr = array(0.25, 0, 1, 0, 1, 1, 1,           0.4, 1,           0.043137255);  var $percents; function flash_pie($values, $this_file) { //begin constructor     // to write out code directly to browser, set content header and use "php://stdout"     //swf_openfile ("php://stdout", 700, 250, 30, 1, 1, 1);     //header("Content-type: application/x-shockwave-flash");     swf_openfile ($this_file, 1000, 450, 30, 1, 1, 1);     // set up viewport for flash movie     swf_ortho2 (-400, 300 , -90, 250);      // choose the font we will use for pie graph     swf_definefont(10, "Mod");     // get sum of array for percents/slices     while(list($key,$val) = each($values)) {          $sum = $sum + $val;      }     for ($i=0; $i<count($values); $i++) {         // calculate how big they need to be and then         // draw all of our slices         if ($i == 0) {              // setup parameters for first slice             $begin = 0;             $val = $values[$i]/$sum;             $end = $val*360;             swf_translate(-200, 0, 0);         } else {             // setup parameters for every other slice             $begin = $end;             $val = $values[$i]/$sum;             $end = $end + $val*360;         }         // function call to add slice         $objID = 1+$i*10;         $this->show_slice($i, $objID, $begin, $end);         // put together percent array for all labels         $this->percents[$i] = round($values[$i]/$sum*100);                } }  //end flash_pie function show_slice($i, $objID, $begin, $end) {     // draws a slice and places it in our frame     swf_addcolor($this->r_arr[$i], $this->g_arr[$i], $this->b_arr[$i], 1);     swf_startshape($objID);     swf_shapefillsolid(0, 0, 0, 1);     swf_shapearc(0, 0, 100, $begin, $end);     swf_shapecurveto(0, 0, 0, 0);     swf_endshape($objID);     swf_pushmatrix();     swf_placeobject($objID, 1);     swf_popmatrix();     swf_showframe(); } function pie_legend($labels) {     // draws the legend and labels and places it in our frame     for ($i=0; $i<count($labels); $i++) {         swf_addcolor($this->r_arr[$i], $this->g_arr[$i], $this->b_arr[$i], 1);         swf_definerect($i+1000, 1, 0, 20, 20, 0);         if ($i == 0) {             swf_translate(120, 75, 0);         } else {             swf_translate(0, 20, 0);         }         swf_placeobject($i+1000, 1);         swf_translate(0, 5, 0);         unset($label);         $label = $labels[$i];         $label .= " (";         $label .= $this->percents[$i];         $label .= " percent)";         if ($i==0) {             $width = (swf_textwidth($label)/4)+30;         } else {             $width = round(swf_textwidth($label)/2)+30;         }         $this->pie_text($i-1000, "$label", 15, $width, 0);         swf_translate(-$width, 0, 0);     }     swf_translate($width, 30*count($labels), 0); }                function pie_text($id, $text, $size, $x, $y) {     // simple function to draw text ($text) at ($x,$y) with font size ($size)     // set color of text to black     swf_addcolor(0,0,0,0);     // set font size and slant     swf_fontsize($size);     swf_fontslant(0);     // define, position and place text in frame     swf_definetext($id, "$text", 1);     swf_translate($x, $y, 0);     swf_placeobject($id, 1); } function pie_title($text, $size) {     // simple function to draw title and set lineup     // $text should not exceed about 25 characters     $this->pie_text(99, $text, $size, 0, 150);     swf_translate(0, -300, 0); }        function show() {     // show the frame     swf_showframe(); } function close() {     // flush our buffer and return movie     $data = swf_closefile(1); }                } // end class flash_pie ?>      注意,你可以将生成的SWF文件直接返回到浏览器中,而不必一定要像我一样把它写到一个文件中。这可能对测试来说是有用的,但你可能很少用到一个Flash文件,更多的时候你可能想把Flash文件嵌入到HTML文档中。如果你选择直接把Flash文件输出到浏览器中,你可以如下设置header content 类型:    header("Content-type: application/x-shockwave-flash") 并把swf_openfile(filename",...)改成swf_openfile("php://stdout",...) 更多信息的链接:     http://www.php.net/manual/ref.swf.php  关于swf_* PHP函数的说明     http://reality.sgi.com/grafica/flash/  下载PHP的swf库     http://openswf.org                     更多Flash工具和信息     http:

MySQL注入的意图是接管网站数据库并窃取信息。常见的开源数据库,如MySQL,已经被许多网站开发人员用来储存重要信息,如密码,个人信息和管理信息。 MySQL之所以流行,是因为它与最流行的服务器端脚本语言PHP一起使用。而且,PHP是主导互联网的Linux- Apache服务器的主要语言。因此,这意味着黑客可以很容易地利用PHP就像Windows的间谍软件一样。 黑客向一个无担保的网页表单输入大量恶意代码(通过下拉菜单,搜索框,联系表单,查询表单和复选框)。 恶意代码将被送到MySQL数据库,然后“注入”。要查看这个过程,首先考虑以下基本的MySQL SELECT查询语句: SELECT * FROM xmen WHERE username = ‘wolverine' 此查询会向有“xmen”表的数据库要求返回某一段MySQL中用户名为“wolverine”的数据。 在Web表单中,用户将输入wolverine,然后这些数据将被传到MySQL查询。 如果输入无效,黑客还有其他方法控制数据库,如设置用户名: ‘ OR '‘='‘ 你可能认为使用正常的PHP和MySQL句法执行输入是安全的,因为每当有人输入恶意代码,他们将会得到一个“无效的查询”的消息,但事实并非如此。黑客很聪明,且因为涉及数据库清理和重设管理权限,任何一个安全漏洞都不容易纠正。 两种对MySQL注入攻击的常见误解如下: 1.网管认为恶意注入可用防病毒软件或反间谍软件清理。事实是,这种类型的感染利用了MySQL数据库的弱点。它不能简单地被任何反间谍软件或防病毒程序删除。 2. MySQL注入是由于复制了从另一台服务器或外部来源被感染的文件。事实并非如此。这种类型的感染是由于有人将恶意代码输入到网站不受保护表单,然后访问数据库。MySQL注入可通过删除恶意脚本清除掉,而不是使用防病毒程序。 用户输入验证流程 备份一个清洁的数据库,并放置在服务器外。输出一套MySQL表并保存在桌面。 然后转到服务器,先暂时关闭表单输入。这意味着表单不能处理数据,网站被关闭了。 然后启动清理进程。首先,在您的服务器上,清理遗留的混乱的MySQL注入。更改所有的数据库,FTP和网站的密码。 在最坏的情况下,如果你清理迟了,你可以再次检查在您服务器上运行的隐藏程序。这些隐藏程序是黑客安装的木马。将其完全删除并更改所有FTP权限。扫描服务器上所有木马程序和恶意软件。 当您修改PHP脚本程序时,将处理表单数据。防止MySQL注入的一个好办法是:连用户数据也不信任。用户输入验证对于防止MySQL注入是相当重要的。 设计一个过滤器筛选出用户输入,以下是几点提示: 1.输入到表单的是数字。你可以通过测试它等于或大于0.001 (假设你不接受一个零)验证它是不是数字。 2.如果是Email地址。验证其是否由允许的字符组合构成,如“ @ ” ,A-Z,a-z或一些数字。 3.如果是人名或用户名。可以通过是否包含任何非法字符验证它,如and和*,是可用于SQL注入的恶意字符。 验证数字输入 下面的脚本验证了是否输入一个从0.001至无限大的有效数字。值得一提的是,在一个PHP程序中,甚至可以允许使用一定范围内的数字。使用此验证脚本可确保输入到表单的只是一个数字。 假设在程序中有三个数字变量;您需要将它们进行验证,我们将它们命名num1 , num2和num3: 复制代码 代码如下://Validate numerical input   if($_POST['num1'] >= 0.001 && $_POST['num2'] >= 0.001 && $_POST['num3'] >= 0.001)   {   }   else   {   }   ?> And条件可被延长到能容纳超过三个数字。所以,如果你有10个,您将只需要扩展AND语句。 这可以用来验证一个只接受数字的表单,如合同数量,许可证号码,电话号码等。 验证文字和邮件地址的输入 以下可以用于验证诸如用户名,名字以及电子邮件地址的表单输入: 复制代码 代码如下://Validate text input   if (! preg_match('/^[[email protected],'s]*$/i',$_POST['name']))   {   }   else   if ($empty==0)   {   }   else   {   }   ?> 该验证脚本的一个优点是,它不接受空白输入。一些恶意用户还通过空白投入操纵数据库。使用上面的脚本,只验证一个文字变量, “ $name”。这意味着,如果有三个文字变量,你可以分别对每个变量设置一个验证脚本,以确保每一个变量都在进入数据库前通过了审查。

一个简单的自动发送邮件系统(三)     这里介绍php和mysql结合起来实用。如何从mysql数据库中提取数据。     好,我们已经成功的完成了我们的要求,很多的数据已经存在了数据库中,现在的问题是,如何查询这些数据,得到有用的结果呢? 在下面的程序中,我们将选择"apple"的用户输出。 -------------------------------------------------------- <? /* 声明一些必须的变量*/ $hostname = "yourhostname"; $username = "yourusername"; $password = "yourpassword"; $userstable = "information";  /* 使用MySQL建立的数据表存取信息  */ $dbName = "yourdbname"; /* 与数据库连接*/ MYSQL_CONNECT($hostname, $username, $password) OR DIE("Unable to connect to database"); @mysql_select_db( "$dbName") or die( "Unable to select database");  /* 选择所有“apple”用户*/ $query = "SELECT * FROM $userstable WHERE (preference LIKE 'Apples') "; $result = MYSQL_QUERY($query); /* 统计有多少这样的用户*/ $number = MYSQL_NUMROWS($result); /* 输出结果*/ $i = 0; IF ($number == 0) :     PRINT "<CENTER><P>Nobody in the database prefers Apples!</CENTER>"; ELSEIF ($number > 0) :     PRINT "<CENTER><P>Users preferring Apples: $number<BR><BR>";     WHILE ($i < $number):         $name = mysql_result($result,$i,"name");         $email = mysql_result($result,$i,"email");         PRINT "Visitor $name likes Apples.<BR>";         PRINT "Email address: $email.";         PRINT "<BR><BR>";         $i++;     ENDWHILE;         PRINT "</CENTER>"; ENDIF; ?> -------------------------------------------------------- 将他存为apples.php3 解释说明:一些新用到的函数: 1、$number = MYSQL_NUMROWS($result); 语法:int mysql_num_rows(string result); ·result   从函数mysql_query中返回的数组记录。 ·返回存在$result中的行数。 2、$name = MYSQL_RESULT($result,$i,"name");     语法: int mysql_result(int result, int i, column); 这个函数将分离记录,将每一条赋值给变量。 ·$result是指中的数组结果。 ·$i是指数据的行。 ·column是指mysql数据表中列的名字。也可以使用变量。    因此使用一个简单的while循环,我们就能很容易的将数据输出给浏览器。

复制代码 代码如下:<?phpfunction encode_pass($tex,$key,$type="encode",$expiry=0){    $chrArr=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',                  'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',                  '0','1','2','3','4','5','6','7','8','9');    if($type=="decode"){        if(strlen($tex)<14)return false;        $verity_str=substr($tex, 0,8);        $tex=substr($tex, 8);        if($verity_str!=substr(md5($tex),0,8)){            //完整性验证失败            return false;        }        }    $key_b=$type=="decode"?substr($tex,0,6):$chrArr[rand()%62].$chrArr[rand()%62].$chrArr[rand()%62].$chrArr[rand()%62].$chrArr[rand()%62].$chrArr[rand()%62];    $rand_key=$key_b.$key;        //设置时间选项    $modnum=0;$modCount=0;$modCountStr="";    if($expiry>0){        if($type=="decode"){            $modCountStr=substr($tex,6,1);            $modCount=$modCountStr=="a"?10:floor($modCountStr);            $modnum=substr($tex,7,$modCount);            $rand_key=$rand_key.(floor((time()-$modnum)/$expiry));        }else{            $modnum=time()%$expiry;            $modCount=strlen($modnum);            $modCountStr=$modCount==10?"a":$modCount;            $rand_key=$rand_key.(floor(time()/$expiry));                    }        $tex=$type=="decode"?base64_decode(substr($tex, (7+$modCount))):"xugui".$tex;    }else{        $tex=$type=="decode"?base64_decode(substr($tex, 6)):"xugui".$tex;    }    $rand_key=md5($rand_key);    $texlen=strlen($tex);    $reslutstr="";    for($i=0;$i<$texlen;$i++){        $reslutstr.=$tex{$i}^$rand_key{$i%32};    }    if($type!="decode"){        $reslutstr=trim(base64_encode($reslutstr),"==");        $reslutstr=$modCount?$modCountStr.$modnum.$reslutstr:$reslutstr;        $reslutstr=$key_b.$reslutstr;        $reslutstr=substr(md5($reslutstr), 0,8).$reslutstr;    }else{        if(substr($reslutstr,0, 5)!="xugui"){            return false;        }        $reslutstr=substr($reslutstr, 5);    }    return $reslutstr;}$psa=encode_pass("woshi ceshi yong de ","taintainxousad","encode",120);echo $psa;echo "\r\n解密:";echo encode_pass($psa,"taintainxousad",'decode',120);?>该函数具有时效性,只要过期就不能解密!通过时间动态加密 加密后数据多样化,

在数组中搜索一个特定值,如果找到返回TRUE否则返回FALSE boolean in_array(mixed needle,array haystack[,boolean strict]) 在数组中找到一个指定的健,如果找到返回TRUE否则返回FALSE boolean array_eky_exists(mixed key,array array) 在数组中搜索一个特定值,如果找到返回TRUE否则返回FALSE boolean array_search(mixed needle,array haystack[,boolean strict]) 获取数组所有键组成的新数组 array array_keys(array array[,mixed search_value]) 获取数组所有值组成的新数组 array array_values(array array) 确定数组大小 integer count(array array[,int mode]) integer sizeof(array array[,int mode]) 统计数组元素出现频率 array array_count_values(array array) 删除数组中重复的值,返回一个由唯一值组成的数组 array array_unique(array array) 逆置数组元素顺序,preserve_key如果为TRUE则数组键值顺序不变 array array_reverse(array array[,boolean preserve_key]) 置换数组键和值 array array_flip(array array) 数组顺序排序,sort_flags参数可选,默认行为 SORT_NUMBERIC,按数值排序,对整数或浮点数排序很有用 SORT_REGULAR,按照ASCII值排序 SORT_STRING,按接近人所认识的正确顺序排序 asort函数键值顺序不变 void sort(array array[,int sort_flags]) void asort(array array[,int sort_flags]) 数组逆序排序,sort_flags参数可选,默认行为 SORT_NUMBERIC,按数值排序,对整数或浮点数排序很有用 SORT_REGULAR,按照ASCII值排序 SORT_STRING,按接近人所认识的正确顺序排序 arsort函数键值顺序不变 void rsort(array array[,int sort_flags]) void arsort(array array[,int sort_flags]) 数组自然排序 void natsort(array array) 不区分大小写的自然排序 void natcasesort(array array) 健键值对数组排序 boolean ksort(array array[,int sort_flags]) 健键值对数组逆序排序 boolean krsort(array array[,int sort_flags]) 根据用户自定义顺序排序 void usort(array array,callback function_name) 将数组合并到一起,返回一个联合的数组。array_merge后面覆盖前面,array_merge_recursive合并在一起 array array_merge(array array1[array array2……])//一个以上 array array_merge_recursive(array array1,array array2[,array ……])//两个以上 键和值组成新的数组 array array_combine(array key,array value) 返回数组一部分,从健offset开始,到offse+length位置结束 array array_slice(array array, int offset [,int length]) 删除从offset开始到offset+length结束的所有元素,并以数组的形式返回删除的元素 array array_splice(array, int offset [,int length[,array peplacement]]) 求数组的交集,键值为第一个数组中键值 array array_intersect(array array1,array array2[,arrayN……]) 求数组的交集包含了键值相等,键值为第一个数组中键值 array array_intersect_assoc(array array1,array array2[,arrayN……]) 求数组的差集,第一个数组在其他数组没有的值 array array_diff(array array1,array array2[,arrayN……]) 求数组的差集,第一个数组在其他数组没有的值包含了键值相等 array array_diffassoc(array array1,array array2[,arrayN……]) 返回数组中一个或多个键值 mixed array_rand(array array[,int num_entries]) 随即洗牌函数 void shuffle(array input_array) 对数组中的值求和 mixed array_sum(array array); 将数组分解为一个多维数组,它包含了size个元素 array array_chunk(array array, int size [,

分类:腾博会官方网

时间:2016-07-01 05:19:03