Люди могут редактировать мою форму и отправлять строку, отличную от электронной почты, которая портит мои базы данных

Моя форма требует адрес электронной почты (устанавливается через тип ввода), однако люди используют Inspect Element и отправляют другие значения, которые не являются электронной почтой. Одним из них является знак процента, и он плохо запутывается в моих базах данных. Я попытался проверить знак процента, но это не помогло. Вот мой код, не могли бы вы дать мне подсказку или сказать, что не так?

Спасибо

if(strpos($_POST['email'], '%') == false)
{
$curpass = strtoupper(hash("whirlpool", $_POST['curpass']));
$passii = $con->prepare("SELECT `password` FROM `playerinfo` WHERE `PlayerName` = ?;");
$passii->execute(array($_SESSION["playername"]));
while($row = $passii->fetch())
{
$curpass1 = $row['password'];
}
if($curpass == $curpass1)
{
$email = mysql_escape_string($pemail);
echo "<div class='flash_success'>Your email has been changed.</div>";
$p_name_settings = $_SESSION['playername'];
$updatemail = $con->prepare("UPDATE `playerinfo` SET `email` = ? WHERE `PlayerName` = ?");
$updatemail->execute(array($pemail, $_SESSION["playername"]));
}
else
{
echo "<div class='flash_error'>You did not enter your current password correctly. Settings were not saved.</div>";
}
}

-1

Решение

Вы могли бы использовать FILTER_VALIDATE_EMAIL а также FILTER_SANITIZE_EMAIL чтобы предотвратить эту вставку. Что-то вроде:

$email = $_POST['email'];

// Remove all illegal characters from email
$email = filter_var($email, FILTER_SANITIZE_EMAIL);

// Validate e-mail
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
// email is a valid email address
$curpass = strtoupper(hash("whirlpool", $_POST['curpass']));
$passii = $con->prepare("SELECT `password` FROM `playerinfo` WHERE `PlayerName` = ?;");
$passii->execute(array($_SESSION["playername"]));
while($row = $passii->fetch())
{
$curpass1 = $row['password'];
}
if($curpass == $curpass1)
{
$email = mysqli_real_escape_string($con, $email);
echo "<div class='flash_success'>Your email has been changed.</div>";
$p_name_settings = $_SESSION['playername'];
$updatemail = $con->prepare("UPDATE `playerinfo` SET `email` = ? WHERE `PlayerName` = ?");
$updatemail->execute(array($pemail, $_SESSION["playername"]));
}
else
{
echo "<div class='flash_error'>You did not enter your current password correctly. Settings were not saved.</div>";
}
}
1

Другие решения

Вы могли бы использовать это

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if ($email !== false) {
//do action
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector