1、处理代码如下:
<?php
include("dbconnect.inc.php");
include("functions.inc.php");
#如果php配置中,magic_quotes_gpc没有被设置,则执行过滤字符串。
$form = check_form($_POST["edit"]);
$form["reg_time"] = date("Y-m-d H:i:s");
$form["pass"] = md5($form["pass"]);
extract($form);
$sql = "insert into users( username,password,sex,mail,tel,web,birthday,inter,intro,reg_time) ";
#这里{}符号是代表在字符串中引用当前环境的变量
$sql .= " values('{$name}',";
$sql .= " '{$pass}',";
$sql .= " '{$sex}',";
$sql .= " '{$mail}', ";
$sql .= " '{$tel}', ";
$sql .= " '{$web}', ";
$sql .= " '{$birthday}', ";
$sql .= " '{$inter}', ";
$sql .= " '{$intro}', ";
$sql .= " '{$reg_time}') ";

$res = mysql_query($sql);
if(!$res) {
die("数据库出错,请返回重试。");
}

header("Location:msg.php?m=register_success");
?>
主要是出问题在第五行
$form = check_form($_POST["edit"]);
我试了,程序运行到这一行就会出错,但又不报错,如果在这一行前加‘#’,则提示存储成功,但只有6、7行的两个字段,请各位大虾不吝赐教,以下为以上包含使用的代码。
2、dbconnect.inc.php代码
<?php
include("settings.inc.php");
#connect to db
$con = mysql_connect($dbhost,$dbuser,$dbpass);
if(!$con) die("mysql error:".mysql_error());
mysql_select_db($dbname,$con);
?>
3、functions.inc.php代码
<?php
function check_form($form) {
if(!get_magic_quotes_gpc()) {
for($i=0;$i<count($form);$i++) {
$form[$i] = addslashes($form[$i]);
}
}
return $form;
}
?>
4、settings.inc.php代码
<?php
#mysql服务器IP及数据库名
$dbhost = "localhost";
$dbname = "book";
$dbuser = "admin";
$dbpass = "123456";
?>

解决方案 »

  1.   

    print_r($_POST)看看你的表单数据结构。
      

  2.   

    我在用户名、密码、确认密码三项均输入a,在电子邮件字段输入[email protected],这四项不能为空,然后点击注册新账号调用print_r($_POSt),得到如下结果,请看能否满足:
    Array ( [edit] => Array ( [name] => a [pass] => a [pass2] => a [mail] => [email protected] [sex] => 0 [tel] => [web] => [birthday] => [inter] => [intro] => ) [op] => 注册新帐号 ) 
      

  3.   

    函数check_form改为
    function check_form($form) {
      if(!get_magic_quotes_gpc()) {
        foreach($form as $i=>$v) {
           $form[$i] = addslashes($v);
        }
      }
      return $form;
    }
      

  4.   

    传入的是个一维关联数组,所以该用foreach循环而非for循环
      

  5.   

    check_form要是个递归吧 public static function stripslashes($param)
    {
    if (is_array($param))
    {
    foreach ($param as $k => $v)
    {
    $param[$k] = self::stripslashes($v);
    }
    return $param;
    }
    else
    {
    return stripslashes($param);
    }
    }