Tengo un formulario en el que el usuario sube un archivo CSV con una serie de campos predefinidos.
El problema llega a la hora de guardar esos campos en una tabla MySQL, no consigo hacerlo. Tengo el siguiente codigo:
Código PHP:
//Si el archivo NO esta vacio, y NO da error -->
if(!empty($archivo) && !$archivo['error']){
$ext = (string)end(explode('.', $archivo['name']));
($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'){
//Abre el archivo en modo de solo lectura con el cursos al principio, y lo setea a --rpoint--
$rpoint = fopen($archivo['tmp_name'],'r');
//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, ";");
/
//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']);
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...\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,";");
//Aqui voy controlando los errores posibles en cada posicion del CSV
$row = 2;
while (($data = fgetcsv($rpoint, 1000, ";")) !== FALSE) {
$num = count($data);
echo "cuenta --> " . $num . "<br/>";
$skipl = true;
for($i = 0; $i < $num; $i++){
$skipl = $skipl && ($data[$i] == '');
}
if(!$skipl){
//idTipoSuelo
if ($data[0] == '' || $data[0] > '16' || $data[0] == '1') {
$sMensaje = 'Existen erores en el archivo de carga de activos. <a href="#ListadoErrores">Consúltelos al final de la página.</a>';
$errores['idTipoSuelo'][] = $row;
}
//C_Latitud
if ($data[1] != '') {
for ($i=0; $i<strlen($data[1]); $i++){
if (strpos($permitidosLatLong, substr($data[1],$i,1))===false){
$errores['C_Latitud'][] = $row;
$sMensaje = 'Existen erores en el archivo de carga de activos. <a href="#ListadoErrores">Consúltelos al final de la página.</a>';
}
}
}...//Asi hasta 51 que es el numero de posiciones
fputcsv($wpoint,$data,";");
Código PHP:
$sSQL = " LOAD DATA INFILE '" . $ruta . "'" .
" 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)){
He mirado otros topic muy parecidos y bastante antiguos, pero no doy con ello.
Un SALUDO