存档

文章标签 ‘PHP’

提高PHP编程效率的53个要点

2011年4月23日 没有评论

用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种 可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。
1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。
2、$row[’id’] 的速度是$row[id]的7倍。
3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。
4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
5、注销那些不用的变量尤其是大数组,以便释放内存。
6、尽量避免使用__get,__set,__autoload。
7、require_once()代价昂贵。
8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。
9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。
10、函数代替正则表达式完成相同功能。
11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。
13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
14、用@屏蔽错误消息的做法非常低效,极其低效。
15、打开apache的mod_deflate模块,可以提高网页的浏览速度。
16、数据库连接当使用完毕时应关掉,不要用长连接。
17、错误消息代价昂贵。
18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
19、递增一个全局变量要比递增一个局部变量慢2倍。
20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。
24、派生类中的方法运行起来要快于在基类中定义的同样的方法。
25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在 zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
(举例如下)
if (strlen($foo) < 5) { echo “Foo is too short”$$ }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo “Foo is too short”$$ }
调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并 指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个 临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因 为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
36、并非要用类实现所有的数据结构,数组也很有用。
37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
38、当你需要时,你总能把代码分解成方法。
39、尽量采用大量的PHP内置函数。
40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。
43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);
46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
48、多维数组尽量不要循环嵌套赋值;
49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
50、foreach效率更高,尽量用foreach代替while和for循环;
51、用单引号替代双引号引用字符串;
52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
53、对global变量,应该用完就unset()掉;

分类: 编程开发 标签:

php删除文件夹及其文件夹下所有文件

2011年2月28日 没有评论

function deldir($dir) {
$dh=opendir($dir);
while ($file=readdir($dh)) {
if($file!=”.” && $file!=”..”) {
$fullpath=$dir.”/”.$file;
if(!is_dir($fullpath)) {
unlink($fullpath);
} else {
deldir($fullpath);
}
}
}

closedir($dh);

if(rmdir($dir)) {
return true;
} else {
return false;
}
}

分类: PHP 标签:

PHP关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题

2011年1月10日 没有评论

关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题

一、如何选择PHP5.3的VC9版本和VC6版本
VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本。
VC9版本是使用Visual Studio 2008编译器编译的,如果你的PHP是用IIS来架设的,那你就选择VC9版本。
二、如何选择PHP5.3的Thread Safe和Non Thread Safe版本
Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。
从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进 程的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基 础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP 扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是 PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。
为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个 进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优 势。
先从字面意思上理解,Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。
因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。
再来看PHP的两种执行方式:ISAPI和FastCGI。
ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;
而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。
分类: 编程开发 标签:

基础补习:PHP易混淆函数的区分方法及意义

2010年10月23日 没有评论

1.echo和print的区别

PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的。echo输出后没有返回值,但print有返回值,当其执行失败时返回flase。因此可以作为一个普通函数来使用,例如执行下面的代码后变量$r的值将为1。

复制PHP内容到剪贴板

PHP代码:

$r = print “Hello World”;

这意味着print可用在一些复杂的表达式中,而echo则不行。但是,因为echo语句不要求返回任何数值,所已在代码中echo语句的运行效率要略微快于print语句。

2.include与require的区别

include()与require()的功能也基本相同(包含),但在用法上也有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如在下面代码中,如果变量$a为真,则将包含文件a.php:

复制PHP内容到剪贴板

PHP代码:

if($a){

include(“a.php”);

}

而require()则和include()不同,不管$a取何值,下面的代码将把文件a.php包含进文件里:

复制PHP内容到剪贴板

PHP代码:

if($a){

require(“a.php”);

}

在错误处理方面,使用include语句,如果发生包含错误,程序将跳过include语句,虽然会显示错误信息但是程序还是会继续执行!但requre却会给你来个致命错误。

当然,从字面意思上我们也可以理解七分:requre是很强硬的请求、要求的意思。

