0

Hello, I want to print a letter from a html page. But within the letter, I want it to contain the name of each student on the database. It is the same letter but I want to print/download it having each student's unique name.

2
Contributors
5
Replies
37
Views
2 Years
Discussion Span
Last Post by diafol
0

You just have a placeholder. BUT how is you letter stored - is it in a plain text file, a DB record or in a php variable or as plain html?
Does it contain preformatting as in hard breaks?
Do you want to be able to download multiple letters at a time from one page, or is it for the student to print off their own letter?

Edited by diafol

0

The letter is in plain html and it's pre-formatted. And yes I want to be able to download multiple letters at a time from one page.
Thanks for the response.

1

OK, pretty much like a mailmerge then from your description.

You can use a placeholder:

<p>Dear **NAME**,</p>
<p>Blah blah blah</p>

I'm assuming this letter has a .html extension.

You can get the content of the html file and place it into a variable:

$letter = file_get_contents("path/to/file/filename");

Assuming that you have all the names in an array (let's call it $names), we can do this...

$output = array();
foreach($names as $name){
    $output[] = str_replace("**NAME**", $name, $letter);
}
$outputFile = implode("<span style='page-break-after: always;'></span>", $output);

That will give you a string ($output) containing multiple letters with the names from the array ($names). Each letter is separated by a "style" page break.

You can show the content thus:

echo $outputFile;

Or you can store the content in a physical file:

file_put_contents($outputFile,"path/to/new/file/filename");

Up to you what you do with it. Note, this is purely off the top of my head and has not been tested.

0

Thank you so much, it worked just fine.
But there's a little challenge, I figured out there are 3 different fields I need to change. One (current academic session: same on all letters, also obtained from the database). The other two are name and registration number of each student. I tried associative array but didn't work.

0
$output = array();
foreach($records as $student){
    $output[] = str_replace(array("**NAME**","**CAS**","**REG_ID**"), array($student['name'], $student['cas'], $student['reg_id']), $letter);
}
$outputFile = implode("<span style='page-break-after: always;'></span>", $output);

I'm assuming that you've got all the student records in a var called $records. SHould do the trick if the last example worked.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.