Advertisement
Guest User

Untitled

a guest
Feb 18th, 2018
2,444
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.57 KB | None | 0 0
  1. <?php
  2. // required headers
  3. header("Access-Control-Allow-Origin: *");
  4. header("Content-Type: application/json; charset=UTF-8");
  5.  
  6. // include database and object files
  7. include_once '../config/database.php';
  8.  
  9. // instantiate database and product object
  10. $database = new Database();
  11. $conn = $database->getConnection();
  12.  
  13. // Get post variables
  14. $username = $_POST['username'];
  15. $password = $_POST['password'];
  16. $email = $_POST['email'];
  17.  
  18. // Init error variables & flag
  19. $usernameError = $passwordError = $emailError = '';
  20. $generalError = '';
  21. $error = false;
  22.  
  23. if(isset($username) && isset($password) && isset($email)) {
  24.    
  25.     // Convert username and email to lowercase only as well as test the input
  26.     // also escape strings
  27.     $username = $conn->real_escape_string(strtolower(test_input($username)));
  28.     $email = $conn->real_escape_string(strtolower(test_input($email)));
  29.     $password = $conn->real_escape_string(test_input($password));
  30.    
  31.     /*
  32.         Test username
  33.     */
  34.     // Test username for whitespaces
  35.     if (preg_match("/\s/", $username)) {
  36.         $error = true;
  37.         $usernameError = "username can not contain any spaces";
  38.     }
  39.     // Test username for letters and number only
  40.     else if(!ctype_alnum($username)){
  41.         $error = true;
  42.         $usernameError = "username can only contain a-z, A-Z, 0-9";
  43.     }
  44.     // Check if username is taken  
  45.     else {
  46.         $sql = "SELECT USERNAME FROM users WHERE USERNAME = '$username'";           # <- Change to prepared statement if wanted... Not rly needed tho
  47.        $result = $conn->query($sql);
  48.         if ($result->num_rows > 0) {
  49.             $error = true;
  50.             $usernameError = "this username is taken";
  51.         }
  52.     }
  53.  
  54.     /*
  55.         Test password
  56.     */
  57.     if(strlen($password) < 8) {
  58.         $error = true;
  59.         $passwordError = "password must contain at least 8 characters";
  60.     }
  61.  
  62.     /*
  63.         Test email
  64.     */
  65.     // check if e-mail address is well-formed
  66.     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  67.         $error = true;
  68.         $emailError = "wrong email format";
  69.     }
  70.     //Check if email is busy
  71.     else {
  72.         $sql = "SELECT EMAIL FROM users WHERE EMAIL = '$email'";                    # <- Change to prepared statement if wanted... Not rly needed tho
  73.        $result = $conn->query($sql);
  74.         if ($result->num_rows > 0) {
  75.             $error = true;
  76.             $emailError = "there already exist a user with this email";
  77.         }
  78.     }
  79.  
  80.     // Add user to database if everything is ok
  81.     if(!$error && empty($usernameError) && empty($passwordError) && empty($emailError)) {
  82.        
  83.         $stmt = $conn->prepare("INSERT INTO users (ACTIVE, TIER, USERNAME, PASSWORD, EMAIL, IP) VALUES (?, ?, ?, ?, ?, ?)");
  84.         $stmt->bind_param("iissss", $active, $tier, $sqlUsername, $sqlPassword, $sqlEmail, $ip);
  85.  
  86.         // Set this values to new users
  87.         $active = '1';
  88.         $tier = '1';
  89.         $sqlUsername = $username;
  90.         $sqlPassword = password_hash($password, PASSWORD_BCRYPT, array('cost' => 12));
  91.         $sqlEmail = $email;
  92.         $ip = $conn->real_escape_string($_SERVER["REMOTE_ADDR"]);
  93.        
  94.         if ($stmt->execute() === TRUE) {
  95.            
  96.             //Close register statement
  97.             $stmt->close();
  98.  
  99.             //Query out user ID and create users own image folder
  100.             $stmt = $conn->prepare("SELECT ID FROM users WHERE USERNAME = ?");
  101.             $stmt->bind_param("s", $username);
  102.             $username = $username;
  103.             if(($stmt->execute()) && ($stmt->bind_result($ul_folder)) && ($stmt->fetch())){
  104.            
  105.                 //Close statement
  106.                 $stmt->close();
  107.            
  108.                 //Also create this upload folder
  109.                 mkdir('../../../uploads/'.$ul_folder);
  110.                
  111.                 //Update upload_stats table
  112.                 $stat_sql = "UPDATE upload_stats SET USERS = USERS +1 WHERE ID=1";
  113.                 $conn->query($stat_sql);
  114.  
  115.                 // Set response code to 201 and echo json response
  116.                 http_response_code(201);
  117.                 $response=array(
  118.                     "status" => "created",
  119.                     "id" => $ul_folder
  120.                 );
  121.                 echo json_encode($response);
  122.             }
  123.             else {
  124.                 $error = true;
  125.                 $generalError = "error when creating folder for user, please contact support";
  126.             }
  127.         }
  128.         else {
  129.             $error = true;
  130.             $generalError = "something went wrong in the sql query, please try again";
  131.         }
  132.     }
  133. }
  134. else {
  135.     $error = true;
  136.     $generalError = "POST variables username, password and email required";
  137. }
  138.  
  139. /*
  140.     Error response
  141. */
  142. // If an error occurred above, respond with it here
  143. if($error) {
  144.     $response=array(
  145.         "status" => "error"
  146.     );
  147.     if(strlen($generalError) > 0) {
  148.         $response['general-error'] = $generalError;
  149.     }
  150.     if(strlen($usernameError) > 0) {
  151.         $response['username-error'] = $usernameError;
  152.     }
  153.     if(strlen($passwordError) > 0) {
  154.         $response['password-error'] = $passwordError;
  155.     }
  156.     if(strlen($emailError) > 0) {
  157.         $response['email-error'] = $emailError;
  158.     }
  159.     // Set response code to 400 and echo json response
  160.     http_response_code(400);
  161.     echo json_encode($response);
  162. }
  163.  
  164. //Function to block input data from running server scripts etc.
  165. function test_input($data) {
  166.     $data = trim($data);
  167.     $data = stripslashes($data);
  168.     $data = htmlspecialchars($data);
  169.     return $data;
  170.   }
  171. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement