我遇到了用php和mysql创建csv输出的问题。问题是我无法根据页面上填充元素的数量显示不同的输出。
简介:我有几个textareas,用户填写他们的文字或数字的东西。用户对一个问题的回答将以分号分隔在数据库中。
MySQL table: finish
Columns(fields): pt1, pt2, pt3
目标:我想生成csv,它会在不同的列中显示用户的答案。如果用户只回答每个问题的1个文本区域,结果应如下所示:
如果用户填写所有textareas,例如编号从1到8 - 我的代码在csv文件中给出结果,如下所示:
问题:我能做些什么,以便显示如下结果:
我想知道我是否可以这样做,以某种方式在excel输出中添加其他列并使用分隔符(;)将答案的值与mysql表分开。
这是我的代码。
的index.php
<form action="process.php" method="post">
First point: <br>
<textarea rows="1" cols="50" name="point11"></textarea><br>
<textarea rows="1" cols="50" name="point12"></textarea><br>
<textarea rows="1" cols="50" name="point13"></textarea><br>
<textarea rows="1" cols="50" name="point14"></textarea><br><br>
Second point: <br>
<textarea rows="1" cols="50" name="point21"></textarea><br>
<textarea rows="1" cols="50" name="point22"></textarea><br>
<textarea rows="1" cols="50" name="point23"></textarea><br><br>
Third point: <br>
<textarea rows="1" cols="50" name="point31"></textarea><br>
<input type="submit">
</form>
PROCESS.PHP
<?php
for($j=1;$j<101;$j++) {
$point[$j] = "";
}
for($i=1;$i<4;$i++) {
for($k=1;$k<10;$k++) {
if(isset($_POST['point'.$i.$k]) && !empty($_POST['point'.$i.$k])) {
$point[$i] .= $_POST['point'.$i.$k].'; ';
}}}
for ($i=1;$i<4;$i++) {
$pt[] = "pt".$i;
}
$pt_list = implode(',', $pt);
for ($i=1;$i<4;$i++) {
$point_ids[] = $point[$i];
}
$point_list = implode("','", $point_ids);
?>
<?php
$host = 'localhost';
$user = 'root123';
$pass = '123';
$db = 'exampledb';
$table = 'finish';
$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
mysql_select_db($db) or die("Can not connect.");
$result = mysql_query("INSERT into ".$table."({$pt_list}) VALUES ('{$point_list}')");
echo "The database has been updated";
?>
<form action="export.php" method="post"><input type="submit" value="Export as CSV"></form>
EXPORT.PHP
<?php
$host = 'localhost';
$user = 'root123';
$pass = '123';
$db = 'exampledb';
$table = 'finish';
$file = 'export_';
$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
mysql_select_db($db) or die("Can not connect.");
$result = mysql_query("SHOW COLUMNS FROM ".$table."");
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= $row['Field'].", ";
$i++;
}}
$csv_output .= "\n";
$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= $rowr[$j].", ";
}
$csv_output .= "\n";
}
$filename = $file."_".date("Y-m-d");
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");
print $csv_output;
exit;
?>
答案 0 :(得分:1)
请使用以下代码替换export.php文件的内容,希望这有助于
<?php
$host = 'localhost';
$user = 'root123';
$pass = '123';
$db = 'exampledb';
$table = 'finish';
$file = 'export_';
$i = 0;
$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
mysql_select_db($db) or die("Can not connect.");
$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$columnName = array();
if (mysql_num_rows($result) > 0)
{
while ($row = mysql_fetch_assoc($result))
{
$columnName[] = $row['Field'];
$i++;
}
}
$needle = ';';
$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values))
{
for ($j=0;$j<$i;$j++)
{
$colName = $columnName[$j];
$count = strlen($rowr[$j]) - strlen(str_replace(str_split($needle), '', $rowr[$j]));
if ($count > 1)
{
for($p=0;$p<$count;$p++)
{
$colName .= ",";
}
$columnName[$j] = $colName;
$csv_output_column_names .= $columnName[$j].", ";
$csv_output_column_values .= str_replace(';',',',$rowr[$j]).", ";
}
else
{
$csv_output_column_names .= $columnName[$j].", ";
$csv_output_column_values .= $rowr[$j] .", ";
}
}
}
$csv_output = $csv_output_column_names."\n".$csv_output_column_values;
$filename = $file."_".date("Y-m-d");
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");
print $csv_output;
exit;
?>