3.require_once()和include_once()语句

题外话了,因为长的像,简单require_once()和include_once()语句分别对应于require()和 include()语句。 require_once() 和include_once()语句主要用于需要包含多个文件时,可以有效地避免把同一段代码包含进去而出现函数或变量重复定义的错误。

4.空字符串(”)和NULL的区别

PHP中空字符串和NULL都是以值为0存储的,但是他们的类型并不一样,你可以试一下echo gettype(”);和echo gettype(NULL);你会发现他们打印出来的分别是string和NULL,当然还有0也容易混淆,你可以试试echo gettype(0);打印一下类型,会发现0的类型是integer(整型),可见字符串(”)、NULL和0是“等值”但不等类型。

5.!isset和empty的区别

从字面意思上我们就可以明白:empty是判断一个变量是否为“空”,而isset 则是判断一个变量是否已经设置。但是这里有一点绝对要注意起来:当一个变量值为0,empty 认为这个变量同等于空,即相当于没有设置。比如当我们检测$id 变量的时候,当$id=0 ,用empty和isset来检测变量$id是否已经配置,两都将返回不同的值:empty 认为没有配置,isset 则能够取得 $id 的值,看下边例子:

复制PHP内容到剪贴板

PHP代码:

$id=0;

empty($id)?print “我是空的”:print “我是$id .”; //结果:我是空的

!isset($id)?print “我是空的”:print “我是$id .”;//结果:我是0

6.==(等)和===(恒等)的区别

回顾上面第四条空字符串(“”)和NULL的区别,再来看一个例子:

复制PHP内容到剪贴板

PHP代码:

” == NULL;

” === NULL;

运行之后你会发现第一个为true,而第二个则为false!可见==只是比较值是否相等,而===则不但比较值,还会比较类型,更为严格。

分类: 编程开发 标签:

系统不支持mysql的解决方法

2010年9月5日 没有评论

在系统的 system32(C:\windows\system32) 目录下缺少 libmysql.dll文件,解决方法是找到php目录下的libmysql.dll,并将libmysql.dll复制到C:\windows\system32目录中,然后重新启动Web服务。

分类: 编程开发 标签: , ,

php截取html摘要,自动检查html标签闭合

2010年8月27日 没有评论

日志一般需要生成摘要,手动填写太麻烦,于是使用mb_substr自动截取,问题来了。如果纯文本还基本准确,要是html代码过多,截取出来的差得太 多。比如设定摘要300字,前面空格、html代码就可能占了100。怎么办呢?最好的办法是遇到html代码,跳过,不计数。这样较为准确,当然,美中 不足的是,万一是 img 标签呢?什么事都不能十全十美,就这样了。

utf编码,unicode字符1 – 6个字节都有可能,但 html 代码肯定都是 1 字节,并且以 < 开始,以 > 结束,所以稍候分析一下,就出来了。但有个问题,html 标签不能成为对闭合,比如 300 个字符满了,后面还有几个 html 标签,这就造成标签不闭合,页面布局全乱了。记得 php 有个扩展库,专门检查 html 规范的,但一般主机都没装,就试着写了一下。逻辑相当复杂,自己看了都头晕,觉得有些地方多余了,但也没找到另好的办法。

在这几天的测试中,都能正确处理未闭合的 html 标签。但是如果使用 php 过滤器,就会比较麻烦,php 代码内可能会出现非常多的 < 和 >,现在的解决办法是,如果是输入格式中包含有 php 过滤器,就不处理。字符串中没有 html 标签,直接调用  mb_substr 处理,含有摘要截取标记,优先从标记处截断。

下面是代码:

