Я новичок в php и mysqli и надеюсь, что кто-нибудь сможет мне помочь.
Следующий код успешно вставляет имя, фамилию, адрес электронной почты и дату регистрации, но я получаю предупреждение о неопознанном индексе с паролем, и в mysql ничего не вставляется.
Я знаю, что SHA1 — не лучшее шифрование, и я знаю, что этот код уязвим, но мне еще предстоит много работы над ним. Мне просто нужно, чтобы кто-то предложил, где я иду не так и что мне нужно сделать, чтобы это исправить. Спасибо заранее.
$page_title = 'Register';
$q = 'query';if (isset($_POST['submitted'])){
$errors = array();//initialise error array
//check for first name
if (empty($_POST['first_name'])) {
$errors[] = 'you forgot to enter your first name';
} else {
$fn=trim($_POST['first_name']);
}
//check for last name
if (empty($_POST['last_name'])) {
$errors[] = 'you forgot to enter your last name';
} else {
$fn=trim($_POST['last_name']);
}
//check for email
if (empty($_POST['email'])) {
$errors[] = 'you forgot to enter your email';
} else {
$fn=trim($_POST['email']);
}
//check passwords against each other
if (!empty($_POST['pass1'])){
if(!empty($_POST['pass1'])) {
if ($_POST['pass1'] != $_POST['pass2']) {
$errors[] = 'Passwords dont match';
} else {
$p = trim($_POST['pass1']);
}
} else {
$errors[] = 'You forgot to enter your password.';
}
if (empty($errors)) {
require_once ('mysqli_connect.php');
//make query
$q = "INSERT INTO users (first_name,last_name,email,pass,registration_date) VALUES
('".$_POST["first_name"]."','".$_POST["last_name"]."','".$_POST["email"]."','".$_POST["SHA1('pass')"]."', NOW())";
$r = @mysqli_query ($dbc,$q); //run query
if($r) {
echo 'Registration complete';
} else {
echo 'System error, could not register you';
//debug msg
echo '<p>'.mysqli_error($dbc).
'<br/><br/>Query: '.$q.
'</p>';
}
mysqli_close($dbc);
}else { //report errors
echo 'The following errors occurred: <br/>';
foreach ($errors as $msg) {
echo "- $msg<br/>/n";
}
}
}
}
?>
<html>
<head></head>
<h1>Register</h1>
<body>
<form action="register.php" method="post">
<p>First Name: <input type="text" name="first_name" size="15" maxlength="20" value="<?php if(isset($_POST['first_name'])) echo $_POST['first_name']; ?>"/></p>
<p>Last Name: <input type="text" name="last_name" size="15" maxlength="20" value="<?php if(isset($_POST['last_name'])) echo $_POST['last_name']; ?>"/></p>
<p>Email Address: <input type="text" name="email" size="15" maxlength="20" value="<?php if(isset($_POST['email'])) echo $_POST['email']; ?>"/></p>
<p>Password: <input type="password" name="pass1" size="10" maxlength="20"/></p>
<p>Confirm Password: <input type="password" name="pass2" size="10" maxlength="20"/></p>
<p><input type="submit" name="submit" value="register"/></p>
<input type="hidden" name="submitted" value="TRUE"/>
</form>
</body>
</html>
В вашей переменной запроса $q
это значение неверно: $_POST["SHA1('pass')"]
измените свою переменную пароля следующим образом:
//make query
$q = "INSERT INTO users (first_name,last_name,email,pass,registration_date) VALUES
('".$_POST["first_name"]."','".$_POST["last_name"]."','".$_POST["email"]."','". sha1($p) ."', NOW())";
Считайте себя более подходящим при хранении паролей, посмотрите на функцию password_hash () для лучшей безопасности.
Других решений пока нет …