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

Diff of /fenglin/bbs/update_profile_service.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.1 by sysadm, Mon Mar 31 14:15:24 2025 UTC Revision 1.7 by sysadm, Wed Apr 16 01:51:52 2025 UTC
# Line 1  Line 1 
1  <?  <?
2          require_once "../lib/common.inc.php";          require_once "../lib/common.inc.php";
3          require_once "../lib/db_open.inc.php";          require_once "../lib/db_open.inc.php";
4            require_once "../lib//score_change.inc.php";
5          require_once "../lib/send_mail.inc.php";          require_once "../lib/send_mail.inc.php";
6          require_once "../lib/str_process.inc.php";          require_once "../lib/str_process.inc.php";
7          require_once "../lib/passwd.inc.php";          require_once "../lib/passwd.inc.php";
8          require_once "./common_lib.inc.php";          require_once "./common_lib.inc.php";
9          require_once "./session_init.inc.php";          require_once "./session_init.inc.php";
10            require_once "./reg_check.inc.php";
11    
12          force_login();          force_login();
13    
14          $data = json_decode(file_get_contents("php://input"), true);          $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"]) : "");          $realname = (isset($data["realname"]) ? trim($data["realname"]) : "");
18          $gender = (isset($data["gender"]) ? $data["gender"] : "");          $gender = (isset($data["gender"]) ? $data["gender"] : "");
19          $gender_public = (isset($data["gender_public"]) && $data["gender_public"] == "1" ? 1 : 0);          $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);          $year = (isset($data["year"]) ? intval($data["year"]) : 0);
22          $month = (isset($data["month"]) ? intval($data["month"]) : 0);          $month = (isset($data["month"]) ? intval($data["month"]) : 0);
23          $day = (isset($data["day"]) ? intval($data["day"]) : 0);          $day = (isset($data["day"]) ? intval($data["day"]) : 0);
24          $qq = (isset($data["qq"]) ? $data["qq"] : "");          $qq = (isset($data["qq"]) ? trim($data["qq"]) : "");
25    
26          $result_set = array(          $result_set = array(
27                  "return" => array(                  "return" => array(
# Line 30  Line 34 
34          header("Content-Type:application/json; charset=utf-8");          header("Content-Type:application/json; charset=utf-8");
35    
36          // Validate input data          // 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)          if ($realname == "" || preg_match("/[\t\r\n]/", $realname) || str_length($realname) > 10)
55          {          {
56                  $result_set["return"]["code"] = -1;                  $result_set["return"]["code"] = -1;
# Line 48  Line 69 
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))          if (!checkdate($month, $day, $year))
82          {          {
83                  $result_set["return"]["code"] = -1;                  $result_set["return"]["code"] = -1;
# Line 80  Line 110 
110                  exit(json_encode($result_set));                  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          // Begin transaction
118          $rs = mysqli_query($db_conn, "SET autocommit=0");          $rs = mysqli_query($db_conn, "SET autocommit=0");
119          if ($rs == false)          if ($rs == false)
# Line 101  Line 135 
135                  exit(json_encode($result_set));                  exit(json_encode($result_set));
136          }          }
137    
138          $sql = "SELECT email FROM user_pubinfo WHERE UID = " . $_SESSION["BBS_uid"];          $sql = "SELECT nickname, email FROM user_pubinfo WHERE UID = " . $_SESSION["BBS_uid"] .
139                            " FOR UPDATE";
140    
141          $rs = mysqli_query($db_conn, $sql);          $rs = mysqli_query($db_conn, $sql);
142          if ($rs == false)          if ($rs == false)
# Line 113  Line 148 
148                  exit(json_encode($result_set));                  exit(json_encode($result_set));
149          }          }
150    
151          if($row = mysqli_fetch_array($rs))          if ($row = mysqli_fetch_array($rs))
152          {          {
153                  $email = $row["email"];                  $old_nickname = $row["nickname"];
154                    $old_email = $row["email"];
155          }          }
156          else          else
157          {          {
# Line 128  Line 164 
164    
165          mysqli_free_result($rs);          mysqli_free_result($rs);
166    
167          $sql = "UPDATE user_reginfo SET name = '" . mysqli_real_escape_string($db_conn, $realname) .          // Update nickname
168                          "', birthday = '$year-$month-$day', signup_ip='" . client_addr() .          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"];                          "' WHERE UID = " . $_SESSION["BBS_uid"];
337    
338          $rs = mysqli_query($db_conn, $sql);          $rs = mysqli_query($db_conn, $sql);
# Line 171  Line 374 
374          //Send mail          //Send mail
375          $from = "";          $from = "";
376          $fromname = $BBS_name;          $fromname = $BBS_name;
377          $to = $email;          $to = $old_email;
378          $toname = $_SESSION["BBS_username"];          $toname = $_SESSION["BBS_username"];
379          $subject = $BBS_name . "用户资料更改通知";          $subject = $BBS_name . "用户资料更改通知";
380          $body = $_SESSION["BBS_username"] . ":\n    您好!\n".          $body = $_SESSION["BBS_username"] . ":\n    您好!\n" .
381                          "    您在本站的注册资料已经于" . date("Y年m月d日 H:i:s") . "更改。\n".                          "    您在本站的注册资料已经于" . date("Y年m月d日 H:i:s") . "更改。\n" .
382                          "    为了您的个人资料的安全,如果此情况与事实不符,请与我们联系。\n\n".                          "    为了您的个人资料的安全,如果此情况与事实不符,请立即与我们联系。\n\n" .
383                          $BBS_name . "\n" . date("Y年m月d日") . "\n";                          $BBS_name . "\n" . date("Y年m月d日") . "\n";
384    
385          $ret = send_mail($from, $fromname, $to, $toname, $subject, $body, $db_conn);          $ret = send_mail($from, $fromname, $to, $toname, $subject, $body, $db_conn);


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

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