2016-08-08 9 views
2

Dies ist meine normale CSV-Abfrage. Ich möchte den Spaltennamen aus Benutzereingaben nehmen. wie mit einem Formular, das Kontrollkästchen oder Dropdown enthält. Wie soll ich das ändern? Ich habe versucht Checkbox, aber isetset ($ _ POST ["checkboxname"]) funktioniert nicht. Hilf mir bitte.Ich möchte ein Excel von Mysql-Datenbank exportieren. Ich möchte den Spaltennamen von Benutzern mit Hilfe von Kontrollkästchen haben

<?php 
    include("../../../config.php"); 
    //if(isset($_POST["submit"])){ 

    $xls_filename = 'export_'.date('Y-m-d').'.xls'; // Define Excel (.xls) file name 
    $start_date=$_POST["date_time"]; 
    $sql_ex = "Select device_name,description,card,device_module,uid FROM device"; 
    $result = @mysql_query($sql_ex,$conn) or die("Failed to execute query:<br />" . mysql_error(). "<br />" . mysql_errno()); 

    // Header info settings 
    header("Content-Type: application/xls"); 
    header("Content-Disposition: attachment; filename=$xls_filename"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 

    /***** Start of Formatting for Excel *****/ 
    // Define separator (defines columns in excel &amp; tabs in word) 
    $sep = "\t"; // tabbed character 

    // Start of printing column names as names of MySQL fields 
    for ($i = 0; $i<mysql_num_fields($result); $i++) { 
     echo mysql_field_name($result, $i) . "\t"; 
    } 
    print("\n"); 
    // End of printing column names 

    // Start while loop to get data 
    while($row = mysql_fetch_row($result)) 
    { 
     $schema_insert = ""; 
     for($j=0; $j<mysql_num_fields($result); $j++) 
     { 
     if(!isset($row[$j])) { 
      $schema_insert .= "NULL".$sep; 
     } 
     elseif ($row[$j] != "") { 
      $schema_insert .= "$row[$j]".$sep; 
     } 
     else { 
      $schema_insert .= "".$sep; 
     } 
     } 
     $schema_insert = str_replace($sep."$", "", $schema_insert); 
     $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert); 
     $schema_insert .= "\t"; 
     print(trim($schema_insert)); 
     print "\n"; 
    } 

    ?> 

Antwort

0

Erstens ist das kein Excel-Format. Sie erstellen eine tsv-Datei (und beschädigen Daten durch Entfernen von Zeilenumbruchzeichen). Verwenden Sie fputcsv und write straight to output, es wird Ihre Daten ordnungsgemäß entgehen, so dass Sie nicht müssen.

Legen Sie für Ihre Spaltenauswahl ein assoziatives Array mit Spaltennamen als Schlüssel und benutzerfreundlichen Beschriftungen als Werte fest. Verwenden Sie ein Formular mit Kontrollkästchen, die beim Iterieren des Arrays erstellt wurden, und geben Sie name="columns[]" und den Wert für den Spaltennamen und das Label neben dem Kontrollkästchen an. In dem Teil des Skripts, der die empfangenen Werte liest, überprüfen Sie zuerst, ob isset($_POST['columns']) und dann, wenn jeder Wert im Array mit gebuchten Werten tatsächlich in Ihrem ersten Array existiert. Wenn alles in Ordnung ist, implode() die Posted-Spalten in Ihrer Abfrage zu verwenden.


Etwas, das man aus zu starten, müssen Sie sich nicht POST mit einem Formular verwenden, die nur Daten lesen:

<?php 
$columns = [ 
    'device_name' => 'Device name', 
    'description' => 'Description', 
    ... 
]; 

// validate 
if (isset($_GET['columns'])) { 
    if (!is_array($_GET['columns'])) { 
     unset($_GET['columns']); 
    } 
    else { 
     foreach ($_GET['columns'] as $k => $column) { 
      if (!is_string($column) || !isset($columns[$column])) { 
       unset($_GET['columns'][$k]); 
      } 
     } 
     if ($_GET['columns']) { 
      $_GET['columns'] = array_values($_GET['columns']); 
     } 
     else { 
      unset($_GET['columns']); 
     } 
    } 
} 

// no (valid) column selection 
if (!isset($_GET['columns']) {?> 
    <form action=""> 
     <?php foreach ($columns as $column => $label) {?> 
      <label><input type=checkbox value="<?php echo $column;?>"> 
       <?php echo $label;?></label> 
     <?php }?> 
    ... 
<?php } 
else { 
    ... 
    $sql_ex = 'SELECT ' . implode(', ', $_GET['columns']) . ' FROM device'; 
    ... 
    // column headings 
    fputcsv($output, array_intersect_key($columns, array_flip($_GET['columns']))); 
    // output rows 
    ... 
} 
+0

können Sie mir ein Beispiel geben ... –

Verwandte Themen