estrazione dati da mysql in php e salvataggio in cartella del server

ciao
se i venditori non sono molti forse ti conviene creare due array, uno con i nomi dei venditori e l'altro con i codici numerici
l'unica cosa da stare attenti che i due array abbiano lo stesso numero di elementi e usare ireplace che è caseinsensitive
PHP:
<?php
$venditori=array('Pinco','Pallo','Sempronio');
$codice=array('v1','v2','v3');
$stringa="1 11/11/2016,CLIENTE1,N.1 TAVOLON.2 SEDIE,Pallo";
echo "$stringa <br />";
$stringa = str_ireplace($venditori, $codice, $stringa);
echo "$stringa";
?>
Ciao,
Grazie per la risposta.
Volevo chiederti, è possibile inserire questo codice insieme a quello precedente in modo che faccia tutto in automatico?
Inoltre, come posso richiamare ($stringa="1 11/11/2016,CLIENTE1,N.1 TAVOLON.2 SEDIE,Pallo";) con ogni singola riga del mio database?
 
Vi spiego inoltre qual'è il mio problema, e se risolvo questo finalmente posso utilizzare questa estrazione (grazie al vostro preziosissimo aiuto).

Ho bisogno di incrociare due tabelle per estrapolare il dato della colonna Venditore. Vi schematizzo il tutto:

tblprojects
id | name | description | status | deadline
19 | cliente1 | descrizione1 | 1 | 19/01/2016
22 | cliente2 | descrizione2 | 4 | 19/01/2016
23 | cliente3 | descrizione3 | 4 | 02/01/2016
27 | cliente4 | descrizione4 | 2 | 15/02/2016
77 | cliente5 | descrizione5 | 1 | 17/02/2016
...

