2021-02-26, 10:01
  #1
Medlem
Jag har utgtt ifrn fljande projekt
https://phppot.com/php/user-registra...code-download/

Mrkte dock att det inte validerar eller saniterar utan stoppar in $_POST["email"] direkt efter prepare.

Om jag ska anvnda php funktionen php_var() var hade ni anvnt den i projektet? Vad tror ni om att anvnda den verst i funktionen registerMember? Eller var hade ni haft det?

Jag har gjort om nedan s jag har runt 20 input flt i mitt formulr som postas till registerMember.



Kod:
public function registerMember()
    {
        
$isUsernameExists $this->isUsernameExists($_POST["username"]);
        
$isEmailExists $this->isEmailExists($_POST["email"]);
        if (
$isUsernameExists) {
            
$response = array(
                
"status" => "error",
                
"message" => "Username already exists."
            
);
        } else if (
$isEmailExists) {
            
$response = array(
                
"status" => "error",
                
"message" => "Email already exists."
            
);
        } else {
            if (! empty(
$_POST["signup-password"])) {

                
// PHP's password_hash is the best choice to use to store passwords
                // do not attempt to do your own encryption, it is not safe
                
$hashedPassword password_hash($_POST["signup-password"], PASSWORD_DEFAULT);
            }
            
$query 'INSERT INTO tbl_member (username, password, email) VALUES (?, ?, ?)';
            
$paramType 'sss';
            
$paramValue = array(
                
$_POST["username"],
                
$hashedPassword,
                
$_POST["email"]
            );
            
$memberId $this->ds->insert($query$paramType$paramValue);
            if (! empty(
$memberId)) {
                
$response = array(
                    
"status" => "success",
                    
"message" => "You have registered successfully."
                
);
            }
        }
        return 
$response;
    } 
Citera
2021-02-26, 10:26
  #2
Medlem
SockAccounts avatar
Jag rekommenderar att du delar upp funktionen i flera delar.

Du har olika funktioner/metoder fr att sanitera inkommande vrden.
Du har en funktion fr att registrera efter sanitering.
Du har en som hanterar dessa.

osv

annars kommer du f en enorm funktion som du inte kan teranvnda.

S dela upp dem olika sakerna du behver gra i steg.
Skriv enskilda funktioner som gr just det steget
Sedan s klistrar du ihop dem.
Citera
2021-02-26, 11:08
  #3
Medlem
Citat:
Ursprungligen postat av SockAccount
Jag rekommenderar att du delar upp funktionen i flera delar.

Du har olika funktioner/metoder fr att sanitera inkommande vrden.
Du har en funktion fr att registrera efter sanitering.
Du har en som hanterar dessa.

osv

annars kommer du f en enorm funktion som du inte kan teranvnda.

S dela upp dem olika sakerna du behver gra i steg.
Skriv enskilda funktioner som gr just det steget
Sedan s klistrar du ihop dem.

Kan du ge ett exempel hur du menar istllet fr som jag tnker? Nedan r exempel p bara 5 input och hller med om ifall jag gr s med 20 input kommer funktionen bli enorm.
Kod:
public function registerMember() { 
$senderName "";
$senderCompany "";
$senderEmail "";
$phoneNumber "";
$departmentEmail "";

if (!empty(
$_POST['sender_email'])) {
    
$senderEmail str_replace(array("\r""\n""%0a""%0d"), ''$_POST['sender_email']);
    
$senderEmail filter_var($senderEmailFILTER_VALIDATE_EMAIL);
}
if(!empty(
$_POST['sender_phone_number'])) {
    
$phoneNumber filter_var($_POST['sender_phone_number'], FILTER_SANITIZE_NUMBER_INT);
}
if(!empty(
$_POST['sender_company'])) {
    
$senderCompany filter_var($_POST['sender_company'], FILTER_SANITIZE_STRING);
}

if (!
trim($_POST["department_email"] == '')) {
    
$departmentEmail str_replace(array("\r""\n""%0a""%0d"), ''$_POST['department_email']);
    
$departmentEmail filter_var($departmentEmailFILTER_VALIDATE_EMAIL);
}
//Resten av koden frn mitt frsta inlgg
//senderName senderCompany etc anvnder jag sedan i min prepare statement,  $paramValue = array( 
__________________
Senast redigerad av help 2021-02-26 kl. 11:15.
Citera
2021-02-26, 12:07
  #4
Medlem
SockAccounts avatar
Tnk lite s hr

Kod:
<?php
public function notEmpty($string) { 
    return !empty(
$string);
};

public function 
sanitizeEmail($string) { 
    return 
filter_var(str_replace(array("\r""\n""%0a""%0d"), ''$string), FILTER_VALIDATE_EMAIL);
};

public function 
sanitizePhone($string) { 
    return 
filter_var($stringFILTER_SANITIZE_NUMBER_INT);
};
public function 
sanitizeCompany($string) { 
    return 
filter_var($stringFILTER_SANITIZE_STRING);
};

public function 
handleInput($post) { 
    
$data = array();

    if(isset(
$post['sender_email']) && notEmpty($post['sender_email'])){
        
$data['senderEmail'] = sanitizeEmail($post['sender_email']);
    } else {
        
$issues['sender_email'] = "Email not set";
    };

    if(isset(
$post['sender_phone_number']) && notEmpty($post['sender_phone_number'])){
        
$data['phoneNumber'] = sanitizePhone($post['sender_phone_number']);
    } else {
        
$issues['sender_phone_number'] = "Phone not set";
    };

    if(isset(
$post['sender_company']) && notEmpty($post['sender_company'])){
        
$data['senderCompany'] = sanitizeCompany($post['sender_company']);
    } else {
        
$issues['sender_company'] = "Company not set";
    };

    if (!
trim($_POST["department_email"] == '')) { // vad gr du hr???
        
$data['departmentEmail '] = sanitizeEmail($post['department_email']);
    } 
    
    if (
$this->isUsernameExists($post["username"])) {
        
$issues['username'] = "username exists";
    } else if (
$this->isEmailExists($post["email"])) {
        
$issues['email'] = "email exists";
    }

    if (empty(
$post["signup-password"])) {
        
$issues['signup-password'] = "no password!";
    }

    return array( 
        
"data" => $data
        
"issues" => $issues
    
);
}

public function 
main($string) { 
    
$status true;
    
$memberId false;
    
    
$input handleInput($_POST);

    if(
count($input['issues']) > 0){
        
$status false;
    } else {
        
$memberId registerMember($input['data']);
    }

    if(
$status && notEmpty($memberId)){
        
$response = array(
            
"status" => "success",
            
"message" => "New member inserted"
        
);
    } else {
        
$response = array(
            
"status" => "failed",
            
"message" => "New member failed!"
        
);
    };

    return 
$response;
};

public function 
registerMember($data) { 
    
$hashedPassword password_hash($data["signup-password"], PASSWORD_DEFAULT);
    
$query 'INSERT INTO tbl_member (username, password, email) VALUES (?, ?, ?)';
    
$paramType 'sss';
    
$paramValue = array(
        
$data["username"],
        
$hashedPassword,
        
$data["email"]
    );
    return 
$this->ds->insert($query$paramType$paramValue);;
};

Koden r inte perfekt, men t det hllet
__________________
Senast redigerad av SockAccount 2021-02-26 kl. 12:09.
Citera
2021-02-26, 14:04
  #5
Medlem
filter_var_array() borde kunna vara anvndbar nr det brjar bli ngra rader och olika data.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in