Измените оператор while на foreach

#php #foreach #while-loop

#php #foreach #цикл while

Вопрос:

У меня есть оператор while, который выполняется правильно, но он должен быть оператором foreach, поскольку выполняется несколько вставок, и он не генерирует случайный пароль или не отправляет электронное письмо для каждого. Вот код:

         while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
     {

        $password = createRandomPassword(); 

        // Add the user to the database:
        $sql = "INSERT into users(account_id,first,last,email,pass) values('$id', '$data[0]','$data[1]','$data[2]','$password')";
        $r = mysqli_query ($dbc, $sql) or trigger_error("Query: $sqln<br />MySQL Error: " . mysqli_error($dbc));


            if (mysqli_affected_rows($dbc) == 1) { // If it ran OK.

                    $emailBody = "<html><body>";

                    $emailBody .= "<br><br><b>Hey $first $last!</b>";

                    $emailBody .= "<br><br>You've been added to our site and your password is: $password";

                    $emailBody .= "</body></html>";

                    mail("$ln_first $ln_last <$ln_email>", "Your Account" , $emailBody, "From: YourCompany <noreply@yourcompany.com>nContent-Type: text/html");

            }

     fclose($handle);
    echo '<p><div class="alert green">You have successfully imported users.</div></p>';
 }
  

Ответ №1:

Я не думаю, что с вашим while циклом что-то не так — вы слишком рано закрываете дескриптор! Строки fclose и final echo должны быть после этой последней фигурной скобки.

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

1. Вы были правы в том, что fcode находится не в том месте… однако электронные письма по-прежнему не отправляются.

2. неважно — полностью исправлено, я перепутал переменные. Спасибо!

Ответ №2:

Проблемы, как я вижу, в том, что вы не определили переменные, которые используете для отправки электронных писем:

 $ln_first $ln_last <$ln_email>
  

Я не вижу, откуда взялись эти переменные, и эти

 $emailBody .= "<br><br><b>Hey $first $last!</b>";