Как я могу заставить работать это подтверждение по электронной почте?
Я попытался отправить простое электронное письмо, используя функцию mail, и это работает. Но когда я пытаюсь вставить это в мою программу, это не так. Может кто-нибудь сказать мне, какая часть не так, потому что я почти уверен, что речь идет не о конфигурации xampp / sendmail - я уже пробовал 2 простые почтовые программы, и все они работают, кроме этой.
Я старался изо всех сил поставить (...) вместо ненужных строк. Я думаю, что проблема в том, что он не может перейти к той части, где программа читает часть функции электронной почты?
Вот мой register.php:
<?
session_start();
if(isset($_POST['register']))
{
include('/class.register.php');
$register = new Register();
if($register->process()) {
header('location: login.php');
}
else {
$register->show_errors();
}
}
?>
<form method= "POST" action="<?=$_SERVER['PHP_SELF'];?>">
<table>
<tr><td>Username:</td><td><input type="text" name="ruser" required="required" /></td></tr>
<tr><td>Email:</td><td><input type="text" name="remail" required="required" /></td></tr>
<tr><td>Password:</td><td><input type="password" name="rpass" required="required" /></td></tr>
<tr><td>Title:</td><td><input type="text" name="rtitle" required="required" /></td></tr>
<tr><td>First Name:</td><td><input type="text" name="rfname" required="required" /></td></tr>
<tr><td>Last Name:</td><td><input type="text" name="rlname" required="required" /></td></tr>
<tr><td>Mobile Number:</td><td><input type="text" name="rmobile" required="required" /></td></tr>
</table>
<input type="submit" name="register" value="Sign Up" />
</form>
Вот мой class.register.php:
<?
class Register
{
...
private $errors;
public function __construct()
{
$this->errors = array();
...;
$this->token = $_POST['token'];
$this->passmd5 = md5($this->password);
}
public function process()
{
if($this->valid_data() && $this->send_email())
$this->register();
return count($this->errors)? 0: 1;
}
public function filter($var)
{
return preg_replace('/[^a-zA-z0-9@.]/','',$var);
}
public function user_exists()
{
...
}
public function email_exists()
...
public function register()
{
...
}
public function show_errors()
echo "<h3>Errors</h3>";
foreach($this->errors as $key=>$value)
echo $value."<br>";
public function valid_data()
...
public function send_email()
{
$from = 'jeremiah@citydelivery.ph';
$to = $_POST['remail'];
$subject = 'Registration confirmation';
$message = 'Please click the following link or copy and paste it
into your browser to complete the registration process: ';
$message .= 'http://example.com/confirm.php?u=';
$message .= urlencode($_POST['ruser']);
$message .= '&t=';
$message .= urlencode($_POST['token']);
return mail($to, $subject, $message, $from);
}
}
?>
2 ответа
$this->send_email
должно быть $this->send_email()
Это функция, а не переменная;)
Также вы используете это в заявлении, но send_mail()
ничего не возвращает, поэтому возвращает ноль, что в итоге ложно.
Ну действуй return mail($to, $subject, $message, $from);
чтобы исправить это
Оператор if выполняется в порядке, пока не достигнет значения false, когда используется только && (и)
У тебя есть
if($this->valid_token() && $this->valid_data() && $this->send_email())
Так что возможно, это никогда не попадет send_mail()
так как valid_data()
например ложь.
Чтобы проверить это использование var_dump($this->valid_token(), $this->valid_data(), $this->send_email()
Первое, что поразило ложь - это ваша проблема, которую нужно исправить, и так далее.
Используйте следующую функцию процесса, она проверяет, в чем проблема. Я рекомендую после того, как это работает, чтобы удалить die()
функции
public function process()
{
if($this->valid_token()) { die('token is the problem'); }
if($this->valid_data()) { die('valid data is the problem'); }
if($this->send_email()) { die('send email is the problem'); }
if($this->valid_token() && $this->valid_data() && $this->send_email)
$this->register();
return count($this->errors)? 0: 1;
}
Я хотел бы поблагодарить всех вас, ребята, которые внесли свой вклад. Я исправил проблему, создав другой файл sendmail.php, а затем включил его в мой register.php.