Page 1 of 1

Register and Login (Email Activation)

Posted: Tue Jul 05, 2011 10:01 pm
by twiggy
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
<?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/ ... p?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}' )");

}

?>
register.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>

Re: Register and Login (Email Activation)

Posted: Tue Jul 05, 2011 11:12 pm
by twiggy
I have no idea what just happened but its now working perfect :\ hmmm anyway onwards I go

Re: Register and Login (Email Activation)

Posted: Tue Jul 05, 2011 11:14 pm
by twiggy
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)

Posted: Wed Jul 06, 2011 8:30 am
by conradk
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)

Posted: Wed Jul 06, 2011 12:04 pm
by jacek
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
echo mysql_error();
after it. This will give you the reason it fails.

Re: Register and Login (Email Activation)

Posted: Wed Jul 06, 2011 1:51 pm
by twiggy
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! :D

Re: Register and Login (Email Activation)

Posted: Wed Jul 06, 2011 2:10 pm
by jacek
twiggy wrote:Got it anyway I had named my table id and not user_id doh! :D
Ah, easy to do. At least you spotted it :)

Re: Register and Login (Email Activation)

Posted: Wed Jul 06, 2011 7:20 pm
by twiggy
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?

Re: Register and Login (Email Activation)

Posted: Wed Jul 06, 2011 7:30 pm
by jacek
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)

Posted: Wed Jul 06, 2011 7:35 pm
by twiggy
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

Re: Register and Login (Email Activation)

Posted: Wed Jul 06, 2011 8:04 pm
by twiggy
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 :D

Re: Register and Login (Email Activation)

Posted: Thu Jul 07, 2011 9:18 am
by jacek
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 :D