Register and Login (Email Activation)
Register and Login (Email Activation)
Hi guys I'm getting the following error from this tutorial:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\advertise\core\inc\user.inc.php on line 41
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\advertise\core\inc\user.inc.php:41) in C:\xampp\htdocs\advertise\system\user\register.php on line 32
Now I guess the first part is caused by my localhost not sending e-mails correctly but what about the other one?
user.inc.php
[syntax=php]<?php
// Checks if the given username exists in the database.
function user_exists($user){
$user = mysql_real_escape_string($user);
$total = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `user_name` = '{$user}'");
return (mysql_result($total, 0) == '1') ? true : false;
}
// Checks is the given username and password combination is valid.
function valid_credentials($user, $pass){
$user = mysql_real_escape_string($user);
$pass = mysql_real_escape_string($pass);
$total = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `user_name`= '{$user}' AND `user_password` = '{$pass}' ");
return (mysql_result($total, 0) == '1') ? true : false; echo mysql_error();
}
// Adds a user to the database.
function add_user($user, $email, $pass){
$user = mysql_real_escape_string(htmlentities($user));
$email = mysql_real_escape_string($email);
$pass = sha1($pass);
$charset = array_flip(array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)));
$aid = implode('', array_rand($charset, 10));
$body = <<<EMAIL
Hi,
Thank you for registering, before you log-in you need to activate your account.
To do this simply click (or copy and paste) the link below:
http://localhost/advertise/system/user/ ... e.php?aid={aid}
EMAIL;
mail($email, 'Your New Account At My Site', $body, 'From:do_not_reply@betterphp.co.uk');
mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`) VALUES ('{$user}', '{$pass}', '{$email}') "); echo mysql_error();
$user_id = mysql_insert_id();
mysql_query("INSERT INTO 'user_activations'('user_id', 'activation_code') VALUES ({$user_id}, '{$aid}' )");
}
?>[/syntax]
register.php
[syntax=php]<?php
include('../../core/init.inc.php');
$errors = array();
if (isset($_POST['username'], $_POST['password'], $_POST['repeat_password']))
{
if (empty($_POST['username']))
{
$errors[] = 'The username cannot be empty.';
}
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false)
{
$errors[] = 'The e-mail address you entered does not appear to be valid.';
}
if (empty($_POST['password']) || empty($_POST['repeat_password']))
{
$errors[] = 'The password cannot be empty.';
}
if ($_POST['password'] !== $_POST['repeat_password'])
{
$errors[] = 'Password verfication failed. Your two passwords must match.';
}
if (user_exists($_POST['username']))
{
$errors[] = 'The username you entered is already taken.';
}
if (empty($errors))
{
add_user($_POST['username'], $_POST['email'], $_POST['password']);
header('Location: user_cp.php');
die();
}
}
?>
<!DOCTYPE htlm PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset+utf-8" />
<link rel="stylesheet" type="text/css" href="ext/css/style.css" />
<title><?php echo $page_title ?></title>
</head>
<body>
<div>
<?php
if (empty($errors) === false) {
?>
<ul>
<?php
foreach ($errors as $error){
echo "<li>{$error}</li>";
}
?>
</ul>
<?php
}
?>
</div>
<form action="" method="post">
<p>
<label for"username">Username:</label>
<input type="text" name="username" id="username" value="<?php if (isset($_POST['username'])) echo htmlentities($_POST['username']); ?>">
</p>
<p>
<label for"email">E-Mail:</label>
<input type="test" name="email" id="email">
</p>
<p>
<label for"password">Password:</label>
<input type="password" name="password" id="password">
</p>
<p>
<label for"repeat_password">Repeat Password:</label>
<input type="password" name="repeat_password" id="repeat_password">
</p>
<p>
<input type="submit" value="Register" />
</form>
</body>
</html>[/syntax]
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\advertise\core\inc\user.inc.php on line 41
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\advertise\core\inc\user.inc.php:41) in C:\xampp\htdocs\advertise\system\user\register.php on line 32
Now I guess the first part is caused by my localhost not sending e-mails correctly but what about the other one?
user.inc.php
[syntax=php]<?php
// Checks if the given username exists in the database.
function user_exists($user){
$user = mysql_real_escape_string($user);
$total = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `user_name` = '{$user}'");
return (mysql_result($total, 0) == '1') ? true : false;
}
// Checks is the given username and password combination is valid.
function valid_credentials($user, $pass){
$user = mysql_real_escape_string($user);
$pass = mysql_real_escape_string($pass);
$total = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `user_name`= '{$user}' AND `user_password` = '{$pass}' ");
return (mysql_result($total, 0) == '1') ? true : false; echo mysql_error();
}
// Adds a user to the database.
function add_user($user, $email, $pass){
$user = mysql_real_escape_string(htmlentities($user));
$email = mysql_real_escape_string($email);
$pass = sha1($pass);
$charset = array_flip(array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)));
$aid = implode('', array_rand($charset, 10));
$body = <<<EMAIL
Hi,
Thank you for registering, before you log-in you need to activate your account.
To do this simply click (or copy and paste) the link below:
http://localhost/advertise/system/user/ ... e.php?aid={aid}
EMAIL;
mail($email, 'Your New Account At My Site', $body, 'From:do_not_reply@betterphp.co.uk');
mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`) VALUES ('{$user}', '{$pass}', '{$email}') "); echo mysql_error();
$user_id = mysql_insert_id();
mysql_query("INSERT INTO 'user_activations'('user_id', 'activation_code') VALUES ({$user_id}, '{$aid}' )");
}
?>[/syntax]
register.php
[syntax=php]<?php
include('../../core/init.inc.php');
$errors = array();
if (isset($_POST['username'], $_POST['password'], $_POST['repeat_password']))
{
if (empty($_POST['username']))
{
$errors[] = 'The username cannot be empty.';
}
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false)
{
$errors[] = 'The e-mail address you entered does not appear to be valid.';
}
if (empty($_POST['password']) || empty($_POST['repeat_password']))
{
$errors[] = 'The password cannot be empty.';
}
if ($_POST['password'] !== $_POST['repeat_password'])
{
$errors[] = 'Password verfication failed. Your two passwords must match.';
}
if (user_exists($_POST['username']))
{
$errors[] = 'The username you entered is already taken.';
}
if (empty($errors))
{
add_user($_POST['username'], $_POST['email'], $_POST['password']);
header('Location: user_cp.php');
die();
}
}
?>
<!DOCTYPE htlm PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset+utf-8" />
<link rel="stylesheet" type="text/css" href="ext/css/style.css" />
<title><?php echo $page_title ?></title>
</head>
<body>
<div>
<?php
if (empty($errors) === false) {
?>
<ul>
<?php
foreach ($errors as $error){
echo "<li>{$error}</li>";
}
?>
</ul>
<?php
}
?>
</div>
<form action="" method="post">
<p>
<label for"username">Username:</label>
<input type="text" name="username" id="username" value="<?php if (isset($_POST['username'])) echo htmlentities($_POST['username']); ?>">
</p>
<p>
<label for"email">E-Mail:</label>
<input type="test" name="email" id="email">
</p>
<p>
<label for"password">Password:</label>
<input type="password" name="password" id="password">
</p>
<p>
<label for"repeat_password">Repeat Password:</label>
<input type="password" name="repeat_password" id="repeat_password">
</p>
<p>
<input type="submit" value="Register" />
</form>
</body>
</html>[/syntax]
Re: Register and Login (Email Activation)
I have no idea what just happened but its now working perfect :\ hmmm anyway onwards I go
Re: Register and Login (Email Activation)
ok spoke too soon, the user details are being placed in the database and I can log-in with them but nothing is being added to the user_activations table, any ideas?
Re: Register and Login (Email Activation)
twiggy wrote:ok spoke too soon, the user details are being placed in the database and I can log-in with them but nothing is being added to the user_activations table, any ideas?
I don't understand what you mean. I'd gladly help you but I'm not sure to get what your problem is. Could you detail this last post ? I would have known how to fix the second error message from your first post, but this last post I don't get :/
Best regards,
CK
Re: Register and Login (Email Activation)
The header error was just caused by the error above it so don't worry about that.
As for the new problem. If a query is failing a good step to try is adding
[syntax=php]echo mysql_error();[/syntax]
after it. This will give you the reason it fails.
As for the new problem. If a query is failing a good step to try is adding
[syntax=php]echo mysql_error();[/syntax]
after it. This will give you the reason it fails.
Re: Register and Login (Email Activation)
Already tried the echo mysql_error(); I learnt that from you last time I had a problem
it wasn't showing anything just looping back.
Got it anyway I had named my table id and not user_id doh!![Very Happy :D](./images/smilies/icon_e_biggrin.gif)
![Wink ;)](./images/smilies/icon_e_wink.gif)
Got it anyway I had named my table id and not user_id doh!
![Very Happy :D](./images/smilies/icon_e_biggrin.gif)
Re: Register and Login (Email Activation)
twiggy wrote:Got it anyway I had named my table id and not user_id doh!
Ah, easy to do. At least you spotted it
![Smile :)](./images/smilies/icon_e_smile.gif)
Re: Register and Login (Email Activation)
Ok before I stab someone, I have not changed a thing in the script, come back to it and get this:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\advertise\core\inc\user.inc.php on line 41
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\advertise\core\inc\user.inc.php:41) in C:\xampp\htdocs\advertise\system\user\register.php on line 32
Now I'm guessing my xampp install has gone wrong again? Is the top error causing the header problem?
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\advertise\core\inc\user.inc.php on line 41
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\advertise\core\inc\user.inc.php:41) in C:\xampp\htdocs\advertise\system\user\register.php on line 32
Now I'm guessing my xampp install has gone wrong again? Is the top error causing the header problem?
Re: Register and Login (Email Activation)
twiggy wrote: Is the top error causing the header problem?
jacek wrote:The header error was just caused by the error above it so don't worry about that.
Are you sure your SMTP server is running ?
Re: Register and Login (Email Activation)
I have Mercury running from the xampp control panel. This is one of two solutions to the problem I can find on the internet, the other is to check the ini file to ensure its pointing to local host and mine is.
SMTP localhost localhost
smtp_port 25 25
Any ideas will be welcome
SMTP localhost localhost
smtp_port 25 25
Any ideas will be welcome
Re: Register and Login (Email Activation)
Got it! What a mess!
For anyone reading this thread later on the problem is with Mercury apparently there is a bug in a module or something that causes the SMTP to go offline. Simply go to file and click enter offline mode, cycle this option until the SMTP come back online.
Now I have no hair left, doe's anyone know where I can get a good wig![Very Happy :D](./images/smilies/icon_e_biggrin.gif)
For anyone reading this thread later on the problem is with Mercury apparently there is a bug in a module or something that causes the SMTP to go offline. Simply go to file and click enter offline mode, cycle this option until the SMTP come back online.
Now I have no hair left, doe's anyone know where I can get a good wig
![Very Happy :D](./images/smilies/icon_e_biggrin.gif)
Re: Register and Login (Email Activation)
twiggy wrote:there is a bug in a module or something that causes the SMTP to go offline. Simply go to file and click enter offline mode, cycle this option until the SMTP come back online.
Well that isn't very good !
Good that you found a solution though
![Very Happy :D](./images/smilies/icon_e_biggrin.gif)