001 /**
002 * 生成摘要
003 * @param (string) $body
004 *  正文
005 * @param (int) $size
006 *  摘要长度
007 * @param (int) $format
008 *  输入格式 id
009 */
010 function blog_summary($body, $size, $format = NULL){
011 $_size = mb_strlen($body, 'utf-8');
012
013 if($_size <= $size) return $body;
014
015 // 输入格式中有 PHP 过滤器
016 if(!isset($format) && filter_is_php($format)){
017 return $body;
018 }
019
020 $strlen_var = strlen($body);
021
022 // 不包含 html 标签
023 if(strpos($body, '<') === false){
024 return mb_substr($body, 0, $size);
025 }
026
027 // 包含截断标志,优先
028 if($e = strpos($body, '<!-- break -->')){
029 return mb_substr($body, 0, $e);
030 }
031
032 // html 代码标记
033 $html_tag = 0;
034
035 // 摘要字符串
036 $summary_string = '';
037
038 /**
039 * 数组用作记录摘要范围内出现的 html 标签
040 * 开始和结束分别保存在 left 和 right 键名下
041 * 如字符串为:<h3><p><b>a</b></h3>,假设 p 未闭合
042 * 数组则为:array('left' => array('h3', 'p', 'b'), 'right' => 'b', 'h3');
043 * 仅补全 html 标签,<? <% 等其它语言标记,会产生不可预知结果
044 */
045 $html_array = array('left' => array(), 'right' => array());
046 for($i = 0; $i < $strlen_var; ++$i) {
047 if(!$size){
048 break;
049 }
050
051 $current_var = substr($body, $i, 1);
052
053 if($current_var == '<'){
054 // html 代码开始
055 $html_tag = 1;
056 $html_array_str = '';
057 }else if($html_tag == 1){
058 // 一段 html 代码结束
059 if($current_var == '>'){
060 /**
061 * 去除首尾空格,如 <br /  > < img src="" / > 等可能出现首尾空格
062 */
063 $html_array_str = trim($html_array_str);
064
065 /**
066 * 判断最后一个字符是否为 /,若是,则标签已闭合,不记录
067 */
068 if(substr($html_array_str, -1) != '/'){
069
070 // 判断第一个字符是否 /,若是,则放在 right 单元
071 $f = substr($html_array_str, 0, 1);
072 if($f == '/'){
073 // 去掉 /
074 $html_array['right'][] = str_replace('/', '', $html_array_str);
075 }else if($f != '?'){
076 // 判断是否为 ?,若是,则为 PHP 代码,跳过
077
078 /**
079 * 判断是否有半角空格,若有,以空格分割,第一个单元为 html 标签
080 * 如 <h2> <p>
081 */
082 if(strpos($html_array_str, ' ') !== false){
083 // 分割成2个单元,可能有多个空格,如:<h2 id="">
084 $html_array['left'][] = strtolower(current(explode(' ', $html_array_str, 2)));
085 }else{
086 /**
087 * * 若没有空格,整个字符串为 html 标签,如:<b> <p> 等
088 * 统一转换为小写
089 */
090 $html_array['left'][] = strtolower($html_array_str);
091 }
092 }
093 }
094
095 // 字符串重置
096 $html_array_str = '';
097 $html_tag = 0;
098 }else{
099 /**
100 * 将< >之间的字符组成一个字符串
101 * 用于提取 html 标签
102 */
103 $html_array_str .= $current_var;
104 }
105 }else{
106 // 非 html 代码才记数
107 --$size;
108 }
109
110 $ord_var_c = ord($body{$i});
111
112 switch (true) {
113 case (($ord_var_c & 0xE0) == 0xC0):
114 // 2 字节
115 $summary_string .= substr($body, $i, 2);
116 $i += 1;
117 break;
118 case (($ord_var_c & 0xF0) == 0xE0):
119
120 // 3 字节
121 $summary_string .= substr($body, $i, 3);
122 $i += 2;
123 break;
124 case (($ord_var_c & 0xF8) == 0xF0):
125 // 4 字节
126 $summary_string .= substr($body, $i, 4);
127 $i += 3;
128 break;
129 case (($ord_var_c & 0xFC) == 0xF8):
130 // 5 字节
131 $summary_string .= substr($body, $i, 5);
132 $i += 4;
133 break;
134 case (($ord_var_c & 0xFE) == 0xFC):
135 // 6 字节
136 $summary_string .= substr($body, $i, 6);
137 $i += 5;
138 break;
139 default:
140 // 1 字节
141 $summary_string .= $current_var;
142 }
143 }
144
145 if($html_array['left']){
146 /**
147 * 比对左右 html 标签,不足则补全
148 */
149
150 /**
151 * 交换 left 顺序,补充的顺序应与 html 出现的顺序相反
152 * 如待补全的字符串为:<h2>abc<b>abc<p>abc
153 * 补充顺序应为:</p></b></h2>
154 */
155 $html_array['left'] = array_reverse($html_array['left']);
156
157 foreach($html_array['left'] as $index => $tag){
158 // 判断该标签是否出现在 right 中
159 $key = array_search($tag, $html_array['right']);
160 if($key !== false){
161 // 出现,从 right 中删除该单元
162 unset($html_array['right'][$key]);
163 }else{
164 // 没有出现,需要补全
165 $summary_string .= '</'.$tag.'>';
166 }
167 }
168 }
169 return $summary_string;
170 }
分类: 编程开发 标签:

