0

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);
}

?>
2
  • Just add sendMail($name) in the while loop (after the definition), inside sendMail() it'll be in the $to var. Alternatively, you could pass the entire $row so you have all the values. sendMail($row) Commented Jul 10, 2012 at 15:34
  • You can access and set variables, and call functions, but you can't call a variable. The mysql extension is outdated and on its way to deprecation. New code should use mysqli or PDO, both of which have important advantages, such as support for prepared statements. Commented Jul 10, 2012 at 15:44

4 Answers 4

5

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?

Sign up to request clarification or add additional context in comments.

Comments

5

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.

Comments

5

why not just pass it ?

function sendMail($to, $name);

and call

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

Comments

0

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);
            }

            ?>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.