Отправка электронной почты на несколько адресов из базы данных

#php #mysql #email

#php #mysql #Адрес электронной почты

Вопрос:

Я пытаюсь создать небольшую контактную форму, в которой я могу отправлять электронные письма нескольким пользователям в базе данных, я пытаюсь просто выбрать все электронные письма, а затем использовать цикл while для отправки каждому, однако он отправляет только первое электронное письмо в моей базе данных, а не остальные.. Я не могу понять, где я ошибаюсь

 if(isset($_POST['submit'])) {
  $body= $_POST['body'];
  $subject= $_POST['subject'];
  $user = $_SESSION["name"];

  $sql = "SELECT * FROM $user";
  $result = $conn->query($sql);

  while($row = mysqli_fetch_array($result)){
      $email = $row["contact_email"];
      mail($email, $subject, $body,'From: myemail@gmail.com');
  }
}
 

Комментарии:

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

2. print_r($row["contact_email"]) Проверьте, что получается. и @jeroen совершенно прав. Создаете таблицу для каждого пользователя?

3. @jeroen Я знаю, что это нехорошо, но я не мог придумать другого способа сделать это: (

4. @kinshuk Lahiri, который печатает все адреса электронной почты в моей базе данных

5. @dfarrelly Конечно, есть лучший способ. Вы можете создать таблицу пользователя для всех пользователей. А также, где вы разместили print_r() то, что я сказал?

Ответ №1:

Предполагая, что у вас есть следующие таблицы:

Пользователи

  ---- ------- 
| id | name  |
 ---- ------- 
|  1 | Boss  |
|  2 | Boris |
 ---- ------- 
create table users(
 id int auto_increment primary key,
 name varchar(255) not null
);
 

Электронные письма

  --------- ----------------- 
| user_id |      email      |
 --------- ----------------- 
|       1 | boss1@boss.com  |
|       1 | boss2@boss.com  |
|       1 | boss3@boss.com  |
|       2 | boris1@boss.com |
|       2 | boris2@boss.com |
 --------- ----------------- 

create table emails(
 user_id int references users(id),
 email varchar(255) not null
);
 

Обратите внимание на ссылку, которую идентификатор пользователя имеет на таблицу users.

Теперь в PHP

 if(isset($_POST['submit'])) {
  $body = $_POST['body'];
  $subject = $_POST['subject'];
  $user = mysqli::real_escape_string($_SESSION["name"]);

  $result = $conn->query("SELECT id from users where name='".$user."'");
  $row = mysqli_fetch_array($result);
  $user_id = intval($row["id"]);

  $sql = "SELECT email FROM emails where user_id=".$user_id;
  $result = $conn->query($sql);

  while($row = mysqli_fetch_array($result)){
      $email = $row["email"];
      mail($email, $subject, $body,'From: myemail@gmail.com');
  }
}
 

Комментарии:

1. Спасибо @Cristian, только один вопрос, как мне вставить электронное письмо в базу данных электронных писем? Я просто не знаком с использованием reference, не могли бы вы дать мне пример инструкции insert?

2. ВСТАВИТЬ В электронные письма SET email=»mail@boss.com «, идентификатор пользователя=1;

3. обратите внимание, что вы должны указать идентификатор пользователя, который существует в таблице users