/[LeafOK_CVS]/fenglin/bbs/reguser_service.php
ViewVC logotype

Annotation of /fenglin/bbs/reguser_service.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations)
Mon Mar 31 14:13:22 2025 UTC (11 months, 2 weeks ago) by sysadm
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
FILE REMOVED
Move reguser_service.php to reg_user_service.php
Refine and fix bug

1 sysadm 1.1 <?
2     require_once "../lib/common.inc.php";
3     require_once "../lib/str_process.inc.php";
4     require_once "../lib/vn_gif.inc.php";
5     require_once "../lib/passwd.inc.php";
6     require_once "../lib/db_open.inc.php";
7     require_once "./session_init.inc.php";
8     require_once "./send_mail.inc.php";
9     require_once "./reg_check.inc.php";
10    
11     $data = json_decode(file_get_contents("php://input"), true);
12    
13     $username = (isset($data["username"]) ? $data["username"] : "");
14     $nickname = (isset($data["nickname"]) ? $data["nickname"] : "");
15     $realname = (isset($data["realname"]) ? trim($data["realname"]) : "");
16     $gender = (isset($data["gender"]) ? $data["gender"] : "");
17     $gender_public = (isset($data["gender_public"]) && $data["gender_public"] == "1" ? 1 : 0);
18     $email = (isset($data["email"]) ? $data["email"] : "");
19     $year = (isset($data["year"]) ? intval($data["year"]) : 0);
20     $month = (isset($data["month"]) ? intval($data["month"]) : 0);
21     $day = (isset($data["day"]) ? intval($data["day"]) : 0);
22     $qq = (isset($data["qq"]) ? $data["qq"] : "");
23     $agreement = (isset($data["agreement"]) && $data["agreement"] == "1");
24     $vn_str = (isset($data["vn_str"]) ? $data["vn_str"] : "");
25    
26     $result_set = array(
27     "return" => array(
28     "code" => 0,
29     "message" => "",
30     "errorFields" => array(),
31     )
32     );
33    
34     header("Content-Type:application/json; charset=utf-8");
35    
36     // Validate input data
37    
38     if (!preg_match("/^[A-Za-z][A-Za-z0-9]{4,11}$/", $username))
39     {
40     $result_set["return"]["code"] = -1;
41     array_push($result_set["return"]["errorFields"], array(
42     "id" => "username",
43     "errMsg" => "不符合格式要求",
44     ));
45     }
46     else if (!check_str($username))
47     {
48     $result_set["return"]["code"] = -1;
49     array_push($result_set["return"]["errorFields"], array(
50     "id" => "username",
51     "errMsg" => "用户名不可用",
52     ));
53     }
54    
55     if ($nickname == "" || preg_match("/[[:space:]]/", $nickname) || str_length($nickname) > 20)
56     {
57     $result_set["return"]["code"] = -1;
58     array_push($result_set["return"]["errorFields"], array(
59     "id" => "nickname",
60     "errMsg" => "不符合格式要求",
61     ));
62     }
63     else if (!check_str($nickname))
64     {
65     $result_set["return"]["code"] = -1;
66     array_push($result_set["return"]["errorFields"], array(
67     "id" => "nickname",
68     "errMsg" => "昵称不可用",
69     ));
70     }
71    
72     if ($realname == "" || preg_match("/[\t\r\n]/", $realname) || str_length($realname) > 10)
73     {
74     $result_set["return"]["code"] = -1;
75     array_push($result_set["return"]["errorFields"], array(
76     "id" => "realname",
77     "errMsg" => "不符合格式要求",
78     ));
79     }
80    
81     if ($gender != "M" && $gender != "F")
82     {
83     $result_set["return"]["code"] = -1;
84     array_push($result_set["return"]["errorFields"], array(
85     "id" => "gender",
86     "errMsg" => "未指定性别",
87     ));
88     }
89    
90     if (!preg_match("/^[A-Za-z0-9_.-]+@([A-Za-z0-9-]+[.])+[A-Za-z0-9-]+$/", $email))
91     {
92     $result_set["return"]["code"] = -1;
93     array_push($result_set["return"]["errorFields"], array(
94     "id" => "email",
95     "errMsg" => "不符合格式要求",
96     ));
97     }
98    
99     if (!checkdate($month, $day, $year))
100     {
101     $result_set["return"]["code"] = -1;
102     array_push($result_set["return"]["errorFields"], array(
103     "id" => "birthday",
104     "errMsg" => "非法日期",
105     ));
106     }
107     else if ((new DateTimeImmutable("$year-$month-$day")) > (new DateTimeImmutable("-16 year")))
108     {
109     $result_set["return"]["code"] = -1;
110     array_push($result_set["return"]["errorFields"], array(
111     "id" => "birthday",
112     "errMsg" => "需年满16周岁才能注册",
113     ));
114     }
115    
116     if ($qq != "" && !preg_match("/^[0-9]{5,11}$/", $qq))
117     {
118     $result_set["return"]["code"] = -1;
119     array_push($result_set["return"]["errorFields"], array(
120     "id" => "qq",
121     "errMsg" => "不符合格式要求",
122     ));
123     }
124    
125     if (!$agreement)
126     {
127     $result_set["return"]["code"] = -1;
128     array_push($result_set["return"]["errorFields"], array(
129     "id" => "agreement",
130     "errMsg" => "请仔细阅读并确认同意《用户许可协议》",
131     ));
132     }
133    
134     if ((!isset($_SESSION["BBS_reg_vn_str"])) || $_SESSION["BBS_reg_vn_str"] == "" || VN_check($_SESSION["BBS_reg_vn_str"], $vn_str) != 0)
135     {
136     $result_set["return"]["code"] = -1;
137     array_push($result_set["return"]["errorFields"], array(
138     "id" => "vn_str",
139     "errMsg" => "验证码错误",
140     ));
141     }
142    
143     if ($result_set["return"]["code"] != 0)
144     {
145     mysqli_close($db_conn);
146     exit(json_encode($result_set));
147     }
148    
149     // Check availability of username and nickname
150     $rs = mysqli_query($db_conn, "SET autocommit=0");
151     if ($rs == false)
152     {
153     $result_set["return"]["code"] = -2;
154     $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
155     }
156    
157     $rs = mysqli_query($db_conn, "BEGIN");
158     if ($rs == false)
159     {
160     $result_set["return"]["code"] = -2;
161     $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
162     }
163    
164     $sql = "SELECT UID FROM user_list WHERE username = '" .
165     mysqli_real_escape_string($db_conn, $username) . "'";
166    
167     $rs = mysqli_query($db_conn, $sql);
168     if ($rs == false)
169     {
170     $result_set["return"]["code"] = -2;
171     $result_set["return"]["message"] = "Query user list error: " . mysqli_error($db_conn);
172     array_push($result_set["return"]["errorFields"], array(
173     "id" => "username",
174     "errMsg" => "内部错误",
175     ));
176     }
177     else
178     {
179     if (mysqli_num_rows($rs) > 0)
180     {
181     $result_set["return"]["code"] = -1;
182     array_push($result_set["return"]["errorFields"], array(
183     "id" => "username",
184     "errMsg" => "用户名已存在",
185     ));
186     }
187     mysqli_free_result($rs);
188     }
189    
190     $sql = "SELECT UID FROM user_nickname WHERE nickname = '" .
191     mysqli_real_escape_string($db_conn, $nickname) . "'";
192    
193     $rs = mysqli_query($db_conn, $sql);
194     if ($rs == false)
195     {
196     $result_set["return"]["code"] = -2;
197     $result_set["return"]["message"] = "Query user nickname error: " . mysqli_error($db_conn);
198     array_push($result_set["return"]["errorFields"], array(
199     "id" => "nickname",
200     "errMsg" => "内部错误",
201     ));
202     }
203     else
204     {
205     if (mysqli_num_rows($rs) > 0)
206     {
207     $result_set["return"]["code"] = -1;
208     array_push($result_set["return"]["errorFields"], array(
209     "id" => "nickname",
210     "errMsg" => "昵称已存在",
211     ));
212     }
213     mysqli_free_result($rs);
214     }
215    
216     $sql = "SELECT UID FROM user_pubinfo WHERE email = '" .
217     mysqli_real_escape_string($db_conn, $email) . "'";
218    
219     $rs = mysqli_query($db_conn, $sql);
220     if ($rs == false)
221     {
222     $result_set["return"]["code"] = -2;
223     $result_set["return"]["message"] = "Query user email error: " . mysqli_error($db_conn);
224     array_push($result_set["return"]["errorFields"], array(
225     "id" => "email",
226     "errMsg" => "内部错误",
227     ));
228     }
229     else
230     {
231     if (mysqli_num_rows($rs) >= 3)
232     {
233     $result_set["return"]["code"] = -1;
234     array_push($result_set["return"]["errorFields"], array(
235     "id" => "email",
236     "errMsg" => "该邮箱的使用次数已超过限制",
237     ));
238     }
239     mysqli_free_result($rs);
240     }
241    
242     if ($result_set["return"]["code"] != 0)
243     {
244     mysqli_close($db_conn);
245     exit(json_encode($result_set));
246     }
247    
248     // Create new user
249     $temp_password = gen_passwd(10);
250    
251     $sql = "INSERT INTO user_list(username, temp_password) values('$username', '$temp_password')";
252    
253     $rs = mysqli_query($db_conn, $sql);
254     if ($rs == false)
255     {
256     $result_set["return"]["code"] = -2;
257     $result_set["return"]["message"] = "Add user list error: " . mysqli_error($db_conn);
258     array_push($result_set["return"]["errorFields"], array(
259     "id" => "username",
260     "errMsg" => "内部错误",
261     ));
262    
263     mysqli_close($db_conn);
264     exit(json_encode($result_set));
265     }
266    
267     $uid = mysqli_insert_id($db_conn);
268    
269     $sql = "INSERT INTO user_reginfo(UID, name, birthday, signup_dt, signup_ip) VALUES($uid, '" .
270     mysqli_real_escape_string($db_conn, $realname) . "', '$year-$month-$day', NOW(), '".
271     client_addr() . "')";
272    
273     $rs = mysqli_query($db_conn, $sql);
274     if ($rs == false)
275     {
276     $result_set["return"]["code"] = -2;
277     $result_set["return"]["message"] = "Add user reginfo error: " . mysqli_error($db_conn);
278     array_push($result_set["return"]["errorFields"], array(
279     "id" => "realname",
280     "errMsg" => "内部错误",
281     ));
282    
283     mysqli_close($db_conn);
284     exit(json_encode($result_set));
285     }
286    
287     $sql = "INSERT INTO user_pubinfo(UID, nickname, email, gender, qq, gender_pub, last_login_dt) VALUES($uid, '" .
288     mysqli_real_escape_string($db_conn, $nickname) . "', '$email', '$gender', '$qq', $gender_public, NOW())";
289    
290     $rs = mysqli_query($db_conn, $sql);
291     if ($rs == false)
292     {
293     $result_set["return"]["code"] = -2;
294     $result_set["return"]["message"] = "Add user pubinfo error: " . mysqli_error($db_conn);
295     array_push($result_set["return"]["errorFields"], array(
296     "id" => "nickname",
297     "errMsg" => "内部错误",
298     ));
299    
300     mysqli_close($db_conn);
301     exit(json_encode($result_set));
302     }
303    
304     $sql = "INSERT INTO user_nickname(UID, nickname, begin_dt, begin_reason) VALUES($uid, '" .
305     mysqli_real_escape_string($db_conn, $nickname) . "', NOW(), 'R')";
306    
307     $rs = mysqli_query($db_conn, $sql);
308     if ($rs == false)
309     {
310     $result_set["return"]["code"] = -2;
311     $result_set["return"]["message"] = "Add user nickname error: " . mysqli_error($db_conn);
312     array_push($result_set["return"]["errorFields"], array(
313     "id" => "nickname",
314     "errMsg" => "内部错误",
315     ));
316    
317     mysqli_close($db_conn);
318     exit(json_encode($result_set));
319     }
320    
321     // Send initial password via email
322     $from = "";
323     $fromname = $BBS_name;
324     $to = $email;
325     $toname = $nickname;
326     $subject = $BBS_name . "注册确认";
327     $body = $nickname . ":\n 您好!\n" .
328     " 您的初始密码是: $temp_password (区分大小写)\n".
329     " 请访问以下链接进行登录并在首次登录时修改密码:\n".
330     "https://$BBS_host_name/bbs/\n\n".
331     " 感谢您的大力支持!\n\n".
332     $BBS_name . "\n" . date("Y年m月d日") . "\n";
333    
334     $ret = send_mail($from, $fromname, $to, $toname, $subject, $body, $db_conn);
335     if ($ret == false)
336     {
337     $result_set["return"]["code"] = -2;
338     $result_set["return"]["message"] = "Add email error: " . mysqli_error($db_conn);
339     array_push($result_set["return"]["errorFields"], array(
340     "id" => "email",
341     "errMsg" => "内部错误",
342     ));
343    
344     mysqli_close($db_conn);
345     exit(json_encode($result_set));
346     }
347    
348     // Commit transaction
349     $rs = mysqli_query($db_conn, "COMMIT");
350     if ($rs == false)
351     {
352     $result_set["return"]["code"] = -2;
353     $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
354    
355     array_push($result_set["return"]["errorFields"], array(
356     "id" => "username",
357     "errMsg" => "内部错误",
358     ));
359     }
360    
361     mysqli_close($db_conn);
362     exit(json_encode($result_set));
363     ?>

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1