Php高手带路--问题汇总解答
1:为什么我得不到变量
我在一网页向另一网页POST数据name,为什么输出$name时却得不到任何值?
在PHP4.2以后的版本中register_global默认为off
若想取得从另一页面提交的变量:
方法一:在PHP.ini中找到register_global,并把它设置为on.
方法二:在接收网页最前面放上这个extract($_POST);extract($_GET);(注意extract($_SESSION)前必须要有Session_Start()).
方法三:一个一个读取变量$a=$_GET["a"];$b=$_POST["b"]等,这种方法虽然麻烦,但比较安全.
2:调试你的程序
在运行时必须知道某个变量为何值。我是这样做的,建立一文件debug.php,其内容如下:
PHP代码:
PHP
<?PHP
Ob_Start();
Session_Start();
Echo "<pre>";
Echo "本页得到的_GET变量有:";
Print_R($_GET);
Echo "本页得到的_POST变量有:";
Print_R($_POST);
Echo "本页得到的_COOKIE变量有:";
Print_R($_COOKIE);
Echo "本页得到的_SESSION变量有:";
Print_R($_SESSION);
Echo "</pre>";
?>
然后在php.ini中设置:include_path = "c:/php",并将debug.php放在此文件夹,以后就可以在每个网页里包含此文件,查看得到的变量名和值.
3:如何使用session
凡是与session有关的,之前必须调用函数session_start();
为session付值很简单,如:
PHP代码:
<?php
Session_start();
$Name = "这是一个Session例子";
Session_Register("Name");//注意,不要写成:Session_Register("$Name");
Echo $_SESSION["Name"];
//之后$_SESSION["Name"]为"这是一个Session例子"
?>
在php4.2之后,可以为session直接付值:
PHP代码:
PHP
<?PHP
Session_Start();
$_SESSION["name"]="value";
?>
取消session可以这样:
PHP代码:
1. 简单邮件发送
PHP函数库中有一个mail函数,可以用来进行简单的邮件发送,函数原型为:
boolean mail(string $to, string $subject, string $message, string [$additional]);
$to指定邮件寄送地址,$subject指定邮件标题,$message指定邮件内容,$additional指定邮件的附加头部,例如:
复制PHP内容到剪贴板
PHP代码:
<?php
mail( "ywg_263@263.net", "message from php", "hello, xiaoyz! " );
?>
就可以向 ywg_263@263.net发送一个标题为“message from php” 内容为“hello, xiaoyz!”的邮件,其中的邮件接受人$to可以是多个邮件地址,也就是说可以同时给多个人发送同一份邮件,邮件地址之间用逗号分隔,示例如下:
复制PHP内容到剪贴板
PHP代码:
<?php
$emails = Array( "xiaoyz@birdy.dhs.org", "xiaoyz@hotmail.com" );
mail( implode(",", $emails), "message from php", "hello, xiaoyz!" );
?>
笔者做过的论坛程序中的注册部分就曾经使用过这种方法,不过最后还是采用了一种变通的形式,下文将会具体讲到。其中主要的需求是:当一个用户注册之后,必须得到组管理员的身份确认才能成为论坛的正式会员,我所采用的方法是:用户注册完成提交表单时,先把用户各种注册信息写入数据库,同时把用户的必要信息通过邮件的方式发送给用户所注册组的所有组管理员(如果没有组管理员的话,会给站管理员发送邮件,并告之该组没有组管理员),当然,读者可能会觉得如果有人恶意注册了很多id的话是否会在数据库中造成很多垃圾信息呢?这种考虑是必要的,所以我们需要给出一个策略,提供一个管理界面,来剔除掉这些垃圾,一种简单的方法就是对于超过了给定时期还没有成为正式会员的id一律删除,前提就是必须保证组管理员要在给定时期之内审批这些id,否则会造成误删。读者可以试试上面的代码能否工作,如果没有发送成功,请考虑重新配置邮件服务器的smtp服务。好了,按照上述形式发送的邮件将只是简单的文本形式,如果希望发送一个HTML形式的邮件,就需要知道如何发送MIME形式的邮件了。
2. MIME邮件发送
MIME(Multi-purpose Internet Mail Extensions,多用途Internet邮件扩展) 协议扩展了基于文本的Internet邮件系统,以便可以在消息体中包含二进制附件。MIME信息由正常的Internet文本邮件组成,在文本邮件中包含了一些信息头和格式化过的信息体(用ASCII 码子集表示的附件),这些MIME信息头给出了在邮件中表示附件的特定方法。
刚才通过mail函数发送的邮件接受之后的MIME信息如下(其中的localhost
(localhost[127.0.0.1])表示采用本机上的postfix提供的smtp服务,userid 48表示apache):
[code]
Received: from localhost (localhost [127.0.0.1])
by mx01.263.net (Postfix) with SMTP id E7C8B1DC38A78
for <ywg_263@263.net>; Sat, 8 Dec 2001 20:08:45 +0800 (CST)
Received: by birdy.dhs.org (Postfix, from userid 48)
id 706F3C4923A; Sun, 9 Dec 2001 03:52:26 +0800 (CST)
T ywg_263@263.net
Subject: message from php
用法:void parse_str ( string $str [, array &$arr] )
parse_str用来解析(分离)URL中的查询字符串(Query String),所谓查询字符串是指一个URL中?后面的部分,如http://localhost/test/result.php?name=anve&age=21,则查询字符串就是“name=anve&age=21”。
当然在PHP里,你可以用$_GET数组来取得查询字符串的值,但有时候parse_str会方便些,特别是当查询字符串中的变量名(对应于上面例子中的name和age)不知道的时候。
index.html:
<html>
<body>
<form action="result.php" method="get">
name: <input type="text" name="name">
age: <input type="text" name="age">
<input type="submit">
</form>
</body>
</html>
result.php:
<html>
<body>
<?php
$string=$_SERVER[''QUERY_STRING'']; // 用$_SERVER[''QUERY_STRING'']取得查询字符串。
echo ''$string: ''.$string.''<br>'';
parse_str($string);
echo ''$name: ''.$name.''<br>'';
echo ''$age: ''.$age.''<br>''; // 经过parse_str后,生成了$name和$age两个变量,并被正确赋值。
parse_str($string,$arr); // 第二个参数$arr是一个用来保存结果的数组,这样就不会像刚才那样产生多个变量了。
echo ''<pre>'';
print_r($arr); // $arr[''name'']和$arr[''age'']被正确赋值。
echo ''</pre>'';
?>
</body>
</html>
另注:parse_str会自动进行urldecode(URL解码)。例如在index.html的name中输入“波波”,我的测试结果是:
<?php
/*
* 文件:chinesechar.php
* 作用:汉字数据储存
* 作者:PHP实战群:33918040 - 鱼尾唯一
* 网址:http://bbs.ailf.cn/ http://www.fishwei.com/
* 特注:版权所有转载注明出处!有付出才会有收获!
*/
$ChineseChar = array("人","出","来","友","学","孝","仁","义","礼","廉","忠","国","中","易","白","者","火 ","土","金","木","雷","风","龙","虎","天","地", "生","晕","菜","鸟","田","三","百","钱","福 ","爱","情","兽","虫","鱼","九","网","新","度","哎","唉","啊","哦","仪","老","少","日", "月 ","星");
?>
<?php
/*
* 文件:check.php
* 作用:验证
* 作者:PHP实战群:33918040 - 鱼尾唯一
* 网址:http://bbs.ailf.cn/ http://www.fishwei.com/
* 特注:版权所有转载注明出处!有付出才会有收获!
*/
session_start();
$errorMSG = '''';
//验证用户输入是否和验证码一致
if(!is_null($_POST[''check'']))
{
if (strcasecmp($_SESSION[''code''],$_POST[''code''])==0)
$errorMSG = "<p style="font-size:12px
Windows XP + Apache 2.2.4 + PHP 5.2.3 + MySQL 5.0.27 + Zend Optimizer 3.3.0环境配置说明(推荐)
2007年08月24日 星期五 下午 02:56
以下为本说明所要用到的软件及相关网站,zend网站下载需要注册一个用户。 ≡ Apache 2.2.4 的安装 ≡ 打开我的电脑,进入D盘,在其下新建一个文件夹,名为 local 。 到其官方站点下载 php-5.2.3-Win32.zip 并解压(在此不要下载及使用它的Installer,这种方式虽然很自动化、很智能,但也存在很多方面的限制,因为不推荐。) ≡ MySQL 5.0.27 的安装 ≡ 1.打开我的电脑,进入D:webserver,在其下新建一个文件夹,名为 mysql5 。 |