对于PHP我是很菜,公司有项目,被逼,希望大家多多帮忙。

解决方案 »

  1.   

    $strsql="insert into userdetails values";
                            $strsql.=" ('$name','$sex','$question','$answer','','$givenname_cn','$surname_en','$givenname_en','$surname_en',";
                        $strsql.="'$givenname_en','','$tel','$fax','$mobile',now())";                        $result=mysql_query($strsql,$dbh);问题是不是在这里?
    你又重新对$result附值,
    然后它的下面                }
                    else
                    {
                            header("Location: MAIL/errpage.php?msg=You'd better choose another username");
                    }
    //★★★★★★★★★★★★★★★★★★★★★★★★★★★★
            }
    它跳出一个判断,但是还在大的if之内,建议你改个名字,比如$result1试试
    浅妄薄见,望与斟酌
      

  2.   

    问题的关键不在于这些代码,在于if(mysql_num_rows($result)==0)运行成功以后的去向,现在我不知道跑到那个页面去了估计你后面还有代码,返回了本页。如果没有,在if(mysql_num_rows($result)==0)运行结束的地方加一个成功的跳转,转到别的页面就应该没有问题了自动跳回来的原因我不清楚,但是程序已经运行了if(mysql_num_rows($result)==0)成功,在跳回本页的话肯定会运行if(mysql_num_rows($result)==1)部分
      

  3.   

    根据程序,应该跳走的,
    但确不知为什么,又跳回来执行了if(mysql_num_rows($result)==1)???其它的页面只不过是接受参数据显示参数
      

  4.   

    to hbolive(紫月亮):
    你最好把问题简化,谁有功夫去看你这么多代码??
    =============================================================
    没看清我的提问吗,正因为不知道在哪出错,
    要是知道了,我还用问?!!!!!!!
      

  5.   

    是不是我的Mkdir跟权限有关,需要什么权限?!!!!!!!!!!!
      

  6.   

    先增加if(mysql_num_rows($result)==0)成功后的跳出语句吧
      

  7.   

    有,贴之前删了:如下if($result1){
    header("Location: MAIL/success.php?username=$name");
    }else{
    echo "注册失败!!<br>";
    echo "请<a href=\"p02.php\">重试</a>,或与系统管理员联系!!";
        }
      

  8.   

    请检查这个文件中的代码Location: MAIL/success.php?username=$name是这里的东西有问题跳回你上面的程序页的
      

  9.   

    这个页中只有<?php echo $name;?>
      

  10.   

    只有<?php echo $name;?>
      

  11.   

    if($result1){
    header("Location: MAIL/success.php?username=$name");
    }else{
    echo "注册失败!!<br>";
    echo "请<a href=\"p02.php\">重试</a>,或与系统管理员联系!!";
        }
    上面的$result1是哪里来的?
    //////////////////////////////
    另外你说到的权限问题
    mkdir或者chmod 0777 是read/write/execute
    0775只是对你用PHP创建的文件或者文件夹有以上的权限--推荐使用
    ////////
    另外的建议,在你对$result值重新赋值的地方,用$row=mysql_num_rows($result);echo $row;
    看看如果返回的是1,那么问题就出在这里了
      

  12.   

    落下一点
    如果你是 windows平台的话0777权限好象不支持
      

  13.   

    另外,我从PHP.NET上看到
    你创建目录的方法也有问题,如下:
    [email protected]
    28-Aug-2001 03:12 
     
    I noticed that this function will only attempt to create the last directory
    in the path, so 
    mkdir("./newdir1/newdir2/newdir2",0700);won't work. I wrote this function to do it.function mkpath($path,$mode = 0700) {
      $dirs = explode("\\",realpath($path));
      $path = $dirs[0];
      for($i = 1;$i < count($dirs);$i++) {
        $path .= "/".$dirs[$i];
        if(!is_dir($path))
          mkdir($path,$mode);
      }
    }Note: I wrote this on windows, where realpath starts with x:\ (x being
    drive letter) 
    浅妄薄见,望与斟酌
      

  14.   

    $result1其实是这句得来的:
    $result=mysql_query($strsql,$dbh);
    只不过在贴的时候搞错了。那用mkdir时,权限必须是:0777??我的程序根本就执行不到这就跳回去重新执行了:(
      

  15.   

    它的原理是这样的
    第一个7 是owner的,1(execute),2(write),4(read)
    第二个7是group 的
    第3个是other user的
    所以根据自己的需要设定
    我还是觉得因为在一个大的if里面,所以$result值不要重新设定
    你可以多加一些echo 或print以检验执行到了哪一步
      

  16.   

    但问题又来了,
    我用
    echo 111;
    exit;
    之类的跟踪,结果,不管在标有(@)中的程序全部报错,原因是:
    路径不对之类的,真是奇了.
    -----------------------
    那么在PHP中调用Mkdir的时候,权限应该是:0777?0775?还是其它?谢谢,只要问题能解决,
    我的分还是有的:)
      

  17.   

    用0777吧
    另外,你的打开的这个目录是$FD = fopen("/home/vpopmail/domains/$domain/$name/Maildir/courierimapsubscribed", "w");
    首先确定它存在
    另外,就象我上面说的,你的那个创建目录方法不可行
    另外,我从PHP.NET上看到
    你创建目录的方法也有问题,如下:
    [email protected]
    28-Aug-2001 03:12 
     
    I noticed that this function will only attempt to create the last directory
    in the path, so 
    mkdir("./newdir1/newdir2/newdir2",0700);won't work. I wrote this function to do it.function mkpath($path,$mode = 0700) {
      $dirs = explode("\\",realpath($path));
      $path = $dirs[0];
      for($i = 1;$i < count($dirs);$i++) {
        $path .= "/".$dirs[$i];
        if(!is_dir($path))
          mkdir($path,$mode);
      }
    }Note: I wrote this on windows, where realpath starts with x:\ (x being
    drive letter)所以,你先把你原来的那些创建目录的代码注释掉
    换一个符合上面标准的试试
      

  18.   

    用0777吧
    另外,你的打开的这个目录是$FD = fopen("/home/vpopmail/domains/$domain/$name/Maildir/courierimapsubscribed", "w");
    首先确定它存在
    另外,就象我上面说的,你的那个创建目录方法不可行
    另外,我从PHP.NET上看到
    你创建目录的方法也有问题,如下:
    [email protected]
    28-Aug-2001 03:12 
     
    I noticed that this function will only attempt to create the last directory
    in the path, so 
    mkdir("./newdir1/newdir2/newdir2",0700);won't work. I wrote this function to do it.function mkpath($path,$mode = 0700) {
      $dirs = explode("\\",realpath($path));
      $path = $dirs[0];
      for($i = 1;$i < count($dirs);$i++) {
        $path .= "/".$dirs[$i];
        if(!is_dir($path))
          mkdir($path,$mode);
      }
    }Note: I wrote this on windows, where realpath starts with x:\ (x being
    drive letter)所以,你先把你原来的那些创建目录的代码注释掉
    换一个符合上面标准的试试
      

  19.   

    Mail系统,
    此系统是公司请别人做的,但有问题,所以我接手修改----------------------------------------------------
    思路:
    1,执行搜索用户表,返回mysql_num_rows($result)
    2,mysql_num_rows($result)返回0;执行mkdir,创建用户目录,此目录下包含用户信箱的子目录(收信夹,垃圾箱)之类
    3,写cookie(setcookie('squirrelmail_language', $language, time()+2592000, $base_uri);
    )
    4,设置系统默认(setPref($data_dir, $name."@".$domain, 'language', $language);)
    5,向数据库搜入用户详细信息
    6,导向成功/出错页
    --------------------------------------------------------------
      

  20.   

    你把这段程序单列出来出来执行一下看能不能通过。
    <?
    system("/home/vpopmail/bin/vadduser -q 5000000 $name@$domain $passwd");
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Trash", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Trash/new", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Trash/cur", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Trash/tmp", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Drafts", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Drafts/new", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Drafts/cur", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Drafts/tmp", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Sent", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Sent/new", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Sent/cur", 0700);
    mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Sent/tmp", 0700);
    $FD = fopen("/home/vpopmail/domains/$domain/$name/Maildir/courierimapsubscribed", "w");
    fputs($FD, "INBOX.Sent\nINBOX.Trash\nINBOX.Drafts");
    fclose($FD);echo "ddddddddddd";
    ereg( '(^.*/)[^/]+/[^/]+$', $PHP_SELF, $regs);
    $base_uri = $regs[1];
    setcookie('squirrelmail_language', $language, time()+2592000, $base_uri);
    setPref($data_dir, $name."@".$domain, 'language', $language);
    echo "/home/vpopmail/bin/vadduser $name@$domain -q 5000000 $passwd";
    ?>
    另外linux和unix文件和目录的权限是这样的:
    -rw-rw-r--    1 root     root            0  3月  9 19:44 mail
        |
        |
    是第一是标是链接还是目录等;第二位到第四位是表示本用户对这个文件有什么权限(读、写、执行);第五位到第七位是表示本组用户对这个文件有什么权限;第八位到第十位表示其它组用户对这个文件有什么权限。用chmod可以对权限进行修改。文件权限在一定程序上和文件所在的目录的权限有一定关系。
      

  21.   

    能执行,问题就是不知道在哪块程序跳回,
    我无法跟踪,
    因为在楼上贴的程序任一地方加
    echo
    程序都会出错,不知道什么原因
    -----------------------------------------------------------------谁能帮忙解释下,谢谢
    1,system("/home/vpopmail/bin/vadduser -q 5000000 $name@$domain $passwd");
    2,$FD = fopen("/home/vpopmail/domains/$domain/$name/Maildir/courierimapsubscribed", "w");
    fputs($FD, "INBOX.Sent\nINBOX.Trash\nINBOX.Drafts");
    fclose($FD);
      

  22.   

    system函数是用来执行外部程序用的,一般不会出问题
    你的那条语句的意思是执行一条添加用户的命令,如果成功的话返回你的命令的 最后一行,失败返回false
    下面的语句是以写的方式(这里要注意,你必须有这个权限才可以)打开一个文件,一般不会出错。
    然后是对这个写入一行字符
    一般也不会有错误产生,最后关闭文件
    所以,我的建议还是你 检查一下你创建的那些文件夹,你可以用一个常量试试
    比如说
    $path="c:\temp";
    mkdir($path,0777);,,
      

  23.   

    system函数是用来执行外部程序用的,一般不会出问题
    你的那条语句的意思是执行一条添加用户的命令,如果成功的话返回你的命令的 最后一行,失败返回false
    下面的语句是以写的方式(这里要注意,你必须有这个权限才可以)打开一个文件,一般不会出错。
    然后是对这个写入一行字符
    一般也不会有错误产生,最后关闭文件
    所以,我的建议还是你 检查一下你创建的那些文件夹,你可以用一个常量试试
    比如说
    $path="c:\temp";
    mkdir($path,0777);,,
      

  24.   

    建议哦。在程序最开始的地方 error_reporting(E_ALL);去掉所有函数前面的@,然后,根据页面的打印出来的信息,
    应该可以确定问题所在的。开发阶段,最好把所有的错误和警告都打印出来,有助于程序的调试。
      

  25.   

    zhongshan99(咬过的苹果) 说的有一定道理
    保持你现在的结构,先检验一下结构是否正确,然后剔除有可能出错的地方再检查,用简单的语句替换复杂但是性质相同的语句
      

  26.   

    系统报这句话有错,能不能解释一下,谢谢:/home/vpopmail/bin/vadduser [email protected] -q 5000000 wwwwww
      

  27.   

    说你没有权限来执行 vadduser这个命令
    有这个命令吗?是adduser 或者useradd吧
    你改动一下试
      

  28.   

    是vadduser,Qmail的添加用户的命令。终于搞定了,我作了几处改动:
      

  29.   

    1.$result=mysql_query($strsql,$dbh);改为:$result2=mysql_query($strsql,$sql);
    2.对表进行处理谢谢 _Shakespeare(网络骑士),以后有事到asp版来找我,呵呵