#php #sql #csv #download #web-development-server
#php #sql #csv #Скачать #веб-разработка-сервер
Вопрос:
Цель моего кода — загрузить файл CSV, созданный из моей базы данных. Однако вместо загружаемого файла на веб-странице отображается его содержимое. Кроме того, когда я перемещаю функцию загрузки в свой цикл for, она загружает файл CSV, но я не могу получить доступ к веб-странице. Вот весь код:
<html>
<style>
table, th, td{
padding: 10px;
border: 1px solid black;
border-collapse: collapse;
}
table, .center{
text-align: center;
margin-left: auto;
margin-right: auto;
}
</style>
<?php
function array_to_csv_download($array, $filename = "export.csv", $delimiter = ",") {
// open the "output" stream
// see http://www.php.net/manual/en/wrappers.php.php#refsect2-wrappers.php-unknown-unknown-unknown-descriptioq
header("Content-disposition: attachment; filename=test.csv");
header("Content-Type: text/csv");
ob_clean();
flush();
$f = fopen('php://output', 'w');
foreach ($array as $line) {
fputcsv($f, $line, $delimiter);
}
readfile($f);
ob_end_clean();
}
mysql_connect("localhost", "root", "");
mysql_select_db("gograb");
$filename = $_FILES["file"]["tmp_name"];
echo "<table id='center'>"
. "<tr>"
. "<th>"
. "Number"
. "</th>"
. "<th>"
. "Brand"
. "</th>"
. "<th>"
. "Item Name"
. "</th>"
. "<th>"
. "Description"
. "</th>"
. "<th>"
. "Weight"
. "</th>"
. "<th>"
. "Variant1 Name"
. "</th>"
. "<th>"
. "Variant1 Value"
. "</th>"
. "<th>"
. "Variant2 Name"
. "</th>"
. "<th>"
. "Variant2 Value"
. "</th>"
. "<th>"
. "Price"
. "</th>"
. "<th>"
. "Barcode"
. "</th>"
. "<th>"
. "Department"
. "</th>"
. "<th>"
. "Collections"
. "</th>"
. "<th>"
. "Type"
. "</th>"
. "<th>"
. "Tag"
. "</th>"
. "<th>"
. "Image URL"
. "</th>"
. "</tr>";
if ($_POST["action"] == "Find Duplicate") {
if (($h = fopen("{$filename}", "r")) !== FALSE) {
$skip_var = 1;
while (($data = fgetcsv($h, 30000, ",")) !== FALSE) {
if ($skip_var == 1) {
$skip_var = 1;
continue;
}
echo "<tr>";
$select = "SELECT * FROM global_catalog where Barcode='$data[10]'";
$query = mysql_query($select);
if (mysql_num_rows($query) > 0) {
$row = mysql_fetch_assoc($query);
foreach ($data as $field => $value) {
echo "<td>" . $value . "</td>";
}
echo "</tr>";
}
$big_array[] = $data;
}
}
array_to_csv_download($big_array);
}
$counter = 0;
if ($_POST["action"] == "Find New") {
if (($h = fopen("{$filename}", "r")) !== FALSE) {
$skip_var = 1;
while (($data = fgetcsv($h, 30000, ",")) !== FALSE) {
if ($skip_var == 1) {
$skip_var = 1;
continue;
}
echo "<tr>";
$select = "SELECT * FROM global_catalog where Barcode='$data[10]'";
$query = mysql_query($select);
if (mysql_num_rows($query) == 0) {
$counter =1;
$row = mysql_fetch_assoc($query);
foreach ($data as $field => $value) {
echo "<td>" . $value . "</td>";
}
echo "</tr>";
}
}
fclose($h);
}
}
echo "</table>";
?>
</html>
Ответ №1:
В верхней части вашей страницы выводится HTML, что предотвратит отправку заголовков.
Вы должны переместить весь if ($_POST["action"] == "Find Duplicate") { ... }
блок в самый верх вашей страницы и добавить вызов exit();
в конце array_to_csv_download()
функции.