错在那里,为什么不正确执行,那个条件不满足?

bombshell 2002-07-23 03:55:43
这段代码在写成函数后不能正确执行,为什么?
<?
function del_all_pm()
{
global $loginname;//用户登录的账号,注册为cookie变量
$title = "确定";

echo "<tr>

<td bgcolor=#FFFFFF align=center colspan=2>

<b>删除所有短信</b><br>";
if($action == "delall" && $touser ==$loginname)
{
connect_db();

$sql = "delete from messages where touser='$loginname'";
$result = mysql_query($sql) or die (mysql_error());
jump_page('privatemessage.php','删除成功','<br>状态:私人短信已经被成功删除<br><ul><li><a href="privatemessage.php">返回程序</a></li></ul>');
}
$content="

程序需要您确认这次操作:<br>

<br>

真的要继续吗?<br>";

$content.="
<form action='$thisprog' method='post'>
<input type=button value='返回上一页' onclick ='self.history.back();'>

<input type=submit value='确认并继续'>
<input type=hidden name=action value='delall'>
<input type=hidden name=touser value='$loginname'>
</form>";
msg_box($title,$content);
echo "</td></tr></table>";

footer();//显示版权信息
}
?>
这段代码执行到 “确认并继续“ 和“返回上一页“ 当你点“确认并继续“时 ,程序不执行删除操作。
在没有封装成函数时可以顺利执行删除操作。
<?
global $loginname;
$title = "确定";

echo "<tr>

<td bgcolor=#FFFFFF align=center colspan=2>

<b>删除所有短信</b><br>";
if($action == "delall" && $touser ==$loginname)
{
connect_db();//connect the database

$sql = "delete from messages where touser='$loginname'";
$result = mysql_query($sql) or die (mysql_error());
jump_page('privatemessage.php','删除成功','<br>状态:私人短信已经被成功删除<br><ul><li><a href="privatemessage.php">返回程序</a></li></ul>');
}
$content="

程序需要您确认这次操作:<br>

<br>

真的要继续吗?<br>";

$content.="
<form action='$thisprog' method='post'>
<input type=button value='返回上一页' onclick ='self.history.back();'>

<input type=submit value='确认并继续'>
<input type=hidden name=action value='delall'>
<input type=hidden name=touser value='$loginname'>
</form>";
msg_box($title,$content);
echo "</td></tr></table>";

footer();//显示版权信息
?>
我检查了一下,没发现错误。请您指点一下!谢谢!

...全文
50 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wasy 2002-07-24
  • 打赏
  • 举报
回复
肯定是全局变量的问题,确定你函数内部所有的外部变量都要先用global声明。

所以前面要加上:
global $touser;
global $action;
hjw 2002-07-24
  • 打赏
  • 举报
回复
$action没有设成公共变量
bombshell 2002-07-24
  • 打赏
  • 举报
回复
多写个为,全局变量的问题。
global $touser,$action,$loginname;
搞定。
LeeMaRS 2002-07-24
  • 打赏
  • 举报
回复
会不会还是register_globals=Off的问题?改成On试试
LeeMaRS 2002-07-24
  • 打赏
  • 举报
回复
我已经习惯使用$_COOKIE来引用COOKIE变量了.
eagle_gui 2002-07-23
  • 打赏
  • 举报
回复
试试:
global $loginname;

最好在函数外声明
global $loginname
function xxxx(){
另外,你最好用参数传递方式:
function dellmsg($user,$action,$msgid){
..
....
..}
这样会比较好
_Shakespeare 2002-07-23
  • 打赏
  • 举报
回复
connect_db();定义了吗?
另外你定制cookie变量的代码也没有。还有如果你定义了cookie变量就不用用global来声明。
一般来说,Cookie通过HTTP Headers从服务器端返回到浏览器上。服务器端在响应中利用Set-Cookie header来创建一个Cookie,然后,浏览器在它的请求中通过Cookie header包含这个已经创建的Cookie,并且反它返回至服务器,从而完成浏览器的论证。
浏览器创建了一个Cookie后,对于每一个针对该网站的请求,都会在Header中带着这个Cookie;不过,对于其他网站的请求Cookie是绝对不会跟着发送的。而且浏览器会这样一直发送,直到Cookie过期为止。

另外关于cookie还有一些限制---这只是我发现的。
首先是必须在HTML文件的内容输出之前设置;
其次不同的浏览器对Cookie的处理不一致辞,且有时会出现错误的结果。比如:MS IE+SERVICE PACK 1不能正确处理带域名和路径的Cookie,Netscape Communicator 4.05和MS IE 3.0不能正确处理不带路径和时间的Cookie。至于MS IE 5 好象不能处理带域名、路径和时间的Cookie。这是我在设计本站的页面时发现的。
第三个限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。




(由于Cookie最初由Netscape定义的,所以附上Netscape公司关于Cookie的官方原始定义的网址:http://www.netscape.com/newsref/std/cookie_spec.html)

浅妄薄见,望与斟酌

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