e la tabella tblcustomfieldsvalues
id | relid | fieldid | fieldto | value
285 | 19 | 23 | projects | Pinco
285 | 22 | 23 | projects | Pallo
285 | 27 | 23 | projects | Sempronio
285 | 77 | 23 | projects | Tizio
...
(il relid della tabella tblcustomfieldvalues è collegato al campo id della tabella tblprojects. bisogna però richiamare il valore 23 del fieldid per dire allo script che deve controllare solo quei valori e lasciare perdere le righe della tabella del db che contengono altri valori numerici. come logica diciamo che dovrebbe pensare: cerca l'id x di tblprojects in relid di tblcustomfieldvalues e se il fieldid è 23 dammi il value(il corrispondente numerico) altrimenti lascia vuoto).

Ho bisogno che nel file che si estrapola con il .csv devono esserci le seguenti colonne:

name | description | status | deadline | Venditore

e come dicevo nel post precedente ho bisogno che i valori della colonna venditore siano numerici:
ad esempio a Pinco associo l'1, a Pallo associo il 2, a Sempronio il 3 e a Tizio il 4.

Spero si possa fare,
Grazie ragazzi!
 
Ultima modifica:
devi usare la JOIN per collegare due tabelle
Codice:
SELECT *
FROM tblprojects t1
LEFT JOIN tblcustomfieldsvalues t2 ON t1.id = t2.relid
ORDER BY id
per il valore numerico devi crearti un array come diceva Borgo
 
scusate ragazzi, ma non riesco proprio a farlo funzionare. qualcuno di voi sarebbe così gentile da postare il codice funzionante?
io sono arrivato fino a qui e funziona, ma aggiungendo il resto... niente da fare

PHP:
<?php
$host="xxx.xxx.xxx.xxx";
$user="my_user";
$pass="my_psw";
$db_name="my_db";
$table="tblprojects";
$conn = mysqli_connect($host,$user,$pass,$db_name) or die("Errore connessione");
$query = "SELECT status, deadline, name, description FROM $table";
$result = mysqli_query($conn,$query) or die("Errore della query");

//delete file old
unlink('./export/file.csv');

//Open a file in write-mode (he creates it, if it not exists)
$fp = fopen('./export/file.csv', 'w');

// output the column headings
fputcsv($fp, array('status','deadline','name','description'));

function utf8($value) {
    return str_replace("<br />", " - ", utf8_encode($value));
}

// loop over the rows, outputting them
while ($row = mysqli_fetch_assoc($result)) {
    fputcsv($fp, array_map(utf8, $row));
}

//close the handler
fclose($fp);
?>

per favore, abbiate pazienza...
 
prova cosi
PHP:
<?php

$host = "localhost";
$user = "root";
$pass = "password";
$db_name = "database";

$conn = mysqli_connect($host, $user, $pass, $db_name) or die("Errore connessione");
$query = "SELECT status,deadline,name,description,value FROM tblprojects T1 "
        . "LEFT JOIN tblcustomfieldsvalues T2 ON T1.id = T2.relid && fieldid = 23 "
        . "ORDER BY T1.id DESC";
$result = mysqli_query($conn, $query) or die("Errore della query");

//delete file old
if (file_exists("file.csv")) {
    unlink('file.csv');
}

//Open a file in write-mode (he creates it, if it not exists)
$fp = fopen('file.csv', 'w');

// output the column headings
fputcsv($fp, array('status', 'deadline', 'name', 'description', 'venditore'));

function utf8($value) {
    return str_replace("<br />", " - ", utf8_encode($value));
}

$venditori = array("", "pinco", "pallo", "tizio");

// loop over the rows, outputting them
while ($row = mysqli_fetch_assoc($result)) {
    $row['value'] = array_search($row['value'], $venditori);
    fputcsv($fp, array_map("utf8", $row));
}
//close the handler
fclose($fp);
 
Grandissimo Criric, funziona alla meraviglia.
Ultima cosa, solo a description e status mi vengono i valori contenuti in "".
Come posso eliminarli in modo che tutto il file csv sia delimitato solo dalle ,
Oppure, come posso mettere gli "" anche agli altri campi??

Grazie!!
 
aggiungi il doppio apice nella funzione str_replace(), strano cmq a me non li mostra.
 
PHP:
function utf8($value) {
    $value = str_replace("\"", "", $value);
    return str_replace("<br />", " - ", utf8_encode($value));
}
 
niente da fare, ho sostituito il codice che mi hai riportato ma estrapolando il file continuo ad avere il problema.
Ti riporto una riga di esempio:
status,deadline,name,description,venditore
2,2017-03-13,"ANTICHE RISERVE","N. 1 TAVOLO F00452",4

se si riuscisse anche ad avere la data in formato dd-gg-yyyy sarebbe fantastico
 
riposta lo script per intero
formattare le date in php è semplice, ne abbiamo parlato anche in questa discussione
PHP:
$row['campodata'] = implode("/", array_reverse(explode("-", $row['campodata'])));
 
ecco il codice completo.
Ho provato anche a inserire il codice per le date ma non funziona (ho provato anche a sostituire campodata con deadline (il campo con la data nel mio db) ma niente.

PHP:
<?php

$host="my_host";
$user="my_user";
$pass="my_pass";
$db_name="my_dbname";

$conn = mysqli_connect($host, $user, $pass, $db_name) or die("Errore connessione");
$query = "SELECT status,deadline,name,description,value FROM tblprojects T1 "
        . "LEFT JOIN tblcustomfieldsvalues T2 ON T1.id = T2.relid && fieldid = 23 "
        . "ORDER BY T1.id DESC";
$result = mysqli_query($conn, $query) or die("Errore della query");
$row['campodata'] = implode("/", array_reverse(explode("-", $row['campodata'])));

//delete file old
if (file_exists("./files/export.csv")) {
    unlink('./files/export.csv');
}

//Open a file in write-mode (he creates it, if it not exists)
$fp = fopen('./files/export.csv', 'w');

// output the column headings
fputcsv($fp, array('status', 'deadline', 'name', 'description', 'partners'));

function utf8($value) {
    $value = str_replace("\"", "", $value);
    return str_replace("<br />", " - ", utf8_encode($value));
}

$venditori = array("", "pinco", "pallo", "caio", "sempronio");

// loop over the rows, outputting them
while ($row = mysqli_fetch_assoc($result)) {
    $row['value'] = array_search($row['value'], $venditori);
    fputcsv($fp, array_map("utf8", $row));
}
//close the handler
fclose($fp);
 
la funzione per la data la devi mettere nel ciclo while prima dell fputcsv() con il nome del tuo campo deadline
 
ok, la data ora funziona correttamente. l'unica cosa che resta è il fatto che i valori di description e name sono tra gli apici...
 
modifica la funzione cosi
PHP:
function utf8($value) {
    $value = str_replace("\"", "", $value);
    $value = str_replace("<br />", " - ", utf8_encode($value));
    echo $value . "<br/>";
    return $value;
}
dovrebbe stamparti a video tutte le stringhe formattate
 
così facendo quando faccio invio alla pagina php mi stampa a video i dati (qui li visualizzo correttamente senza apici)
andando a verificare nel file csv invece non cambia nulla.. continuo a vedere gli apici.
 
non ho altre soluzioni. A me funziona e non capisco perchè a te no.
 
potrebbe essere un problema legato alla tabella di mysql? ho comunque controllato i due campi e non noto nulla di particolare.
in alternativa? come posso a questo punto fare in modo che tutti i valori siano tra le ""valore""?
a me interessa che sia omogeneo in modo che possa facilmente importarlo in altri gestionali o software che utilizziamo
 

Discussioni simili