Недавно я был предупрежден о том, что адреса электронной почты Gmail одинаковы, если вы поместите «.». перед «@ gmail.com». Поэтому «[email protected]» и «[email protected]» отправляются на адрес «[email protected]».MySQL выберите столбец с замененным текстом, где он равен значению
В результате, когда пользователи регистрируются на моем веб-сайте, я хочу проверить, что они не используют этот эксплойт для создания нескольких учетных записей с по существу тем же адресом электронной почты.
Я дезинфицировать адрес электронной почты, они посылают меня, войти в мою базу данных с ПДО, а затем попробуйте запустить этот код:
$data=$db->query("SELECT REPLACE(email,'.','') AS email_without_periods FROM account_data HAVING email_without_periods LIKE '".str_replace($sanitizedEmail,".","")."'");
if($row=$data->fetch()){
//It found a match between the sanitized email without decimals and the email rows without decimals. Hey, this dude's trying to create multiple accounts!
$error="You're trying the email decimal trick! You sneaky devil... ";
}
Однако, этот вход не работает: он, кажется, не регистрировать какие-либо строк.
Когда я заменил LIKE '".str_replace($sanitizedEmail,".","")."'"
на LIKE '%".str_replace($sanitizedEmail,".","")."%'"
, он вернул все из строк.
Я в основном хочу найти str_replace($postEmail,".","")
в базе данных, но сначала удалить все периоды в email
строках. Я использую PDO.
Как это сделать?
Какова ценность '$ sanitizedEmail'? – Barmar
Поскольку вы используете PDO, почему вы не используете подготовленные инструкции вместо объединения в SQL? – Barmar
Вы заменяете все периоды запятыми, а не удаляете их. Используйте 'replace (email, ',', '')', чтобы удалить их. Но вы также удаляете период в 'gmail.com', поэтому он станет' gmailcom'. – Barmar