Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用分号作为分隔符从MySQL表使用PHP创建csv输出_Php_Mysql_Sql_Csv_Export To Csv - Fatal编程技术网

使用分号作为分隔符从MySQL表使用PHP创建csv输出

使用分号作为分隔符从MySQL表使用PHP创建csv输出,php,mysql,sql,csv,export-to-csv,Php,Mysql,Sql,Csv,Export To Csv,我遇到了使用php和mysql创建csv输出的问题。问题是我无法根据页面上填充的元素数显示不同的输出 简介:我有几个文本区域,用户填写关于某件事的文本或数字。用户对一个问题的答案在数据库中以分号分隔 MySQL table: finish Columns(fields): pt1, pt2, pt3 目标:我想生成csv,在单独的列中显示用户的答案。如果用户只回答每个问题的1个文本区域,结果应如下所示: 例如,如果用户使用数字1到8填写所有文本区域,下面的“我的代码”将在csv文件中给出如下

我遇到了使用php和mysql创建csv输出的问题。问题是我无法根据页面上填充的元素数显示不同的输出

简介:我有几个文本区域,用户填写关于某件事的文本或数字。用户对一个问题的答案在数据库中以分号分隔

MySQL table: finish
Columns(fields): pt1, pt2, pt3
目标:我想生成csv,在单独的列中显示用户的答案。如果用户只回答每个问题的1个文本区域,结果应如下所示:

例如,如果用户使用数字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_';
$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;
?>


列名称下的行不是excel中每行的每一行?你会遇到同样的问题吗。。。显然,某个地方需要一个\n。顺便说一句,您的代码非常有用,因为这可能是一个解决方案。实际上,更大的问题是,当数据库中有多行时,它会打印出多个列名。它应该是一个列名(pt1、pt2、pt3)并位于内容下方
<?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;
?>