2014-02-21 6 views
0

Я действительно новичок в php, и все, что я узнал, из моего школьного учебника и онлайн-исследований. С этим сказал, что я пытаюсь выполнить задание, и я застрял на последней части. для окончательной части присваивается сообщение «Создайте PHP-скрипт, который будет выгружать содержимое таблицы сотрудников в текстовый файл CSV, который имеет значения, разделенные запятой для каждой записи. Каждая новая запись должна начинаться с новой строки«. Я пробовал много онлайн-уроков, но никто из них не учит, как это событие вводить. Я включаю свой код, чтобы вы могли видеть беспорядок, который у меня есть. Это не плохо, но я уверен, что смогу сделать ту же задачу с гораздо меньшим количеством кода. Снова я только начинаю, и это лучшее, что я могу сделать сейчас. Может ли кто-нибудь дать какие-либо предложения о том, как это можно сделать. У меня есть моя кнопка в строке 140. Я также использовал функцию db_connect(), поэтому мне не нужно писать ее много раз. Я могу использовать его для чтения базы данных, прежде чем я сохраню его как csv.Экспорт таблицы в CSV через кнопку php

Любые предложения были бы весьма полезными. Будьте осторожны. Для этого нужно много кода.

<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> 
+0

Пожалуйста, уменьшите код до соответствующих предметов для вашего вопроса. Опубликованный код содержит много других вещей, которые напрямую не связаны с вашей проблемой. – Ruben

+0

Я был бы осторожен, учитывая, что это часть вашего финала. Вы никогда не узнаете, кто это видит, просто предложение. – Codexer

ответ

0

Итак, класс закончился, и я полагаю, что покажу, как я решил свою проблему. это имело для меня наибольший смысл, и это не занимало много строк кода. Я уверен, что возможно даже более короткие способы сделать это, но для того, чтобы быть очень новым для php i, я сделал хорошую работу с кодом.

Я в основном сделал оператор 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(); 
} 
1

Вы буквально пытаетесь поместить код PHP внутри кнопки HTML. Кнопка может быть просто ссылку на другую страницу (как dump.php), который содержит некоторые PHP вроде следующего:

Ссылка:

<a href="dump.php" target="_blank">Download employee data</a> 

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; 
} 

?> 

кодекса источник: PHP code to convert a MySQL query to CSV

Для себя же вы не должны копировать и вставлять вышеуказанный код в свое задание - существует мир различий между кодом, который вы опубликовали, и кодом выше t шляпа, грейдер мгновенно заберет.

+0

Спасибо за помощь. У меня есть свой собственный код, который я загрузил, и он отлично справляется с задачей. Сейчас я пытаюсь выяснить, как называть этот код с помощью кнопки, но сохраняйте код на том же сайте, что и все остальное. Я знаю, что это очень много для простого сайта, но я пытаюсь сделать все это на одной php-странице.С твоим советом мне нужно кое-что поработать. Я поправлю свои результаты после его завершения. – mcvargas

1

Это 2017, а mysqli более распространен, чем mysql. Так вот MySQLi версия ответа Джоша Liptzin в:

<?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; 
} 

?> 
0

Ниже PHP скрипт, который я использую.

<?php 

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 

$table_name = "employees"; 

$fp = fopen('php://output', 'w'); 
header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename="'.$table_name.'.csv"'); 
header('Pragma: no-cache'); 
header('Expires: 0'); 

$result = mysql_query("SELECT * FROM $table_name"); 
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); 
} 

if ($fp && $result) { 
    fputcsv($fp, $headers); 
    while ($row = mysql_fetch_assoc($result)) { 
     fputcsv($fp, $row); 
    } 
} 

exit; 
?> 
Смежные вопросы