emilyfrazier Posted December 13, 2006 Share Posted December 13, 2006 I am trying to export a csv file. There is a data display list from mySQL, and based on a drop-down the user can select to export CSV file. When this is chosen, here is my code:[code]if( $listAction && $listAction == "csv" ){ ?> header("Content-type: text/x-csv");header("Content-Disposition: attachment; filename=CMD_Members.csv");print "Id, First Name, Last Name, Organization, Email Address, Package, Pay By, Date Modified, Status". "\n";$row = 0;foreach($_POST["all"] as $value){$sql = "SELECT mbrID, fName, lName, org, email, mbr_pkg, payType, active_date, status FROM members where mbrID = '".$value."'";// die($sql);$rval = mysql_query($sql);while ($data = mysql_fetch_assoc ($rval) ) {++$row;if($data["status"] == '0'){$status = "Pending";}elseif($data["status"] == '1'){$status = "Activated";}elseif($data["status"] == '2'){$status = "Deactivated";} print $data["mbrID"] . ",".$data["fName"] . ",". $data["lName"].",".$data["org"] . ",".$data["email"]. ",".$data["mbr_pkg"]. ",".$data["payType"].",".$data["active_date"].",".$status."\n";}}}[/code]Where the $_POST["all"] is referring to all of the records in the list. So when I do this, the file exports, opens in Excel with an error about my style sheet. It then brings in ALL of the source code into a small box at the top of the page, and then formats my results like they look in the browser display.Can you tell me what I am doing wrong?Thanks,Emily Quote Link to comment Share on other sites More sharing options...
hitman6003 Posted December 13, 2006 Share Posted December 13, 2006 Try removing the "?>" after "if( $listAction && $listAction == "csv" ){", see if that helps.Also, if you are still having problems, remove the attachment header and change the content type header to be text/plain, then check the output to ensure that it is what you want.[code]<?phpif( $listAction && $listAction == "csv" ) { header("Content-type: text/x-csv"); header("Content-Disposition: attachment; filename=CMD_Members.csv"); print "Id, First Name, Last Name, Organization, Email Address, Package, Pay By, Date Modified, Status". "\n"; $row = 0; foreach($_POST["all"] as $value){ $sql = "SELECT mbrID, fName, lName, org, email, mbr_pkg, payType, active_date, status FROM members where mbrID = '".$value."'"; $rval = mysql_query($sql); while ($data = mysql_fetch_assoc($rval) ) { ++$row; if($data["status"] == '0'){ $status = "Pending"; }elseif($data["status"] == '1'){ $status = "Activated"; }elseif($data["status"] == '2'){ $status = "Deactivated"; } print $data["mbrID"] . ",".$data["fName"] . ",". $data["lName"].",".$data["org"] . ",".$data["email"]. ",".$data["mbr_pkg"]. ",".$data["payType"].",".$data["active_date"].",".$status."\n"; } }}?>[/code] Quote Link to comment Share on other sites More sharing options...
emilyfrazier Posted December 13, 2006 Author Share Posted December 13, 2006 Hi,Thanks for the help. The bad ?> tag was just a bad copying by me; sorry about that.So I tried all the options you gave with no luck. When I remove the attachement header and change it to plain text it just prints the code to my screen.Just to be sure I'm doing this right, here is the code I ended up with:[code]<?php if( $listAction && $listAction == "csv" ){ header("Content-type: text/plain");print "Id, First Name, Last Name, Organization, Email Address, Package, Pay By, Date Modified, Status". "\n";$row = 0;foreach($_POST["all"] as $value){$sql = "SELECT mbrID, fName, lName, org, email, mbr_pkg, payType, active_date, status FROM members where mbrID = '".$value."'";// die($sql);$rval = mysql_query($sql);while ($data = mysql_fetch_assoc ($rval) ) {++$row;if($data["status"] == '0'){$status = "Pending";}elseif($data["status"] == '1'){$status = "Activated";}elseif($data["status"] == '2'){$status = "Deactivated";} print $data["mbrID"] . ",".$data["fName"] . ",". $data["lName"].",".$data["org"] . ",".$data["email"]. ",".$data["mbr_pkg"]. ",".$data["payType"].",".$data["active_date"].",".$status."\n";}}}?>[/code]Thanks again for helping. Quote Link to comment Share on other sites More sharing options...
hitman6003 Posted December 13, 2006 Share Posted December 13, 2006 try this:[code]if( $listAction && $listAction == "csv" ) { header("Content-type: text/plain"); $query = "SELECT * FROM members WHERE mbrID IN('" . implode("', '", $_POST['all']) . "')"; $results = mysql_query($query) or die(mysql_error()); echo "Id, First Name, Last Name, Organization, Email Address, Package, Pay By, Date Modified, Status\n"; while ($data = mysql_fetch_array($results, MYSQL_ASSOC)) { if ($data["status"] == '0') { $status = "Pending"; } else if ($data["status"] == '1') { $status = "Activated"; } else if ($data["status"] == '2') { $status = "Deactivated"; } echo $data['mbrID'] . "," . $data['fName'] . "," . $data['lName'] . "," . $data['org'] . "," . $data['email'] . "," . $data['mbr_pkg'] . "," . $data['payType'] . "," . $data['active_date'] . "," . $status . "\n"; } exit;}[/code] Quote Link to comment Share on other sites More sharing options...
emilyfrazier Posted December 14, 2006 Author Share Posted December 14, 2006 I get the same issue; with this it just prints the html page info, javascript calls, and all of the data for the csv file...it does not prompt me to download a file...Any other ideas?Thank you very much for your helpemily Quote Link to comment Share on other sites More sharing options...
hitman6003 Posted December 14, 2006 Share Posted December 14, 2006 what is the full code of your script? Quote Link to comment Share on other sites More sharing options...
emilyfrazier Posted December 20, 2006 Author Share Posted December 20, 2006 Sorry I took a little while to respond...I thought I had been given up on! Thanks for sticking with me. Since my full code is hundreds of lines, I will just include the pertinent areas. First, here is the code that gets printed out when I choose the select option for "Export File". This gets printed in the browser directly; does not prompt for download:[code]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>CMD Members</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><link href="../schedule/style.css" rel="stylesheet" type="text/css"><script language="javascript"> function doSelect( obj ){ var frm = obj.form; var val = obj.value; // alert( val ); if( val == "reset" ){ frm.reset(); } else{ frm.submit(); } } function checkField( id ){ if( document.getElementById && document.getElementById(id) ){ obj = document.getElementById(id); if( obj.checked ){ obj.checked = false; } else{ obj.checked = true; } } } <!--function MM_openBrWindow(theURL,winName,features) { //v2.0 window.open(theURL,winName,features);} </script>Id, First Name, Last Name, Organization, Email Address, Package, Pay By, Date Modified, Status1,Emily,lastnamehere,org,emily@email.org,IND25,chk,2006-11-03,Deactivated[/code]So, in the actual page, here is what I have that is pertinent:[code]<?php require_once( "../schedule/config.php");$listAction = ( isset( $_POST["resultsAction"] ) && $_POST["resultsAction"] != "")?$_POST["resultsAction"]:false;?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>CMD Members</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><link href="../schedule/style.css" rel="stylesheet" type="text/css"><script language="javascript"> function doSelect( obj ){ var frm = obj.form; var val = obj.value; // alert( val ); if( val == "reset" ){ frm.reset(); } else{ frm.submit(); } } function checkField( id ){ if( document.getElementById && document.getElementById(id) ){ obj = document.getElementById(id); if( obj.checked ){ obj.checked = false; } else{ obj.checked = true; } } } <!--function MM_openBrWindow(theURL,winName,features) { //v2.0 window.open(theURL,winName,features);}</script><?php $myAction = 'onClick="doSelect(this);"';$date = date("Y-m-d");$nextmonth = date('Ymd', mktime(0, 0, 0, date("m"), date("d")+30, date("Y")));$lastmonth = date('Ymd', mktime(0, 0, 0, date("m"), date("d")-30, date("Y")));if( $listAction && $listAction == "csv" ) { header("Content-type: text/plain"); $query = "SELECT * FROM members WHERE mbrID IN('" . implode("', '", $_POST['all']) . "')"; $results = mysql_query($query) or die(mysql_error()); echo "Id, First Name, Last Name, Organization, Email Address, Package, Pay By, Date Modified, Status\n"; while ($data = mysql_fetch_array($results, MYSQL_ASSOC)) { if ($data["status"] == '0') { $status = "Pending"; } else if ($data["status"] == '1') { $status = "Activated"; } else if ($data["status"] == '2') { $status = "Deactivated"; } echo $data['mbrID'] . "," . $data['fName'] . "," . $data['lName'] . "," . $data['org'] . "," . $data['email'] . "," . $data['mbr_pkg'] . "," . $data['payType'] . "," . $data['active_date'] . "," . $status . "\n"; } exit;} // End If $listAction == csv ?></head><body><?php $sql = "SELECT * FROM members ORDER BY status";$rval = mysql_query( $sql );$records_found = mysql_num_rows ($rval);?><hr /><form action="<?PHP echo $_SERVER['PHP_SELF']; ?>" name="members" method="post"><div align="center"><span class="textbold">Records Found: <?php echo $records_found; ?><br><br></span></div><table width="100%" align="center" border="0" cellspacing="0" cellpadding="4"><tr> <td colspan="8" align="center"> <select name="resultsAction" id="resultsAction"> <option value="">:: SELECT ACTION HERE ::</option> <option value="csv" <?php echo $myAction; ?>>Export File</option> <option value="reset" <?php echo $myAction; ?>>Reset Check Boxes</option> </select><br><br> </td></tr><tr bgcolor="#CCCCCC" class="textbold"> <td> <br /> </td> <td>Id</td> <td>Name</td> <td>Organization</td> <td>Email</td> <td>Package</td> <td>Pay By</td> <td>Date Modified</td> <td>Status</td> <td width="1%"> </td></tr><?php $row = '0';while($data = mysql_fetch_assoc ($rval) ){ ++$row; $bColor = $row % 2 == 0?"#CCCCCC":"#E0E0E0"; $link = "member_detail.php?id=".$data["mbrID"]; $datemysql = date ( "Y m d H:i:s" , strtotime ( $data [ 'date_joined' ])); if($data["status"] == '0'){ ?><tr class="red" style="background:<?php echo $bColor; ?>;"> <td><input tabindex="<?php echo $row; ?>" type="checkbox" name="title[]" id="<?php echo $data["mbrID"]; ?>" value="<?php echo $data["mbrID"]; ?>" /></td> <td><a href="<?php echo $link; ?>" target="_blank" class="red"><?php if( $data["mbrID"] != "" ){ echo $data["mbrID"] ; }else{ echo " "; } ?></a></td> <td><a href="<?php echo $link; ?>" target="_blank" class="red"><?php if( $data["fName"] && $data["fName"] != "" ){ echo $data["fName"] ." ". $data["lName"]; }else{ echo " "; } ?></a></td> <td><a href="<?php echo $link; ?>" target="_blank" class="red"><?php if( $data["org"] && $data["org"] != "" ){ echo $data["org"]; }else{ echo "-";}?></a></td> <td><a href="<?php echo $link; ?>" target="_blank" class="red"><?php if( $data["email"] && $data["email"] != "" ){ echo $data["email"];}else{echo "-";}?></a></td> <td><a href="<?php echo $link; ?>" target="_blank" class="red"><?php if($data["mbr_pkg"] && $data["mbr_pkg"] != "" ){echo $data["mbr_pkg"];}else{echo " ";}?></a></td> <td><a href="<?php echo $link; ?>" target="_blank" class="red"><?php if($data["payType"] && $data["payType"] != "" ){echo strtoupper($data["payType"]);}else{echo " ";}?></a></td> <td><a href="<?php echo $link; ?>" target="_blank" class="red"><?php if($data["active_date"] && $data["active_date"] != ""){echo $data["active_date"];}else{echo " ";}?></a></td> <td><a href="<?php echo $link; ?>" target="_blank" class="red"><?php if($data["status"] == '1' ) {echo 'Activated';}elseif($data["status"] == '2'){echo 'Deactivated!';}else{echo 'Pending';}?></a></td> <td width="1%"><input type="hidden" tabindex="<?php echo $row;?>" name="all[]" id="<?php echo $data["mbrID"];?>" value="<?php echo $data["mbrID"];?>" /></td></tr><?php } // End If Status == 0} // End While $data loop?></table></body></html>[/code]I also tried removing the if( $listAction && $listAction == "csv" ) area out of the head section and into the body, but this did not make any difference...Also, while I understand most of this code, I did not write the javascript function doSelect. I took this on from someone else who had written those functions using Radio boxes (which I then changed to a select box) and who I was collaborating with. So I am still a newbie; don't assume I know too too much! Thanks,Emily Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.