Jump to content

Displaying Multiple File Attachments


thedeal56

Recommended Posts

I have a table named 'attachment' that looks like this:

 

attachment:

 

RecNum.....RelatedRecNum.....FileName

1......................500.................test.jpg

2......................500.................test.pdf

 

I have a table named project that looks like this:

 

project:

 

RecNum.....ProjectName

500..........Sample_Project

 

This is the query I'm using to join the tables together:

$result = "select project.ProjectName as 'Name', attachment.FileName as 'Attachment' from project left join attachment on project.RecNum=attachment.RelatedRecNum where attachment.RelatedRecNum=500";
$row=mysql_query($result) or die(mysql_error());

$array = mysql_fetch_array($row);

 

I'm using this to display the attachment result:

<?php 
while ($array = mysql_fetch_array($row))
{ 
echo $array['Attachment'];
} 
php?>

 

I want the two (or however many) attachments to show up with the associated project, but the above code will only post 1 attachment result per project.  Can anyone help? Let me know if I need to explain myself better. Thanks

Link to comment
Share on other sites

Thanks for your reply.  I've been looking into group_concat, but I can't find a way to make it apply to my query.  If I take this out of the original query, the while loop will return both attachments:

 

$result = "select project.ProjectName as 'Name', attachment.FileName as 'Attachment' from project left join attachment on project.RecNum=attachment.RelatedRecNum where attachment.RelatedRecNum=500";

$row=mysql_query($result) or die(mysql_error());

 

$array = mysql_fetch_array($row);

 

However,  if I take that out, I have no way of displaying the name of the project.  I can't add the project name to the loop, because I only want it to display once.  Thanks  :)

Link to comment
Share on other sites

Alternatively use the 1 query you had to begin with, put all the mysql data into an array and use a static index to get the project name.

e.g.

<?php
$sql = "
SELECT p.ProjectName as 'Name'
      ,a.FileName as 'Attachment'
FROM project p
LEFT JOIN attachment a on p.RecNum = a.RelatedRecNum 
WHERE a.RelatedRecNum=500
";

$query=mysql_query($sql) or die(mysql_error());

// Create dataset.
while ($row = mysql_fetch_assoc($query))
{ 
  $data[] = $row;
}

// Output project name.
echo $data[0]['Name'];

// Output all data.
foreach($data as $d){
  echo $d['Attachment'];
}
?>

Link to comment
Share on other sites

Thanks a lot for the help, guys. My example that I posted is a very generic one.  I thought that if I learned the methodology of the code through the example, I would then be able to apply it to my real code.  It looks like I'm too dumb to do that  ;).  The code that I'm about to post is generated by a program, and I'm trying to figure out how to assign the attachment.FileName field to the variable that is being used. Unfortunately, I'm not sure what all I need to post in order or you to see what I need to do.  I'm going to post what I think is the necessary information, and maybe we can go from there.  Again, thanks a lot for looking at this; it has been driving me crazy for a while. 

 

This is the code from the file (dml.php) that is inserting the sql data into a variable that will be used later. (It's still on the two query system, I'm hoping to learn how to use the array example today)

if($selected_id)
{
$result = "SELECT attachment.FileName as 'Attachment' FROM project LEFT JOIN attachment on project.RecNum=attachment.RelatedRecNum WHERE project.RecNum='$selected_id'";

$queryb = "SELECT project.ProjectName as 'RecNum' FROM project LEFT JOIN attachment on 	project.RecNum=attachment.RelatedRecNum WHERE project.RecNum='$selected_id'";

	 $row=mysql_query($result) or die(mysql_error());
	 $rowb=mysql_query($queryb) or die(mysql_error());
	 $arrayb = mysql_fetch_array($rowb);


}

The "$selected_id" string value comes from a record that is clicked by the user.  After the record is clicked, the record ID number is used to open a table containing more information on that record.  It is in that table that I'm trying to put my multiple attachment info.

 

In the same file (dml.php), Here is where I think the variable is being assigned:

// process values
if($selected_id){
	$templateCode=str_replace('<%%VALUE(RecNum)%%>', htmlspecialchars($arrayb['RecNum'], ENT_QUOTES), $templateCode);
	$templateCode=str_replace('<%%VALUE(Attachment)%%>', htmlspecialchars(($????['Attachment'], ENT_QUOTES), $templateCode);
}else{
	$templateCode=str_replace('<%%VALUE(RecNum)%%>', '', $templateCode);
	$templateCode=str_replace('<%%VALUE(Attachment)%%>', '', $templateCode);
}

// process translations
foreach($Translation as $symbol=>$trans){
	$templateCode=str_replace("<%%TRANSLATION($symbol)%%>", $trans, $templateCode);
}

 

Finally, this is the file (detail_view.html) that is using the information inserted into <%%VALUE(Attachment)%%> and <%%VALUE(RecNum)%%>

 

 
<br>
<table border=1 bordercolor=navy cellpadding=0 cellspacing=0>

<tr>
	<td>
		<table>
			<tr>
				<td colspan=2></td>
				<td rowspan=6 valign=top>
					<div><%%UPDATE_BUTTON%%></div>
					<div><%%DELETE_BUTTON%%></div>
					<div><%%DESELECT_BUTTON%%></div>
					<br>
					<div><%%INSERT_BUTTON%%></div>
					</td>
				</tr>
			<tr>
				<td class=TableHeader valign=top>
					<div class=TableHeader style="text-align:right;">Address</div>
					</td>
				<td class=TableBody width=300><input size=30 type=text class=TextBox name=RecNum value="<%%VALUE(RecNum)%%>">  </td>
				</tr>
			<tr>
				<td class=TableHeader valign=top>
					<div class=TableHeader style="text-align:right;">Attachment</div>
					</td>
				<td class=TableBody width=300><a href="<%%TRANSLATION(Link)%%><%%VALUE(Attachment)%%>" target=mainFrame><%%VALUE(Attachment)%%></a>  </td>
				</tr>
			</table>
		</td>
	</tr>
</table>

 

I could be way off base on what I need to post in order for it to make sense, so please let me know if I need to provide more information.  Thanks for checking this out, I know it's probably a pain to sort this stuff out.

Link to comment
Share on other sites

I tried putting the while loop here:

// process values
if($selected_id){
	$templateCode=str_replace('<%%VALUE(RecNum)%%>', htmlspecialchars($arrayb['RecNum'], ENT_QUOTES), $templateCode);
WHILE ($array = mysql_fetch_array($row)){
	$templateCode=str_replace('<%%VALUE(Attachment)%%>', htmlspecialchars($array['Attachment']), $templateCode);}
}else{

	$templateCode=str_replace('<%%VALUE(RecNum)%%>', '', $templateCode);
	$templateCode=str_replace('<%%VALUE(Attachment)%%>', '', $templateCode);
}

// process translations

foreach($Translation as $symbol=>$trans){
	$templateCode=str_replace("<%%TRANSLATION($symbol)%%>", $trans, $templateCode);
}

 

it still only displays one attachment result.  It seems like putting the while loop there should work.  What am I missing? Thanks.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.