2016-05-31 6 views
-1

Я пытаюсь настроить мою страницу php так, чтобы, когда пользователь вводит свое имя пользователя в текстовое поле, он проверяет мою базу данных для этого имени пользователя, находит свой адрес электронной почты и затем отправляет электронное письмо на этот адрес адрес. Код, который я сейчас имею, который, к сожалению, не работает, когда я отправляю страницу, она обновляется, но по ожидаемому адресу не поступает электронное письмо;отправьте электронное письмо от php, используя datbase

<?php 

require_once 'header.php'; 
require_once 'my_connect.php'; 

$user = $_POST['user']; 

$my_query="SELECT * from table where user = '$user'"; 
$result= mysqli_query($connection, $my_query); 

while ($myrow = mysqli_fetch_array($result)){ 

echo $to = $myrow["emailaddress"]; 
$password = $myrow["password"]; 

} 

$to = $email; 
$password = $password; 
$subject = 'Password'; 
$sender = '[email protected]'; 

$message = <<< EMAIL 

The Password registered with account {$user} is {$password}. 

EMAIL; 

$header = "From:" . $sender; 


if ($result): 
     mail($to, $subject, $message, $header); 
     $feedback = 'Email Sent'; 
endif; 

?> 

У кого есть идеи? был бы очень благодарен ...

+5

«кажется, не работает это» не является описанием проблемы – PeeHaa

+1

вы ничего не заманишь, вы используете '$ myrow', но ничего не делать с ним. Кроме того, этот массив POST неизвестен, и если он имеет значение или нет. проверить наличие ошибок; вы этого не делаете. –

+0

Хорошо, вам ответили ниже, так как вы не отвечаете на комментарии (или должны были где-то взлететь), может быть, вы ответите на этот вопрос. Кстати, как @PeeHaa сказал: * «Кажется, не работает» - это не описание проблемы *. –

ответ

5

Уже установлено, что вы ничего не извлекли из своего запроса.

В качестве примера я представляю следующее (чтобы помочь вам, потому что это слишком длинный комментарий) с тем, что я использовал для проверки вашего кода.

Убедитесь, что все значения содержатся в вашей базе данных. Вам нужно будет соответствующим образом скопировать имена таблиц и столбцов.

Если приведенный ниже пример не подходит, вам нужно будет выяснить, почему.

Проверьте наличие ошибок и убедитесь, что почта доступна для вас. Проверьте свой спам.

См. Комментарии встроенный внутри кода.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$DB_HOST = 'xxx'; 
$DB_USER = 'xxx'; 
$DB_PASS = 'xxx'; 
$DB_NAME = 'xxx'; 

$Link = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); 
if($Link->connect_errno > 0) { 
    die('Connection failed [' . $Link->connect_error . ']'); 
} 

$_POST['user'] = "john"; // this is a hard-code value. I did not use a form for it 

$user = $_POST['user']; // If taken from a form 
         // make sure you have a post method 
         // and that the input has the same 
         // name attribute for it. I.e.: name="user" 

$my_query="SELECT * from users where username = '$user'"; 
$result= mysqli_query($Link, $my_query) or die(mysqli_error($Link)); 

while($myrow = mysqli_fetch_array($result)){ 

echo $to = $myrow["email"]; 

$password = $myrow["password"]; 

} 


$subject = 'Password'; 
$sender = '[email protected]'; // replace this with your email address 

$message = <<< EMAIL 

The Password registered with account {$user} is {$password}. 

EMAIL; 

$header = "From:" . $sender; 


if ($result): 
     mail($to, $subject, $message, $header); 
     echo $feedback = 'Email Sent'; 
endif; 

Plus, метод, который вы используете небезопасный, так как при отправке паролей в электронной почте и не использует подготовленное заявление, и хранить пароли в виде обычного текста.

Использовать prepared statements, или PDO with prepared statements, они намного безопаснее.


Пароли

Я также заметил, что вы можете хранить пароли в виде обычного текста. Это не рекомендуется.

Используйте один из следующих действий:

Важно Sidenote о длине колонки:

Если и когда вы решите использовать password_hash() или пакет обеспечения совместимости (если PHP < 5,5) https://github.com/ircmaxell/password_compat/ , важно отметить, что если длина текущего столбца пароля меньше 60, его нужно будет изменить на это (или выше). В руководстве предлагается длина 255.

Вам потребуется ALTER length вашей колонки и начать с нового хэша, чтобы он вступил в силу. В противном случае MySQL будет терпеть неудачу.

Другие интересные ссылки:

+0

Честно говоря, если он будет подвергать себя инъекции SQL, он должен использовать соленые хеши. –

+0

@ LukeSalamone Не нужно солить, так как 'password_hash()' заботится обо всем этом, что на самом деле не так сложно. А в PHP 7.0 солевое удаление было удалено. Они также предупреждают об этом. http://php.net/manual/en/function.password-hash.php –

+0

А, я не знал этого, спасибо! Но я не понимаю, как 'password_verify()' мог бы работать, если 'password_hash()' просто генерирует соль. Кажется, недостаточно информации для проверки? РЕДАЙТ неважно, я понял это. –

Смежные вопросы