2021-02-26, 10:01
  #1
Medlem
Jag har utgått ifrån följande projekt
https://phppot.com/php/user-registration-in-php-with-login-form-with-mysql-and-code-download/

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

Om jag ska använda php funktionen php_var() var hade ni använt den i projektet? Vad tror ni om att använda den överst i funktionen registerMember? Eller var hade ni haft det?

Jag har gjort om nedan så jag har runt 20 input fält i mitt formulär som postas till registerMember.



[PHP]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;
}
[/PHP]
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 för att sanitera inkommande värden.
Du har en funktion för att registrera efter sanitering.
Du har en som hanterar dessa.

osv

annars kommer du få en enorm funktion som du inte kan återanvända.

Så dela upp dem olika sakerna du behöver göra i steg.
Skriv enskilda funktioner som gör 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 för att sanitera inkommande värden.
Du har en funktion för att registrera efter sanitering.
Du har en som hanterar dessa.

osv

annars kommer du få en enorm funktion som du inte kan återanvända.

Så dela upp dem olika sakerna du behöver göra i steg.
Skriv enskilda funktioner som gör just det steget
Sedan så klistrar du ihop dem.

Kan du ge ett exempel hur du menar istället för som jag tänker? Nedan är exempel på bara 5 input och håller med om ifall jag gör så med 20 input kommer funktionen bli enorm.
[PHP]
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($senderEmail, FILTER_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($departmentEmail, FILTER_VALIDATE_EMAIL);
}
//Resten av koden från mitt första inlägg
//senderName senderCompany etc använder jag sedan i min prepare statement, $paramValue = array([/PHP]
__________________
Senast redigerad av help 2021-02-26 kl. 11:15.
Citera
2021-02-26, 12:07
  #4
Medlem
SockAccounts avatar
Tänk lite så här

[PHP]

<?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($string, FILTER_SANITIZE_NUMBER_INT);
};
public function sanitizeCompany($string) {
return filter_var($string, FILTER_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 gör du här???
$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);;
};
[/PHP]

Koden är inte perfekt, men åt det hållet
__________________
Senast redigerad av SockAccount 2021-02-26 kl. 12:09.
Citera
2021-02-26, 14:04
  #5
Medlem
filter_var_array() borde kunna vara användbar när det börjar bli några 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