我是php的新手,我学到的一切都来自我的学校教科书和在线研究.有了这个说我试图完成一项任务,我被困在最后一部分.对于最后一部分,作业说"创建一个PHP脚本,将把employee表的内容转储到CSV文本文件中,每个记录都有逗号分隔值.每个新记录应该从一个新行开始".我尝试了许多在线教程,但没有一个教授如何将此事件放在一个按钮中.我包含了我的代码,所以你可以看到我的混乱.这并不坏,但我相信我可以用更少的代码完成同样的任务.我刚刚开始,这是我现在能做的最好的事情.任何人都可以就如何做到这一点提出任何建议.我在第140行有我的按钮.我还使用了db_connect()函数,所以我不必多次写它.在我保存为csv之前,我可以使用它来读取数据库.
任何建议将不胜感激.请注意,要遵循的代码很多.
<h2>Employee Search</h2>
<form action="Draft.php" name="dbToCSV" method="GET">
<input type="submit" name="dbToCSV" value="Export Database to CSV" <?php if (isset($_GET['dbToCSV']))
{
//Do this code
}
else
{
echo "Error!";
} ?>><br />
</form>
<form action="Draft.php" method="GET">
By name: <input type="text" name="searchName">
<input type="submit" value="Search Name"><br />
</form>
<form action="Draft.php" method="GET">
By language: <input type="text" name="searchLang">
<input type="submit" value="Search Language"><br />
</form>
Run Code Online (Sandbox Code Playgroud)
它是2017年,mysqli现在比mysql更常见.所以这是Josh Liptzin的答案的mysqli版本:
<?php
/* Attempt MySQL server connection. */
$connection = mysqli_connect($database_server, $database_username, $database_password, $database_name);
// Check connection
if($connection === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
$query = "SELECT * FROM Employee_data";
$result = mysqli_query($connection, $query);
$number_of_fields = mysqli_num_fields($result);
$headers = array();
for ($i = 0; $i < $number_of_fields; $i++) {
$headers[] = mysqli_field_name($result , $i);
}
$fp = fopen('php://output', 'w');
if ($fp && $result) {
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="export.csv"');
header('Pragma: no-cache');
header('Expires: 0');
fputcsv($fp, $headers);
while ($row = $result->fetch_array(MYSQLI_NUM)) {
fputcsv($fp, array_values($row));
}
die;
}
function mysqli_field_name($result, $field_offset)
{
$properties = mysqli_fetch_field_direct($result, $field_offset);
return is_object($properties) ? $properties->name : null;
}
?>
Run Code Online (Sandbox Code Playgroud)
您实际上是在尝试将PHP代码放入HTML按钮中。该按钮可以简单地链接到另一个页面(例如dump.php),该页面包含一些PHP,如下所示:
链接:
<a href="dump.php" target="_blank">Download employee data</a>
Run Code Online (Sandbox Code Playgroud)
dump.php:
<?php
$result = mysql_query('SELECT * FROM `employee_data`');
if (!$result) die('Couldn\'t fetch records');
$num_fields = mysql_num_fields($result);
$headers = array();
for ($i = 0; $i < $num_fields; $i++) {
$headers[] = mysql_field_name($result , $i);
}
$fp = fopen('php://output', 'w');
if ($fp && $result) {
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="export.csv"');
header('Pragma: no-cache');
header('Expires: 0');
fputcsv($fp, $headers);
while ($row = $result->fetch_array(MYSQLI_NUM)) {
fputcsv($fp, array_values($row));
}
die;
}
?>
Run Code Online (Sandbox Code Playgroud)
出于您自己的考虑,您不应将上面的代码复制并粘贴到您的作业中-您发布的代码与上面的代码之间存在天壤之别,因此评分者会立即选择。
课程结束了,我想我会展示我是如何解决我的问题的。这对我来说最有意义,而且不需要很多行代码。我确信可能有更短的方法来做到这一点,但对于 php 来说我很陌生,我认为我的代码做得很好。
我基本上做了一个 if 语句来检查数据库中是否有任何记录,然后它获取每个记录字段并将其写入 cdv 文件,同时添加逗号。这段代码我做了两次。顶部代码写入数据库字段名称,后半部分写入这些字段中的值。谢谢大家的建议。我很高兴我能够及时解决并提交作业。
if (isset($_GET['dbToCSV']))
{
// database connection
db_connect();
$query = mysql_query("SELECT * FROM employee_data") or die(mysql_error());
$number_rows = mysql_num_rows($query);
if ($number_rows >= 1)
{
$filename = "exported_db_" . date("m-d-Y_hia") . ".csv"; // filenme with date appended
$fp = fopen($filename, "w"); // open file
$row = mysql_fetch_assoc($query);
$seperator = "";
$comma = "";
foreach ($row as $name => $value)
{
$seperator .= $comma . $name; // write first value without a comma
$comma = ","; // add comma in front of each following value
}
$seperator .= "\n";
echo "Database has been exported to $filename";
fputs($fp, $seperator);
mysql_data_seek($query, 0); // use previous query leaving out first row
while($row = mysql_fetch_assoc($query))
{
$seperator = "";
$comma = "";
foreach ($row as $name => $value)
{
$seperator .= $comma . $value; // write first value without a comma
$comma = ","; // add comma in front of each following value
}
$seperator .= "\n";
fputs($fp, $seperator);
}
fclose($fp);
}
else
echo "There are no records in the database to export.";
mysql_close();
}
Run Code Online (Sandbox Code Playgroud)