2015-10-29 4 views
3

У меня есть код, который импортирует данные CSV в mysql с php, импорт работает нормально, но мне нужна дополнительная функция, которая отправит электронное письмо пользователю, выполнив поиск user_id из csv. Я конвертировал CSV в массив $ csv_array,отправка электронной почты пользователю с идентификатором, извлеченным из массива

user_id  order part 

1   test  phone 
1   another pad 
2   all  tab 

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

foreach ($csv_array as $row) { 

       $this->load->library('email'); 
       $this->load->library('parser'); 

       $email = $this->admin_model->getEmailNotification(); 

       $user = $this->model->getUserShipment($row['user_id']); 

       if(count($user) == 1) 
       { 
        $data = array( 
         'user_firstname' => $user->user_firstname, 
         'user_lastname' => $user->user_lastname, 
         'user_email' => $user->user_email, 
         ); 

        $subject = 'Your Order has been shipped'; 
        $message = $this->parser->parse('templates/update', $data, TRUE); 

        $config['protocol'] = $email->email_protocol; 
        $config['smtp_host'] = $email->email_host; 
        $config['smtp_user'] = $email->email_address; 
        $config['smtp_pass'] = $email->email_password; 
        $config['smtp_port'] = $email->email_port; 
        $config['newline'] = "\r\n"; 

        $this->email->initialize($config); 

        $this->email->from($email->email_address); 
        $this->email->to($user->user_email); 
        $this->email->subject($subject); 
        $this->email->message($message);   

        $this->email->send(); 
       } 


      } 

Теперь с этим у меня есть две проблемы,

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

  2. Также, как я могу создать массив для передачи в шаблоне для user_id-1 -> порядка и частей для размещения внутри таблицы внутри шаблона?

Спасибо,

+0

Что касается вашей проблемы кулака, как вы включаете ваш «заказ» и данных «часть»? В настоящее время он отправляет 2 письма с двумя заказами или двумя электронными письмами с одним заказом? – Silencio

+0

@Silencio, Да, в настоящее время я не добавил как часть $ data, но если я добавлю 'order' => $ row ['order], тогда он отправит 2 письма с одной единственной информацией – rjcode

+0

, как вы хотите включить ваши данные о заказах и деталях? Было бы полезно, если бы вы добавили пример нужного массива данных. – Silencio

ответ

0

Я изменил свой код. Он отправит электронное сообщение только при обнаружении нового user_id.

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

Массив, который я создал $ orderandparts, отформатирован так, как вы этого хотели, вам просто нужно использовать его внутри функции.

Код:

function sendmail($user_id,$orderandparts) 
{ 
$this->load->library('email'); 
$this->load->library('parser'); 

$email = $this->admin_model->getEmailNotification(); 

$user = $this->model->getUserShipment($user_id); 

if(count($user) == 1) 
{ 
    $data = array( 
     'user_firstname' => $user->user_firstname, 
     'user_lastname' => $user->user_lastname, 
     'user_email' => $user->user_email, 
     ); 

    $subject = 'Your Order has been shipped'; 
    $message = $this->parser->parse('templates/update', $data, TRUE); 

    $config['protocol'] = $email->email_protocol; 
    $config['smtp_host'] = $email->email_host; 
    $config['smtp_user'] = $email->email_address; 
    $config['smtp_pass'] = $email->email_password; 
    $config['smtp_port'] = $email->email_port; 
    $config['newline'] = "\r\n"; 

    $this->email->initialize($config); 

    $this->email->from($email->email_address); 
    $this->email->to($user->user_email); 
    $this->email->subject($subject); 
    $this->email->message($message);   

    $this->email->send(); 
} 
} 
$user_id =""; 
$orders = array(); 
$parts = array(); 
$orderandparts = array(); 
foreach ($csv_array as $row) { 
      if($user_id == "") 
       $user_id = $row["user_id"]; 

      if($user_id == $row["user_id"]) 
      { 
       array_push($orders,$row["orders"]); 
       array_push($parts,$row["parts"]); 
      } 
      else//Sends mail if all user data has been finished (new user_id detected) 
      { 
      for($i;$i<count($orders);$i++) 
      { 
       $orderandparts[$i]["order"] = $orders[$i]; 
       $orderandparts[$i]["part"] = $orders[$i]; 
      } 
      sendmail($user_id,$orderandparts); 
      $user_id = $row["user_id"]; 
      unset($orders); 
      unset($parts); 
      unset($orderandparts); 
      $orders = array(); 
      $parts = array(); 
      $orderandparts = array(); 
      array_push($orders,$row["orders"]); 
      array_push($parts,$row["parts"]); 
      for($i;$i<count($orders);$i++) 
      { 
       $orderandparts[$i]["order"] = $orders[$i]; 
       $orderandparts[$i]["part"] = $orders[$i]; 
      } 
      } 
} 
sendmail($user_id,$orderandparts); 
Смежные вопросы