myom
myom

Reputation: 135

How to access variable in a while loop from a function in PHP?

I want to access the $name variable, which is defined in a while loop, in a function named sendMail. Would I have to somehow incorporate the function within the loop?

<?php
while ($row = mysql_fetch_assoc($result))
{
    print_r($row); echo "<br><br>";
    $name = $row['Name'];
    $date = $row['sDate'];
    $time = $row['sTime'];
    $phone = $row['Phone'];

    $email = $row['Email'];
    sendMail($row['Email']);

    $company = $row['Company'];
    $course = $row['Course'];
    $ref = $row['Reference'];
    $optout = $row['optout'];

    echo "<tr bgcolor=#ABB5F6>
    <td>$name</td>
    <td>$date</td>
    <td>$time</td>
    <td>$phone</td>
    <td>$email</td>
    <td>$company</td>
    <td>$course</td>
    <td>$ref</td>
    <td>$optout</td>
    </tr>";
}

// Mail to $to and $emailarray recipients
function sendMail($to)
{
    $subject = 'Test mail';
    $message = 'Hello'.$name; // I want $name from the while loop
    $headers = array();
    $headers[] = "From:" . "[email protected]";
    $headerz = implode("\r\n", $headers);

    mail($to, $subject, $message, $headerz);
}

?>

Upvotes: 0

Views: 476

Answers (4)

Ciprian Spiridon
Ciprian Spiridon

Reputation: 1

I've made the changes required in order to have your code working.

<?php
            while ($row = mysql_fetch_assoc($result))
            {
                print_r($row); echo "<br><br>";
                $name = $row['Name'];
                $date = $row['sDate'];
                $time = $row['sTime'];
                $phone = $row['Phone'];

                $email = $row['Email'];

                // i added name as a parameter
                sendMail($row['Email'],$name);

                $company = $row['Company'];
                $course = $row['Course'];
                $ref = $row['Reference'];
                $optout = $row['optout'];

                echo "<tr bgcolor=#ABB5F6>
                <td>$name</td>
                <td>$date</td>
                <td>$time</td>
                <td>$phone</td>
                <td>$email</td>
                <td>$company</td>
                <td>$course</td>
                <td>$ref</td>
                <td>$optout</td>
                </tr>";

            }

            // Mail to $to and $emailarray recipients
            // i added name as a parameter
            function sendMail($to,$name)
            {
                $subject = 'Test mail';
                $message = 'Hello'.$name; // I want $name from the while loop
                $headers = array();
                $headers[] = "From:" . "[email protected]";
                $headerz = implode("\r\n", $headers);

                mail($to, $subject, $message, $headerz);
            }

            ?>

Upvotes: 0

Arcadien
Arcadien

Reputation: 2278

why not just pass it ?

function sendMail($to, $name);

and call

sendMail($row['Email'], $row['name']);

Upvotes: 5

Mathieu Dumoulin
Mathieu Dumoulin

Reputation: 12244

Why not just pass the $name to the function sendMail:

// Mail to $to and $emailarray recipients
function sendMail($to, $name)
{
    $subject = 'Test mail';
    $message = 'Hello'.$name; // I want $name from the while loop
    $headers = array();
    $headers[] = "From:" . "[email protected]";
    $headerz = implode("\r\n", $headers);

    mail($to, $subject, $message, $headerz);
}

And then call the sendMail function with the name variable?

Upvotes: 5

Rudi Visser
Rudi Visser

Reputation: 21969

Either make sendMail() accept an array (ie. $row), or add another parameter tosendMail()which is called$name` and pass it in.

ie.

function sendMail($to, $name)

called like:

sendMail($row['Email'], $row['Name']);

The parameter is probably easiest, don't go down the route of globals. I would suggest not using the array either, as the format is undefined and could change if your table structure does. If you were to use mysql_fetch_object with a strongly defined class, then this would be the most acceptable solution (well, using PDO/MySQLi also, of course)... Especially if you're planning on extending to use more data off $row in the future.

Upvotes: 5

Related Questions