Passare solo alcuni parametri a script per CSV

  • Creatore Discussione Creatore Discussione Phelps
  • Data di inizio Data di inizio

Phelps

Utente Attivo
17 Dic 2018
50
0
6
Buonasera a tutti, dal titolo non riesco a spiegare bene, ci provo qua.
Sto lavorando con le WOOCOMMERCE API ed in localhost mi scarico a chiamata un JSON a cui faccio il decode, su cui poi c'è un cliclo foreach che genera le righe di una tabella in cui io mi stampo solo i campi che mi servono. STampo in totale 100 righe.
Ultimamente mi si sta creando la necessita di prendere solo alcune di queste info e di generare un CSV mappato che poi vado a caricare su un sito che mi carica le distinte di spedizione.

Io ho pensato di racchiudere la tabella in un form con method="post" e action="createcsv.php" che dovrà ricevere le info inviate mediante post.
Ho messo nel primo<td> un checkbox che mi servirà a spuntare la riga della quale io voglio inviare le info. Come faccia ad inviare le info solo di queste righe selezionate?
Codice:
<td><input type="checkbox" name="selected" id=""></td>

Io ho provato a vare cosi, ma vedo che è un sistema fallimentare:
nella tabella ho immesso un solo campo input hidden nella quale stampo in dinamico a mò di stringa separati da virgola solo i valori che voglio del tipo:
Codice:
<input type="hidden" name="buyer" value="<?= $row['shipping']['first_name']; ?>,<?= $row['shipping']['last_name']; ?>,<?= $row['shipping']['address_1']; ?>,<?= $row['shipping']['postcode']; ?>,<?= $row['shipping']['city']; ?>,<?= $row['shipping']['state']; ?>,<?= $row['billing']['email']; ?>,<?= $row['billing']['phone']; ?>">

poi nel file createcsv.php faccio questo:
Codice:
<?php
   function outputCSV($data,$file_name = 'file.csv') {
    # output headers so that the file is downloaded rather than displayed
     header("Content-Type: text/csv");
     header("Content-Disposition: attachment; filename=$file_name");
     # Disable caching - HTTP 1.1
     header("Cache-Control: no-cache, no-store, must-revalidate");
     # Disable caching - HTTP 1.0
     header("Pragma: no-cache");
     # Disable caching - Proxies
     header("Expires: 0");
 
     # Start the ouput
     $output = fopen("php://output", "w");
    
      # Then loop through the rows
     foreach ($data as $row) {
         # Add the rows to the body
         fputcsv($output, $row); // here you can change delimiter/enclosure
     }
     # Close the stream off
     fclose($output);
 }

 if (isset($_POST['submit'])) {
            foreach ($_POST['buyer'] as $key => $value) {
                if ($_POST['selected']) {
                $arr = explode(",", $value);
                outputCSV(array($arr),'download.csv');
                }
         }
     }

nel mio essere limitato ho ciclato sul campo buyer e poi con esplode lo trasformo in array. Il controllo su "selected" che sarebbe il checkbox risulta come ho notato TRUE perche basta spuntarne solo uno affinche la condizione sia soddisfatta. Credo che questo controllo non vada proprio bene.
Il CSV mi viene stampato, e solo che mi stampa sempre dalle righe da 1 a 43 e poi iniza a dare errori sulle righe successive e non ho capito perche.
MA intanto cmq non mi stampa solo le righe che avevo richiesto.
Vi chiedo gentilmente di aiutarmi, grazie a tutti
 

Discussioni simili