Php 密码与用户名/名称/电子邮件不同
如何限制用户,使其密码不包含其姓名/用户/电子邮件 这是我目前使用的验证脚本:Php 密码与用户名/名称/电子邮件不同,php,validation,Php,Validation,如何限制用户,使其密码不包含其姓名/用户/电子邮件 这是我目前使用的验证脚本: <?php $register = $_POST['register']; if (isset ($register)) { $email = mysql_real_escape_string($_POST['email']); $username = mysql_real_escape_string($_POST['username']);
<?php
$register = $_POST['register'];
if (isset ($register))
{
$email = mysql_real_escape_string($_POST['email']);
$username = mysql_real_escape_string($_POST['username']);
$password = sha1(md5(mysql_real_escape_string($_POST['password'])));
$repeat_password = sha1(md5(mysql_real_escape_string($_POST['repeat_password'])));
$first_name = mysql_real_escape_string($_POST['first_name']);
$last_name = mysql_real_escape_string($_POST['last_name']);
$birthday = mysql_real_escape_string($_POST['birthday']);
$sex = mysql_real_escape_string($_POST['sex']);
$registered = date("Y-m-d H:i:s");
// Form validation
// Password validation
$password = $_POST["password"];
$uppercase = preg_match('@[A-Z]@', $password);
$lowercase = preg_match('@[a-z]@', $password);
$number = preg_match('@[0-9]@', $password);
$length = preg_match("@^.{8,}$@" , $password);
if(!$uppercase || !$lowercase || !$number || !$length ) {
echo "Parola trebuie sa aiba min 8 caractere si sa contina cel putin o litera mare, o litera mica si o cifra.";
}
// Password = Password validation
elseif ($_POST['password'] != $_POST['repeat_password'])
{
echo "Parolele nu corespund.";
}
// E-mail address format
elseif (!filter_var($email,FILTER_VALIDATE_EMAIL))
{
echo "Formatul adresei de email este invalid.";
}
// No e-mail typed
elseif (empty($_POST['email']))
{
echo "Nu ati completat adresa de email.";
}
// No username typed
elseif (empty($_POST['username']))
{
echo "Nu ati completat numele de utilizator dorit.";
}
// No password or password validation typed
elseif ((empty($_POST['password']) or empty($_POST['repeat_password'])))
{
echo "Parola trebuie introdusa in ambele campuri.";
}
// MySQL validations
else
{
require_once("db_connect.php");
$query_email="SELECT email FROM users WHERE email='$email'";
$result_email=mysql_query($query_email) or die (mysql_error());
$query_username="SELECT username FROM users WHERE username='$username'";
$result_username=mysql_query($query_username) or die (mysql_error());
// Check if e-mail exists
if (mysql_num_rows($result_email)>0)
{
echo "Email-ul introdus a mai fost inregistrat.";
}
// Check if user exists
elseif (mysql_num_rows($result_username)>0)
{
echo "Username-ul introdus a mai fost inregistrat. Va rugam sa va alegeti alt username.";
}
// Add new user to database
else
{
$query="INSERT INTO users VALUES ('', '$username', '$password', '$email', '$first_name', '$last_name', '$birthday', '$sex', '', '$registered', '')";
mysql_query($query) or die (mysql_error());
echo "Cont creat cu succes!";
// Send E-mail
$to = $_POST['email'];
$subject = "Contul meu";
$message = "Contul dumneavoastra a fost creat cu succes! Date contului sunt: ";
$from = "someonelse@example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
}
}
}
?>
我知道MySQL被贬值了。我将尽快切换到MySQLi并调整脚本,这样它就不会受到SQL注入攻击。回音是罗马尼亚语。我想你不需要翻译。别理他们
由于我没有电子邮件服务器,请检查“发送电子邮件”部分,并让我知道它是否有效,这是我第一次使用它
在降级之前让我知道,以便我可以编辑我的问题。谢谢 看看strpos函数
看看strpos函数
您可以简单地使用
strstr
或strpos
来确定密码是否包含姓名、电子邮件或用户名
您应该使用phpmailer,而不是使用邮件功能:它同样易于使用,但使用外部smtp服务器。
使用php mail()函数而不使用配置良好的本地smtp,将导致您的所有邮件都被视为垃圾邮件。您可以简单地使用
strstr
或strpos
来确定密码是否包含名称、电子邮件或用户名
您应该使用phpmailer,而不是使用邮件功能:它同样易于使用,但使用外部smtp服务器。
在没有配置良好的本地smtp的情况下使用php mail()函数,将导致您的所有邮件都被当作垃圾邮件处理。使用strpos()
或预匹配()
使用带有用户名和密码的strps()
示例:
if ( (strpos($password,$_POST['username']) !== false ) || ( strpos($password,$_POST['password'] ) !== false ) ) {
echo 'password not valid';
}
<?php
$password='username email name jaja ';
$username='username';
$email='email';
$name='name';
if (preg_match("#(($email)|($username)|($name))#", $password))
echo 'probleme';
else echo 'no problem';
?>
使用preg_match()
的示例:
if ( (strpos($password,$_POST['username']) !== false ) || ( strpos($password,$_POST['password'] ) !== false ) ) {
echo 'password not valid';
}
<?php
$password='username email name jaja ';
$username='username';
$email='email';
$name='name';
if (preg_match("#(($email)|($username)|($name))#", $password))
echo 'probleme';
else echo 'no problem';
?>
注意:
“如果只想检查一个字符串是否包含在另一个字符串中,请不要使用preg_match()。请使用strps()或strstr(),因为它们会更快。”使用strps()
或preg_match()
使用带有用户名和密码的strps()
示例:
if ( (strpos($password,$_POST['username']) !== false ) || ( strpos($password,$_POST['password'] ) !== false ) ) {
echo 'password not valid';
}
<?php
$password='username email name jaja ';
$username='username';
$email='email';
$name='name';
if (preg_match("#(($email)|($username)|($name))#", $password))
echo 'probleme';
else echo 'no problem';
?>
使用preg_match()
的示例:
if ( (strpos($password,$_POST['username']) !== false ) || ( strpos($password,$_POST['password'] ) !== false ) ) {
echo 'password not valid';
}
<?php
$password='username email name jaja ';
$username='username';
$email='email';
$name='name';
if (preg_match("#(($email)|($username)|($name))#", $password))
echo 'probleme';
else echo 'no problem';
?>
注意:
“如果您只想检查一个字符串是否包含在另一个字符串中,请不要使用preg_match()。请使用strps()或strstr(),因为它们会更快。”使用strstr或strps来确定密码是否包含名称、电子邮件或用户名
例如:
if (strpos($password,$_POST['username']) !== false) {
echo 'Username found in the password';
}
使用strstr或strpos确定密码是否包含名称、电子邮件或用户名
例如:
if (strpos($password,$_POST['username']) !== false) {
echo 'Username found in the password';
}
本着可重用代码的精神,我创建了一个名为stringContainsOneOf
的函数,它只需获取一个字符串和一个字符串数组,并检查第一个字符串是否包含任何数组元素
//User's information
$email = "joe.smith@gmail.com";
$username = "joesmith";
$name = "Joe Smith";
//Validation function
function stringContainsOneOf($string, $checkArray)
{
foreach($checkArray as $element)
if(strpos(strtolower($string), strtolower($element)) !== false)
return true;
return false;
}
//Usage example
var_dump(stringContainsOneOf("mysecretpassword", array($email, $username, $name))); //returns false
var_dump(stringContainsOneOf("joesmithspassword", array($email, $username, $name))); //returns true
本着可重用代码的精神,我创建了一个名为stringContainsOneOf
的函数,它只需获取一个字符串和一个字符串数组,并检查第一个字符串是否包含任何数组元素
//User's information
$email = "joe.smith@gmail.com";
$username = "joesmith";
$name = "Joe Smith";
//Validation function
function stringContainsOneOf($string, $checkArray)
{
foreach($checkArray as $element)
if(strpos(strtolower($string), strtolower($element)) !== false)
return true;
return false;
}
//Usage example
var_dump(stringContainsOneOf("mysecretpassword", array($email, $username, $name))); //returns false
var_dump(stringContainsOneOf("joesmithspassword", array($email, $username, $name))); //returns true
您可以使用strpos()
函数。此外,只有在SMTP服务器可用的情况下,邮件才能工作。您可以使用strpos()
功能。此外,只有当您有SMTP服务器可用时,邮件才会工作。非常感谢您提供有关邮件功能的信息。我发现你给我的链接信息量很大。在我修改代码以使用MySQLi之后,我会看一看,因为这是一个优先事项。非常感谢您提供有关邮件功能的信息。我发现你给我的链接信息量很大。在我修改代码以使用MySQLi之后,我会看一看,因为这是一个优先事项。你又一次挽救了这一天。非常感谢。添加了使用preg_match的解决方案我可以在条件中添加多个参数(使用strpos的参数)吗?因此,我有一个条件来检查密码中是否也有电子邮件地址或名称。@我提供了一个包含无限参数数组的答案。我得到了以下错误:警告:preg_match():C:\xampp\htdocs\Signup\includes\Signup.php中的未知修饰符“y”,在第40行这是我的代码(如果是第40行)elseif(preg_match(“@($email)|($username)|($first_name))@,$password”){echo'Parola nu poate sa contina username ul,email ul sau numele dumneavoastra.}你又一次拯救了这一天。非常感谢。添加了使用preg_match的解决方案我可以在条件中添加多个参数(使用strpos的参数)吗?因此,我有一个条件来检查密码中是否也有电子邮件地址或名称。@我提供了一个包含无限参数数组的答案。我得到了以下错误:警告:preg_match():C:\xampp\htdocs\Signup\includes\Signup.php中的未知修饰符“y”,在第40行这是我的代码(如果是第40行)elseif(preg_match(“@($email)|($username)|($first_name))@,$password”){echo'Parola nu poate sa contina username ul,email ul sau numele dumneavoastra.}欢迎来到SO!这里不鼓励只作为链接的答案。这主要有两个原因:直接回答用户的特定问题通常会更有帮助,甚至好资源的链接有时也会出错。更多详情请参见。欢迎访问SO!这里不鼓励只作为链接的答案。这主要有两个原因:直接回答用户的特定问题通常会更有帮助,甚至好资源的链接有时也会出错。有关更多详细信息,请参阅。