"结尾,超出部分以"..."代替6:规范你 ... 巧巧读书论坛 - Discuz! Archiver" />

查看完整版本: Php部分常见问题总结(1)

孤灯挑尽 2007-9-6 13:21

Php部分常见问题总结(1)

目录:

1:为什么我得不到变量

2:调试你的程序

3:如何使用session

4:为什么我向另一网页传送变量时,只得到前半部分,以空格开头的则全部丢失

5:如何截取指定长度汉字而不会出现以"?>"结尾,超出部分以"..."代替

6:规范你的SQL语句

7:如何使Html/PHP格式的字符串不被解释,而是照原样显示

8:怎么在函数里取得函数外的变量值

9:我怎么知道系统默认支持什么函数

10:如何比较两个日期相差几天

11:为什么我升级PHP后,原来的程序出现满屏的 Notice: Undefined variable:

12:我想在每个文件最前,最后面都加上一文件.但一个一个添加很麻烦

13:如何利用PHP上传文件

14:如何配置GD库

15:什么是UBB代码

16:我想修改MySQL的用户,密码

17:我想知道他是通过哪个网站连接到本页

18:数据放入数据库和取出来显示在页面需要注意什么

19:如何读取当前地址栏信息

20:我点击后退按钮,为什么之前填写的东西不见

21:怎么在图片里显示IP地址

22:如何取得用户的真实IP

23:如何从数据库读取三天内的所有记录

24:如何远程链接Mysql数据库

25:正则到底怎么用

26:用Apache后,主页出现乱码

27:为什么单引号,双引号在接受页面变成(\'\")

28:怎么让程序一直运行下去,而不是超过30秒就停止

29:计算当前在线人数

30:什么是模板,怎么用

31:怎么用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

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

Session_Start();

$_SESSION[\"name\"]=\"value\";

?>
--------------------------------------------------------------------------------
取消session可以这样:
PHP代码:--------------------------------------------------------------------------------
<?php

session_start();

session_unset();

session_destroy();

?>
--------------------------------------------------------------------------------


取消某个session变量在php4.2以上还有BUG.
注意:
1:在调用Session_Start()之前不能有任何输出.例如下面是错误的.

==========================================

1行

2行 <?PHP

3行 Session_Start();//之前在第一行已经有输出

4行 .....

5行 ?>

==========================================


提示1:
凡是出现\"........headers already sent..........\",就是Session_Start()之前向浏览器输出信息.

去掉输出就正常,(COOKIE也会出现这种错误,错误原因一样)
提示2:
如果你的Session_Start()放在循环语句里,并且很难确定之前哪里向浏览器输出信息,可以用下面这种方法:

1行 <?PHP Ob_Start(); ?>

........这里是你的程序......
2:这是什么错误
Warning: session_start(): open(/tmp\\sess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:....

因为你没有指定session文件的存放路径.
解决方法:

(1)在c盘建立文件夹tmp

(2)打开php.ini,找到session.save_path,修改为session.save_path= \"c:/tmp\"
4:为什么我向另一网页传送变量时,只得到前半部分,以空格开头的则全部丢失


PHP代码:--------------------------------------------------------------------------------
<?php

$Var=\"hello php\";//修改为$Var=\"   hello php\";试试得到什么结果

$post= \"receive.php?Name=\".$Var;

header(\"location:$post\");

?>
--------------------------------------------------------------------------------
receive.php的内容:
PHP代码:--------------------------------------------------------------------------------
<?PHP

Echo \"<pre>\";

Echo   $_GET[\"Name\"];

Echo \"</pre>\";

?>
--------------------------------------------------------------------------------


正确的方法是:
PHP代码:--------------------------------------------------------------------------------
<?php

$Var=\"hello php\";

$post= \"receive.php?Name=\".urlencode($Var);

header(\"location:$post\");

?>
--------------------------------------------------------------------------------


在接收页面你不需要使用Urldecode(),变量会自动编码.




5:如何截取指定长度汉字而不会出现以\"?>\"结尾,超出部分以\"...\"代替


一般来说,要截取的变量来自Mysql,首先要保证那个字段长度要足够长,一般为char(200),可以保持100个汉字,包括标点.
PHP代码:--------------------------------------------------------------------------------
<?PHP

$str=\"这个字符好长呀,^_^\";

$Short_Str=showShort($str,4);//截取前面4个汉字,结果为:这个字符...

Echo   \"$Short_Str\";

Function csubstr($str,$start,$len)

{

$strlen=strlen($str);

$clen=0;

for($i=0;$i<$strlen;$i  ,$clen  )

{

if ($clen>=$start $len)

break;

if(ord(substr($str,$i,1))>0xa0)

{

if ($clen>=$start)

$tmpstr.=substr($str,$i,2);

$i  ;

}

else

{

if ($clen>=$start)

$tmpstr.=substr($str,$i,1);

}

}
return $tmpstr;

}

Function showShort($str,$len)

{

$tempstr = csubstr($str,0,$len);

if ($str<>$tempstr)

$tempstr .= \"...\"; //要以什么结尾,修改这里就可以.
return $tempstr;

}
--------------------------------------------------------------------------------
6:规范你的SQL语句[/color]


在表格,字段前面加上\"`\",这样就不会因为误用关键字而出现错误,

当然我并不推荐你使用关键字.
例如

$Sql=\"INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES (\'xltxlm\', \'use`\', 1, \'criterion your sql string \', ??-07-11 00:00:00\')\"
\"`\"怎么输入? 在TAB键上面.


[color=blue]7:如何使Html/PHP格式的字符串不被解释,而是照原样显示

<b
页: [1]

查看完整版本: Php部分常见问题总结(1)