PHP遍历文件夹

2010年8月18日 没有评论

一个简单的目录递归函数 第一种实现办法:用dir返回对象 第二种实现办法:用readdir()函数
-
-
<pre>
<?php
/**********************
一个简单的目录递归函数
第一种实现办法:用dir返回对象
***********************/
function tree($directory)
{
$mydir=dir($directory);
echo “<ul>\n”;
while($file=$mydir->read()){
if((is_dir(“$directory/$file”)) AND ($file!=”.”) AND ($file!=”..”))
{echo “<li><font color=\”#ff00cc\”><b>$file</b></font></li>\n”;
tree(“$directory/$file”);
}
else
echo “<li>$file</li>\n”;
}
echo “</ul>\n”;
$mydir->close();
}
//开始运行
echo “<h2>目录为粉红色</h2><br>\n”;
tree(“F:/”);
/***********************
第二种实现办法:用readdir()函数
************************/
function listDir($dir){
if(is_dir($dir)){
if ($dh = opendir($dir)) {
while (($file= readdir($dh)) !== false){
if((is_dir($dir.”/”.$file)) && $file!=”.” && $file!=”..”){
echo “<b><font color=’red’>文件名:</font></b>”,$file,”<br><hr>”;
listDir($dir.”/”.$file.”/”);
}else{
if($file!=”.” && $file!=”..”){
echo $file.”<br>”;
}
}
}
closedir($dh);
}
}
}
//开始运行
listDir(E:/data/);
?>

分类: 编程开发 标签:

PHP查找字符串函数strstr()

2010年8月17日 没有评论

定义和用法

strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。

该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。

语法

strstr(string,search)
参数 描述
string 必需。规定被搜索的字符串。
search 必需。规定所搜索的字符串。如果该参数是数字,则搜索匹配数字 ASCII 值的字符。

提示和注释

注释:该函数是二进制安全的。

注释:该函数对大小写敏感。如需进行大小写不敏感的搜索,请使用 stristr()

例子

例子 1

<?php
echo strstr("Hello world!","world");
?>

输出:

world!

例子 2

在本例中,我们将搜索 “o” 的 ASCII 值所代表的字符:

<?php
echo strstr("Hello world!",111);
?>

输出:

o world!
分类: PHP 标签: ,

php中清除数组中的空元素的函数

2010年7月21日 没有评论
php代码
function clearBlank($arr)
{
    function odd($var)
    {
       return($var<>'');//return true or false
    }
    return (array_filter($arr, "odd"));
}

example:

php代码
$arr = array('1','2','','4');
print_r($arr);
echo "
";
print_r($this->clearBlank($arr));

