Aggiornare tabella db con php

giancadeejay

Utente Attivo
26 Ott 2010
224
0
16
torino
Ciao a tutti,
Volevo chiedere se c'e' qualcuno che riesce a risolvermi questo problemino.
In pratica tamite pagina.php inesrisco un file che mi popola la mia bella tabella del db.
Uso la funzione INSERT into tabella ma per fare cio' devo prima svuotarla tramite (TRUNCATE).
Mi piacerebbe invece usare la funzione UPDATE ma non riesco a capire come fare..mi documento ma mi sfugge qualcosa.. qualcuno puo' darmi una mano?

pagina.php
Codice:
$file = "ok.csv";

require '../struttura/config.php';
require '../struttura/connect.php';

$handle = fopen($file, "r");

$sql="INSERT INTO mia_tabella (
 DATO1  ,DATO2  ,DATO3  ,DATO4  ,DATO5  ,DATO6  ,DATO7  ,DATO8  ,DATO9  ,DATO10
,DATO11 ,DATO12 ,DATO13 ,DATO14 ,DATO15 ,DATO16 ,DATO17 ,DATO18 ,DATO19 ,DATO20
,DATO21 ,DATO22 ,DATO23 ,DATO24 ,DATO25 ,DATO26 ,DATO27 ,DATO28 ,DATO29 ,DATO30
,DATO31 ,DATO32 ,DATO33 ,DATO34 ,DATO35 ,DATO36 ,DATO37 ,DATO38 ,DATO39 ,DATO40
,DATO41 ,DATO42 ,DATO43 ,DATO44 ,DATO45 ,DATO46 ,DATO47 ,DATO48 ,DATO49 ,DATO50
,DATO51 ,DATO52
) VALUE (";

$Lcol = 0;
while( !feof($handle) )
{
    $row  = fgets($handle);
    $col  = explode(";", $row);

    if ($Lcol == 0) $Lcol = count($col);
 
    else
    {
        $q = $sql;
        $i = 1;
        foreach($col as $key => $val)
        {
            if ( empty($val) ) $val = 0;  // riga da inserire
            $q .= "'".addslashes($val)."'".( $i<$Lcol ? "," : ")" );
            $i++;
           
        }
        if ( $i > $Lcol )
        {          
            // var_dump($q); echo "<br /><br />";
                     
            $result = mysql_query($q);
           
            if (!$result)
            {
                die("Errore nella query $query : " . mysql_error());
            }
        }
    }
}
            echo "<br><br><br><center><b><h1><font color='white'>FILE DI AGGIORNAMENTO CARICATO CON SUCCESSO !</font></h1></center></b> ";
fclose($handle);

mysql_close();

Grazie a tutti in anticipo
 
ciao
ti schematizzo, decommenta e ricommenta i vari var_dump per vedere come si formano i dati
PHP:
<?php
$dati=file('file_csv.csv');//array compostto dalle righe del csv
$nomi_campi=explode(";",$dati[0]);//dalla riga 0 ricavo i nomi DATO1, DATO2....
echo "<pre>";
//var_dump($nomi_campi);
$valore_campi=explode(";",$dati[1]);//ricavo i valori dalla seconda riga
//var_dump($valore_campi);
$setup="";
for($k=0; $k<count($nomi_campi);$k++){//costruisco il SET per l'UPDATE: DATO1='valore' DATO2=...
    $nome = $nomi_campi[$k];
    $valore= $valore_campi[$k];
    $setup.=$nome."='".$valore."',";
}
$lung=strlen($setup)-1;//tolgo l'ultima virgola
$setup=substr($setup,0,$lung);
//var_dump($setup);
$query="UPDATE mia_tabella SET ".$setup;//costruisco la query
var_dump($query);
echo "</pre>";
//e uppo mysql_query($query);
?>
 
ciao
ti schematizzo, decommenta e ricommenta i vari var_dump per vedere come si formano i dati
PHP:
<?php
$dati=file('file_csv.csv');//array compostto dalle righe del csv
$nomi_campi=explode(";",$dati[0]);//dalla riga 0 ricavo i nomi DATO1, DATO2....
echo "<pre>";
//var_dump($nomi_campi);
$valore_campi=explode(";",$dati[1]);//ricavo i valori dalla seconda riga
//var_dump($valore_campi);
$setup="";
for($k=0; $k<count($nomi_campi);$k++){//costruisco il SET per l'UPDATE: DATO1='valore' DATO2=...
    $nome = $nomi_campi[$k];
    $valore= $valore_campi[$k];
    $setup.=$nome."='".$valore."',";
}
$lung=strlen($setup)-1;//tolgo l'ultima virgola
$setup=substr($setup,0,$lung);
//var_dump($setup);
$query="UPDATE mia_tabella SET ".$setup;//costruisco la query
var_dump($query);
echo "</pre>";
//e uppo mysql_query($query);
?>
Ciao Borgo mi restituisce questo??
string(23) "UPDATE completo SET =''"
 
ciao
io ho provato con un mio file csv tipo
DATO1;DATO2;DATO3;DATO4;........;DATO50;DATO51;DATO52
1;UGOLONE;1;UGOLONE;MOD2;E3U;3;550000X058390;........;N-AVA.O-BX.1;5;UGOLONE
e funziona cioè crea la query "UPDATE mia_tabella SET DATO1='1', DATO2='UGOLONE'......"
copia il tuo csv su un file txt e allegalo
 
Scusami Borgo ....puoi spiegarmi bene l'ultimo passaggio... io con il mio codice postato eseguo un UPLOAD del file.csv per ottenere l'INSERT into .... ???
 
ciao
per fare l'insert devi usare quello che hai fatto tu, per uppare lo script che ti ho postato, questo se non ho capito male, comunque ho alcuni dubbi, anche se forse mi ripeto:
da quello che ho capito tu hai una tabella con 52 campi chiamati DATO1.....DATO52, giusto?
da quello che ho capito tale tabella è composta da un'unico record (riga) (da 52 colonne) giusto?
se è così la prima volta (tabella vuota) fai l'insert e le successive l'update cioè vai ad sempre aggiornare l'unica riga che hai inserto la prima volta.
se non è così, ma ad esempio, se la tabella deve avere piu righe (sempre di 52 colonne) manca un dato importante "l'identificativo del record (riga)" altrimenti come fa php a sapere quale record (riga) deve andare ad uppare
 
ciao
ripartiamo da zero, ti schematizzo poi i campi da 1 a 52 e quello che contengono varchar o int o ecc... ci pensi tu
1° caso tabella con tre campi e un unico record (o riga)
DATO1 varchar(50)
DATO2 varchar(50)
DATO3 varchar(50)
e un file csv chiamato uno.csv
DATO1;DATO2;DATO3
pinco;pallo;sempronio
per l'insert
PHP:
<?php
$dati=file('uno.csv');
/*
in $dati[0] trovi DATO1;DATO2;DATO3
in $dati[1] trovi pinco;pallo;sempronio che sono da inserire nella tabella
*/
//trasformi pinco;pallo;sempronio in 'pinco','pallo','sempronio'
$arr=explode(";",$dati[1]);//$arr[0]=>pinco $arr[1]=>pallo $arr[2]=>sempronio
$valori="'".implode("','", $arr)."'";
//e fai l'insert
$ris=mysql_query("INSERT INTO tabella($valori)");
?>
e ti ritrovi con la tabella piena (tabella con tre campi e un unico record (riga)
ora vuoi uppare la tabella usando un altro csv (o con lo stesso ma con i valori diversi)
quindi avrai un altro file csv chiamato es. secondo.csv (o con lo stesso nome)
DATO1;DATO2;DATO3
amelia;sofonisba;befana
e quindi vuoi uppare
PHP:
<?php
$dati=file('secondo.csv');
//e il resto dello script che ti ho postato
?>
al termine dell'upp ti ritrovi con la tabella che contiene
amelia sofonisba befana
pinco;pallo;sempronio spariscono

2° caso sempre tabella con tre compi ma con più record (righe)
la tabella non può essere come quella sopra, ma deve avere l'identificativo del record (riga)
id int(12) autoincrement primarykey
DATO1 varchar(50)
DATO2 varchar(50)
DATO3 varchar(50)
al primo insert (fatto come sopra) ti ritrovi la tabella
1 pinco pallo sempronio
se fai un altro insert
1 pinco pallo sempronio
2 amelia sofonisba befana
ecc.. ad ogni insert si aggiunge un record (riga)
a questo punto per uppare devi anche sapere quale record (riga) devi uppare
sempre usando lo scrip che ti ho postato con alcune modifiche
PHP:
<?php
$id=2;//aggiungere: per es uppare il secondo record
//quello che ti ho postato
//modificando anche la query
//.....
$query="UPDATE tabella SET ".$setup." WHERE id=$id";//costruisco la query
//....
?>
se es ho usato per uppare il seguente csv
DATO1;DATO2;DATO3
bianco;rosso;verdone
la tabella ti risulterà
1 pinco pallo sempronio
2 bianco rosso verdone

ora tutto dipende da quello che vuoi fare, spero comunque di essere stato chiaro
 

Discussioni simili