发布PHP-MySQL注册表单

时间:2011-08-30 12:13:49

标签: php mysql forms mysqli

表单提交后,浏览器只显示空白页面。没有其他的。我已启用错误报告。 php日志中没有错误。也试过(如你所见)echo $sql; die();。仍然没有结果。怎么解决?我的代码出了什么问题?我的PHP代码(处理注册表单数据)看起来像那样

<?php
require '../includes/db.php';
require '../includes/ipurl.php';
require '../includes/common.php';
$page = 'signup';
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit( );
}


if ($_POST['submit'] == 'Tamam') {
    $err = array( );
    foreach ($_POST as $key => $value) {
        $data[$key] = filter($value);
    }
    if (empty($data['fname']) || strlen($data['fname']) < 2 || empty($data['mname']) || strlen($data['mname']) < 2 || empty($data['lname']) || strlen($data['lname']) < 2) {
        $err[ ] = 1;
    }

    if (!isUserID($data['login'])) {
        $err[ ] = 2;
    }

    if (!isEmail($data['email'])) {
        $err[ ] = 3;
    }

    if (!checkPwd($data['pwd'], $data['pwd2'])) {
        $err[ ] = 4;
    }

    $pwd = PwdHash($data['pwd']);

    $host       = $_SERVER['HTTP_HOST'];
    $host_upper = strtoupper($host);
    $path       = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');

    $activ_code = rand(1000, 9999);

    $email = $data['email'];
    $login = $data['login'];
    $dob   = date('Y-m-d', strtotime($data['dob']));
    $age   = date("Y") - date('Y', strtotime($data['dob']));
    $type  = $data['type'];


    $rs_duplicate = $db->query("select count(*) as total from users where email='$email' OR login='$login'") or die($db->error);
    list($total) = $rs_duplicate->fetch_row();

    if ($total > 0) {
        $err[ ] = 5;
    }

    if (isset($type)) {
        if ($type == 1) {
            $region     = $data['region'];
            $school     = $data['school'];
            $class      = $data['class'];
            $group      = 0;
            $subject    = 0;
            $university = 0;
            $profession = 0;
        }
        if ($type == 2) {
            $group      = $data['group'];
            $region     = $data['region'];
            $school     = $data['school'];
            $class      = $data['class'];
            $subject    = 0;
            $university = 0;
            $profession = 0;

        }
        if ($type == 3) {
            $group      = 0;
            $region     = 0;
            $school     = 0;
            $class      = 0;
            $subject    = 0;
            $university = $data['university'];
            $profession = $data['profession'];
        }
        if ($type == 4) {
            $group      = 0;
            $region     = 0;
            $school     = 0;
            $class      = 0;
            $university = 0;
            $profession = 0;
            $subject    = $data['subject'];
        }
    }
    if (!isset($type)) {
        $err[ ] = 9;
    }
    if (empty($err)) {
        $sql = "INSERT INTO users
(level,fname, mname, lname, dob, age, reg_date, phone, email, login, pwd, type, `group`, region, school, class, ip, subject, ban, university, profession, activation_code) 
VALUES 
('1','$data[fname]', '$data[mname]', '$data[lname]', '$dob', '$age', now(), '$data[phone]', '$email', '$login', '$pwd', '$type', '$group', '$region', '$school', '$class',  '$ip', '$subject', NULL, '$university', '$profession', '$activ_code')";
        echo $sql; die();
        $result = $db->query($sql) or die(printf("Bazaya daxiletmə zamanı səhv: %s\n", $db->error));
        $id     = $db->insert_id;
        $md5_id = md5($id);
        $db->query("update users set md5_id='$md5_id' where id='$id'") or die(printf("Bazaya daxiletmə zamanı səhv: %s\n", $db->error));
        include "../includes/success.php";
    }

} else if (!empty($err)) {
    include "../includes/error.php";
}
?>

顺便提一下filter来自common.php消毒所有帖子

的方式
function filter($data) {
    $data = trim(htmlentities(strip_tags($data)));

    if (get_magic_quotes_gpc())
        $data = stripslashes($data);

    $data = mysql_real_escape_string($data);

    return $data;
}

2 个答案:

答案 0 :(得分:2)

我认为在检查是否存在任何错误之后,您应该检查非空错误数组,然后向上移动一步。

    ...
    if (empty($err)) {
        $sql = "INSERT INTO users
(level,fname, mname, lname, dob, age, reg_date, phone, email, login, pwd, type, `group`, region, school, class, ip, subject, ban, university, profession, activation_code) 
VALUES 
('1','$data[fname]', '$data[mname]', '$data[lname]', '$dob', '$age', now(), '$data[phone]', '$email', '$login', '$pwd', '$type', '$group', '$region', '$school', '$class',  '$ip', '$subject', NULL, '$university', '$profession', '$activ_code')";
        echo $sql; die();
        $result = $db->query($sql) or die(printf("Bazaya daxiletmə zamanı səhv: %s\n", $db->error));
        $id     = $db->insert_id;
        $md5_id = md5($id);
        $db->query("update users set md5_id='$md5_id' where id='$id'") or die(printf("Bazaya daxiletmə zamanı səhv: %s\n", $db->error));
        include "../includes/success.php";
    } else if (!empty($err)) {
        include "../includes/error.php";
    }
}

答案 1 :(得分:2)

我强烈建议在开发计算机上安装XDebug,并使用像NetBeans,Eclipse PDT甚至更好的PHPStorm这样的IDE来尝试在代码中设置断点,并查看它在什么时候断开。

您可以在此处获取XDebug:http://xdebug.org

或者,退后一步,添加以下行

exit("i was here!");

在第1行,首先确定脚本是否实际正在运行,如果您可以逐步查看输出,请将其向下移动一行,保存并重新运行脚本,冲洗并重复直至其中断。

我想也是如此,虽然你打开了错误报告,但是在你所包含的3个文件中的任何一个文件中都可能有一行代码会再次关闭它,就像在这个代码片段中一样:

error_reporting(0);

甚至:

ini_set('display_errors','Off');