result:
Array ( [0] => 1 [1] => 2 [2] => [3] => 4 )
Array ( [0] => 1 [1] => 2 [3] => 4 )

array_filter()可以根据提供的函数来过滤一个数组,并将结果放在一个新的数组中返回。第一个参数是数组名,第二个参数是函数名。过滤 函数接受一个参数,array_filter在内部会把被过滤的数组的值依次传递给这个函数。过滤函数返回true,该值就被包含在结果数组中,否则就过 滤掉。

分类: 编程开发 标签:

Flex php mysql 相结合的简单例子

2010年6月20日 没有评论

结合php,mysql,flex的很简单的例子,原理就不赘叙啦,很容易理解的.list负责列出数据表的内容,insert.php负责插入数据.

//writeData.mxml

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute”
initialize=”list.send()”>
<mx:HTTPService id=”list” url=”list.php” method=”POST”
result=”resultHandler(event)” showBusyCursor=”true”/>

<mx:HTTPService id=”insert” url=”insert.php” method=”POST”/>
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;

public function refreshData():void
{
list.send();
}

private function resultHandler(event:ResultEvent):void
{
}

public function sendData( ):void
{
var objSend:Object = new Object;
objSend.name = tiName.text;
objSend.email = tiEmail.text
insert.send( objSend );
}
]]>
</mx:Script>
<mx:Panel layout=”absolute” title=”Flex – PhP – MySQL” left=”10″ right=”10″ top=”10″ bottom=”10″>
<mx:Panel height=”150″ layout=”absolute” borderStyle=”none” left=”10″ right=”10″ top=”10″>
<mx:TextInput x=”82″ y=”0″ id=”tiName”/>
<mx:TextInput x=”82″ y=”30″ id=”tiEmail”/>
<mx:Button x=”122″ y=”60″ label=”Add to database” click=”sendData(); refreshData();”/>
<mx:Label x=”10″ y=”2″ text=”Name:” id=”lbName”/>
<mx:Label x=”10″ y=”32″ text=”Email:” id=”lbEmail”/>
</mx:Panel>
<mx:Panel layout=”absolute” borderStyle=”none” left=”10″ right=”10″ bottom=”10″ top=”150″>
<mx:Label x=”10″ y=”0″ text=”All contacts” id=”lbAll” fontWeight=”bold” fontSize=”16″/>
<mx:DataGrid left=”0″ right=”0″ bottom=”0″ top=”30″ id=”dgAll”
dataProvider=”{list.lastResult.people.person}”>
<mx:columns>
<mx:DataGridColumn headerText=”Test ID” dataField=”testid”/>
<mx:DataGridColumn headerText=”Name” dataField=”name”/>
<mx:DataGridColumn headerText=”Email” dataField=”email”/>
</mx:columns>
</mx:DataGrid>
<mx:Button x=”150″ y=”3″ label=”Refresh All” id=”btnRefresh” click=”list.send()”/>
</mx:Panel>
</mx:Panel>
</mx:Application>

//这个是list.php

<?php
$name = $_POST["name"];
$email = $_POST["email"];

$MySQLConnection = mysql_connect( “localhost”, “root”, “root” );

//load the database
mysql_select_db( “test” );

$Result = mysql_query(“INSERT INTO user VALUES(”,’$name’,'$email’)”);

mysql_free_result($Result);
mysql_close();
//file_put_contents( “data.xml”, $Text );
?>

//insert.php

<?php
$name = $_POST["name"];
$email = $_POST["email"];

$MySQLConnection = mysql_connect( “localhost”, “root”, “root” );

//load the database
mysql_select_db( “test” );

$Result = mysql_query(“INSERT INTO user VALUES(”,’$name’,'$psd’)”);

mysql_free_result($Result);
mysql_close();
//file_put_contents( “data.xml”, $Text );
?>

分类: 编程开发 标签: , ,