Hola gnzsoloyo,
Disculpa por no postear en el foro correcto, tenia la duda de en cual incluirlo.
Explico el flujo para ver si me podéis aconsejar el mejor modo de hacerlo.
1- Recojo el archivo CSV con un input
2- Lo almaceno en una variable
Código PHP:
if(isset($_FILES['datafile'])){$archivo = $_FILES['datafile'];}
3- Compruebo que es CSV
Código PHP:
($archivo['name'] != $ext) ? strtolower($ext) : '';
// La ruta debe cambiar los slash. Si esto corriese en Linux habría que revisarlo
// Se verifica que el archivo enviado es un CSV
if($ext == 'csv'){
Si es CSV continuo
Código PHP:
//Abre el archivo en modo de solo lectura con el cursos al principio, y lo setea a --rpoint--
$rpoint = fopen($archivo['tmp_name'],'r');
//echo "rpoint -->" . $rpoint . "<br>";
//Obtiene una linea desde el handle --rpoint-- con parametro a 5000 longitud de la linea mas larga. y lo setea a --data--
$data = fgetcsv($rpoint, 5000, ";");
//echo "data -->" . $data . "<br>";
//Coge la ruta de TEMP y le concatena el nombre de archivo hasseado en md5 . y lo setea a --tfile--
$tfile = TEMP . md5($archivo['name']);
//echo "tfile -->" . $tfile . "<br>";
chmod($tfile, 0755);
chmod($archivo['tmp_name'], 0755);
//Realiza una copia de archivo en destino (tfile)
if (!copy($archivo['tmp_name'],$tfile)) {
echo "Error al copiar $archivo... (LINEA 83)\n";
}
//Abre el fichero en la ruta destino (tfile) y lo setea a wpoint
$wpoint = fopen($tfile,'w','r');
//remplaza \\ en tfile y lo setea a --ruta--
$ruta = str_replace('\\','/',$tfile);
//coloca el csv (devuelve FALSE si error)
fputcsv($wpoint,$data,";");
El codigo anterior me falla en el copy, si lo entiendo bien eso tendria que colocar mi archivo en el servidor??
Pero no sube nada.
4- Hago la revision de errores.
5- Lo paso a una tabla temporal y luego a la tabla definitiva.
Código PHP:
if ($archivok=='1'){
echo "----------------------------------------------> BP2.1";
$sSQL = " LOAD DATA INFILE '" . $fichero . "'" .
" INTO TABLE ga_tmpActivosDocumentos " .
" FIELDS TERMINATED BY ';'" .
" LINES TERMINATED BY '\\n' " .
" IGNORE 1 LINES (idTipoSuelo,C_Latitud,C_Longitud,Referencia,Zona,idProvincia,Poblacion,TituloActivo,Descripcion,Superficie,Gastos,Equipamiento,EquipamientoEN,GestionDocumental,PrecioVenta,CampoLibre1_Texto,CampoLibre1_Titulo,CampoLibre1_TextoEN,CampoLibre1_TituloEN,Activo," .
" IMG1,IMG_Desc1,IMG_Desc1EN,IMG2,IMG_Desc2,IMG_Desc2EN,IMG3,IMG_Desc3,IMG_Desc3EN,IMG4,IMG_Desc4,IMG_Desc4EN,DOC1,DOC_Desc1,DOC_Desc1EN,DOC2,DOC_Desc2,DOC_Desc2EN,DOC3,DOC_Desc3,DOC_Desc3EN,DOC4,DOC_Desc4,DOC_Desc4EN,URL1,URL_Desc1,URL_Desc1EN,URL2,URL_Desc2,URL_Desc2EN)" .
" SET idCliente = " . $sActivoCliente . "" ;
echo $sSQL;
if($oBD->fnModifica($sSQL)){
echo "----------------------------------------------> BP3";
$sSQLTemp = " SELECT * FROM ga_tmpactivosdocumentos";
if($oBD->fnConsulta($sSQLTemp)){
$aidActivos = $oBD->fnObtenMatriz();
echo "----------------------------------------------> BP4";
foreach ($aidActivos as $aidActivo) {
$sSQLInsActivo = "INSERT INTO ga_activos (idCliente, idTipoSuelo, C_Latitud, C_Longitud, Referencia, Zona, idProvincia, Poblacion, TituloActivo, Descripcion, DescripcionEN, Superficie, Gastos, Equipamiento, EquipamientoEN, GestionDocumental, PrecioVenta, CampoLibre1_Titulo, CampoLibre1_Texto, CampoLibre1_TituloEN, CampoLibre1_TextoEN, Activo, FechaActivo) VALUES (";
//INSETA VALORES
$sSQLInsActivo .= fnObtenValorSQL($aidActivo['idActivo'], 'txt') . ", ";
$sSQLInsActivo .= fnObtenValorSQL($aidActivo['idCliente'], 'txt') . ", ";
$sSQLInsActivo .= fnObtenValorSQL($aidActivo['idTipoSuelo'], 'txt') . " , ";
$sSQLInsActivo .= $aidActivo['C_Latitud'] . ", ";
$sSQLInsActivo .= $aidActivo['C_Longitud'] . ", ";
$sSQLInsActivo .= fnObtenValorSQL($aidActivo['Referencia'], 'txt') . " , ";
$sSQLInsActivo .= fnObtenValorSQL($aidActivo['Zona'], 'txt') . " , ";
$sSQLInsActivo .= fnObtenValorSQL($aidActivo['idProvincia'], 'txt') . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['Poblacion'], 'txt')) . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['TituloActivo'], 'txt')) . " , ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['Descripcion'], 'txt')) . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['DescripcionEN'], 'txt')) . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['Superficie'], 'txt')) . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['Gastos'], 'txt')) . " , ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['Equipamiento'], 'txt')) . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['EquipamientoEN'], 'txt')) . ", ";
$sSQLInsActivo .= fnObtenValorSQL($aidActivo['GestionDocumental'], 'txt') . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['PrecioVenta'], 'txt')) . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['CampoLibre1_Titulo'], 'txt')) . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['CampoLibre1_Texto'], 'txt')) . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['CampoLibre1_TituloEN'], 'txt')) . ", ";
$sSQLInsActivo .= str_replace('\"',"",fnObtenValorSQL($aidActivo['CampoLibre1_TextoEN'], 'txt')) . ", ";
$sSQLInsActivo .= fnObtenValorSQL($aidActivo['Activo'], 'txt') . ", " . 'NOW()' . ");";
$oBD->fnModifica($sSQLInsActivo);
Realmente estoy modificando un código existente y veo cosas sin sentido. Pero tengo que intentar variar el código lo menos posible.
No se si no estoy siendo lo suficientemente claro con mi explicación.
Básicamente lo que me gustaría es poder subir el archivo excel con varias lineas para que se puedan hacer inserciones masivas en la BD (No necesito que el archivo se gurade, solo sus valores.)
El tema de los permisos he aplicado 777 al usuario que hace la conexión.
Gracias