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

Contents of /fenglin/bbs/update_profile_service.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (show annotations)
Wed Apr 16 01:51:52 2025 UTC (11 months ago) by sysadm
Branch: MAIN
Changes since 1.6: +3 -2 lines
Add DB lock

1 <?
2 require_once "../lib/common.inc.php";
3 require_once "../lib/db_open.inc.php";
4 require_once "../lib//score_change.inc.php";
5 require_once "../lib/send_mail.inc.php";
6 require_once "../lib/str_process.inc.php";
7 require_once "../lib/passwd.inc.php";
8 require_once "./common_lib.inc.php";
9 require_once "./session_init.inc.php";
10 require_once "./reg_check.inc.php";
11
12 force_login();
13
14 $data = json_decode(file_get_contents("php://input"), true);
15
16 $nickname = (isset($data["nickname"]) ? trim($data["nickname"]) : "");
17 $realname = (isset($data["realname"]) ? trim($data["realname"]) : "");
18 $gender = (isset($data["gender"]) ? $data["gender"] : "");
19 $gender_public = (isset($data["gender_public"]) && $data["gender_public"] == "1" ? 1 : 0);
20 $email = (isset($data["email"]) ? trim($data["email"]) : "");
21 $year = (isset($data["year"]) ? intval($data["year"]) : 0);
22 $month = (isset($data["month"]) ? intval($data["month"]) : 0);
23 $day = (isset($data["day"]) ? intval($data["day"]) : 0);
24 $qq = (isset($data["qq"]) ? trim($data["qq"]) : "");
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 if ($nickname == "" || preg_match("/[[:space:]]/", $nickname) || str_length($nickname) > 20)
38 {
39 $result_set["return"]["code"] = -1;
40 array_push($result_set["return"]["errorFields"], array(
41 "id" => "nickname",
42 "errMsg" => "不符合格式要求",
43 ));
44 }
45 else if (!check_str($nickname) && !$_SESSION["BBS_priv"]->checklevel(P_ADMIN_M | P_ADMIN_S))
46 {
47 $result_set["return"]["code"] = -1;
48 array_push($result_set["return"]["errorFields"], array(
49 "id" => "nickname",
50 "errMsg" => "昵称不可用",
51 ));
52 }
53
54 if ($realname == "" || preg_match("/[\t\r\n]/", $realname) || str_length($realname) > 10)
55 {
56 $result_set["return"]["code"] = -1;
57 array_push($result_set["return"]["errorFields"], array(
58 "id" => "realname",
59 "errMsg" => "不符合格式要求",
60 ));
61 }
62
63 if ($gender != "M" && $gender != "F")
64 {
65 $result_set["return"]["code"] = -1;
66 array_push($result_set["return"]["errorFields"], array(
67 "id" => "gender",
68 "errMsg" => "未指定性别",
69 ));
70 }
71
72 if (!preg_match("/^[A-Za-z0-9_.-]+@([A-Za-z0-9-]+[.])+[A-Za-z0-9-]+$/", $email))
73 {
74 $result_set["return"]["code"] = -1;
75 array_push($result_set["return"]["errorFields"], array(
76 "id" => "email",
77 "errMsg" => "不符合格式要求",
78 ));
79 }
80
81 if (!checkdate($month, $day, $year))
82 {
83 $result_set["return"]["code"] = -1;
84 array_push($result_set["return"]["errorFields"], array(
85 "id" => "birthday",
86 "errMsg" => "非法日期",
87 ));
88 }
89 else if ((new DateTimeImmutable("$year-$month-$day")) > (new DateTimeImmutable("-16 year")))
90 {
91 $result_set["return"]["code"] = -1;
92 array_push($result_set["return"]["errorFields"], array(
93 "id" => "birthday",
94 "errMsg" => "需年满16周岁才能使用本站服务",
95 ));
96 }
97
98 if ($qq != "" && !preg_match("/^[0-9]{5,11}$/", $qq))
99 {
100 $result_set["return"]["code"] = -1;
101 array_push($result_set["return"]["errorFields"], array(
102 "id" => "qq",
103 "errMsg" => "不符合格式要求",
104 ));
105 }
106
107 if ($result_set["return"]["code"] != 0)
108 {
109 mysqli_close($db_conn);
110 exit(json_encode($result_set));
111 }
112
113 // Secure SQL statement
114 $nickname = mysqli_real_escape_string($db_conn, $nickname);
115 $realname = mysqli_real_escape_string($db_conn, $realname);
116
117 // Begin transaction
118 $rs = mysqli_query($db_conn, "SET autocommit=0");
119 if ($rs == false)
120 {
121 $result_set["return"]["code"] = -2;
122 $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
123
124 mysqli_close($db_conn);
125 exit(json_encode($result_set));
126 }
127
128 $rs = mysqli_query($db_conn, "BEGIN");
129 if ($rs == false)
130 {
131 $result_set["return"]["code"] = -2;
132 $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
133
134 mysqli_close($db_conn);
135 exit(json_encode($result_set));
136 }
137
138 $sql = "SELECT nickname, email FROM user_pubinfo WHERE UID = " . $_SESSION["BBS_uid"] .
139 " FOR UPDATE";
140
141 $rs = mysqli_query($db_conn, $sql);
142 if ($rs == false)
143 {
144 $result_set["return"]["code"] = -2;
145 $result_set["return"]["message"] = "Query user info error: " . mysqli_error($db_conn);
146
147 mysqli_close($db_conn);
148 exit(json_encode($result_set));
149 }
150
151 if ($row = mysqli_fetch_array($rs))
152 {
153 $old_nickname = $row["nickname"];
154 $old_email = $row["email"];
155 }
156 else
157 {
158 $result_set["return"]["code"] = -2;
159 $result_set["return"]["message"] = "个人资料不存在";
160
161 mysqli_close($db_conn);
162 exit(json_encode($result_set));
163 }
164
165 mysqli_free_result($rs);
166
167 // Update nickname
168 if ($old_nickname != $nickname)
169 {
170 $sql = "SELECT DISTINCT UID FROM user_nickname WHERE nickname = '$nickname'";
171
172 $rs = mysqli_query($db_conn, $sql);
173 if ($rs == false)
174 {
175 $result_set["return"]["code"] = -2;
176 $result_set["return"]["message"] = "Query nickname error: " . mysqli_error($db_conn);
177
178 mysqli_close($db_conn);
179 exit(json_encode($result_set));
180 }
181
182 $free_change = false;
183 if ($row = mysqli_fetch_array($rs))
184 {
185 if ($row["UID"] == $_SESSION["BBS_uid"]) // Re-use old nickname
186 {
187 $free_change = true;
188 }
189 else // Unavailable nickname
190 {
191 $result_set["return"]["code"] = -1;
192 array_push($result_set["return"]["errorFields"], array(
193 "id" => "nickname",
194 "errMsg" => "昵称已存在",
195 ));
196
197 mysqli_close($db_conn);
198 exit(json_encode($result_set));
199 }
200 }
201 mysqli_free_result($rs);
202
203 if (!$free_change)
204 {
205 $ret = score_change($_SESSION["BBS_uid"], -abs($BBS_nickname_change_fee), "更改昵称", $db_conn);
206 if ($ret < 0)
207 {
208 $result_set["return"]["code"] = -2;
209 $result_set["return"]["message"] = "Query score error: " . mysqli_error($db_conn);
210
211 mysqli_close($db_conn);
212 exit(json_encode($result_set));
213 }
214 else if ($ret > 0)
215 {
216 $result_set["return"]["code"] = -1;
217 array_push($result_set["return"]["errorFields"], array(
218 "id" => "nickname",
219 "errMsg" => "积分不足",
220 ));
221
222 mysqli_close($db_conn);
223 exit(json_encode($result_set));
224 }
225 }
226
227 $sql = "UPDATE user_nickname SET end_dt = NOW(), end_reason = 'C'
228 WHERE UID = " . $_SESSION["BBS_uid"] . " AND end_dt IS NULL";
229
230 $rs = mysqli_query($db_conn, $sql);
231 if ($rs == false)
232 {
233 $result_set["return"]["code"] = -2;
234 $result_set["return"]["message"] = "Update old nickname error: " . mysqli_error($db_conn);
235
236 mysqli_close($db_conn);
237 exit(json_encode($result_set));
238 }
239
240 $sql = "INSERT INTO user_nickname(UID, nickname, begin_dt, begin_reason)
241 VALUES(" . $_SESSION["BBS_uid"] . ", '$nickname', NOW(), 'C')";
242
243 $rs = mysqli_query($db_conn, $sql);
244 if ($rs == false)
245 {
246 $result_set["return"]["code"] = -2;
247 $result_set["return"]["message"] = "Insert new nickname error: " . mysqli_error($db_conn);
248
249 mysqli_close($db_conn);
250 exit(json_encode($result_set));
251 }
252
253 $sql = "UPDATE user_pubinfo SET nickname = '$nickname' WHERE UID = " .
254 $_SESSION["BBS_uid"];
255
256 $rs = mysqli_query($db_conn, $sql);
257 if ($rs == false)
258 {
259 $result_set["return"]["code"] = -2;
260 $result_set["return"]["message"] = "Update nickname error: " . mysqli_error($db_conn);
261
262 mysqli_close($db_conn);
263 exit(json_encode($result_set));
264 }
265 }
266
267 // Update email
268 if ($old_email != $email)
269 {
270 $sql = "SELECT UID FROM user_pubinfo WHERE email = '$email' FOR SHARE";
271
272 $rs = mysqli_query($db_conn, $sql);
273 if ($rs == false)
274 {
275 $result_set["return"]["code"] = -2;
276 $result_set["return"]["message"] = "Query user email error: " . mysqli_error($db_conn);
277
278 mysqli_close($db_conn);
279 exit(json_encode($result_set));
280 }
281
282 if (mysqli_num_rows($rs) >= $BBS_max_user_per_email)
283 {
284 $result_set["return"]["code"] = -1;
285 array_push($result_set["return"]["errorFields"], array(
286 "id" => "email",
287 "errMsg" => "该邮箱的使用次数已超过限制",
288 ));
289
290 mysqli_close($db_conn);
291 exit(json_encode($result_set));
292 }
293 mysqli_free_result($rs);
294
295 // Generate verify code
296 $verify_code = gen_passwd(10);
297
298 $sql = "INSERT INTO user_modify_email_verify (UID, email, verify_code, dt, ip) VALUES(" .
299 $_SESSION["BBS_uid"] . ", '$email', '$verify_code', NOW(), '" . client_addr() . "')";
300
301 $rs = mysqli_query($db_conn, $sql);
302 if ($rs == false)
303 {
304 $result_set["return"]["code"] = -2;
305 $result_set["return"]["message"] = "Update email error: " . mysqli_error($db_conn);
306
307 mysqli_close($db_conn);
308 exit(json_encode($result_set));
309 }
310
311 //Send mail
312 $from = "";
313 $fromname = $BBS_name;
314 $to = $email;
315 $toname = $_SESSION["BBS_username"];
316 $subject = $BBS_name . "修改邮件地址确认";
317 $body = $_SESSION["BBS_username"] . ":\n 您好!\n" .
318 " 请访问以下链接确认更改注册邮件地址:\n" .
319 "https://$BBS_host_name/bbs/modify_email_verify.php?code=$verify_code\n\n" .
320 " 感谢您的大力支持!\n\n" .
321 $BBS_name . "\n" . date("Y年m月d日") . "\n";
322
323 $ret = send_mail($from, $fromname, $to, $toname, $subject, $body, $db_conn);
324 if ($ret == false)
325 {
326 $result_set["return"]["code"] = -2;
327 $result_set["return"]["message"] = "Add email error: " . mysqli_error($db_conn);
328
329 mysqli_close($db_conn);
330 exit(json_encode($result_set));
331 }
332 }
333
334 $sql = "UPDATE user_reginfo SET name = '$realname',
335 birthday = '$year-$month-$day', signup_ip='" . client_addr() .
336 "' WHERE UID = " . $_SESSION["BBS_uid"];
337
338 $rs = mysqli_query($db_conn, $sql);
339 if ($rs == false)
340 {
341 $result_set["return"]["code"] = -2;
342 $result_set["return"]["message"] = "Update user reginfo error: " . mysqli_error($db_conn);
343
344 mysqli_close($db_conn);
345 exit(json_encode($result_set));
346 }
347
348 $sql = "UPDATE user_pubinfo SET gender = '$gender', gender_pub = $gender_public,
349 qq = '$qq' WHERE UID =" . $_SESSION["BBS_uid"];
350
351 $rs = mysqli_query($db_conn, $sql);
352 if ($rs == false)
353 {
354 $result_set["return"]["code"] = -2;
355 $result_set["return"]["message"] = "Update user pubinfo error: " . mysqli_error($db_conn);
356
357 mysqli_close($db_conn);
358 exit(json_encode($result_set));
359 }
360
361 $sql = "INSERT INTO user_modify_log(UID, modify_dt, modify_ip, complete) VALUES(".
362 $_SESSION["BBS_uid"] . ", NOW(), '" . client_addr() . "', 1)";
363
364 $rs = mysqli_query($db_conn, $sql);
365 if ($rs == false)
366 {
367 $result_set["return"]["code"] = -2;
368 $result_set["return"]["message"] = "Add log error: " . mysqli_error($db_conn);
369
370 mysqli_close($db_conn);
371 exit(json_encode($result_set));
372 }
373
374 //Send mail
375 $from = "";
376 $fromname = $BBS_name;
377 $to = $old_email;
378 $toname = $_SESSION["BBS_username"];
379 $subject = $BBS_name . "用户资料更改通知";
380 $body = $_SESSION["BBS_username"] . ":\n 您好!\n" .
381 " 您在本站的注册资料已经于" . date("Y年m月d日 H:i:s") . "更改。\n" .
382 " 为了您的个人资料的安全,如果此情况与事实不符,请立即与我们联系。\n\n" .
383 $BBS_name . "\n" . date("Y年m月d日") . "\n";
384
385 $ret = send_mail($from, $fromname, $to, $toname, $subject, $body, $db_conn);
386 if ($ret == false)
387 {
388 $result_set["return"]["code"] = -2;
389 $result_set["return"]["message"] = "Add email error: " . mysqli_error($db_conn);
390
391 mysqli_close($db_conn);
392 exit(json_encode($result_set));
393 }
394
395 // Commit transaction
396 $rs = mysqli_query($db_conn, "COMMIT");
397 if ($rs == false)
398 {
399 $result_set["return"]["code"] = -2;
400 $result_set["return"]["message"] = "Mysqli error: " . mysqli_error($db_conn);
401
402 mysqli_close($db_conn);
403 exit(json_encode($result_set));
404 }
405
406 mysqli_close($db_conn);
407 exit(json_encode($result_set));
408 ?>

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