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

Contents of /fenglin/bbs/reguser_service.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show 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 <?
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