Foros del Web » Programando para Internet » PHP »

Ayuda para pasar bases con apostrofes y Ñ con php

Estas en el tema de Ayuda para pasar bases con apostrofes y Ñ con php en el foro de PHP en Foros del Web. Hola a todos tengo una base dfb y la necesito pasar a mysql , tengo el siguiente scrips que anda barbaro, pero tengo el siguiente ...
  #1 (permalink)  
Antiguo 14/08/2009, 12:51
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
Ayuda para pasar bases con apostrofes y Ñ con php

Hola a todos tengo una base dfb y la necesito pasar a mysql , tengo el siguiente scrips que anda barbaro, pero tengo el siguiente problema
las Ñ las pasa ¥ con este signo y cuando encuentra un apostrofe "'" automaticamente detiene el scrip y tira error.
Mi pregunta es : como hago para que pase las Ñ bien y los apostrofes para que no de error.
gracias, aca pongo el scrip para que lo vean

<?
$basedbf='sbapropi.dbf';
$mifile = explode (".",$basedbf);

$based = $mifile[0];

printf($based);
printf("<br>");

$link = mysql_connect("localhost", "root","chamuyo");
mysql_select_db("veterinaria", $link);


if (($descriptor=dbase_open($basedbf,0))==0)
{
printf ("<br>Error al abrir la base de datos");
}
else
{
$num_registros = dbase_numrecords($descriptor);
$num_campos = dbase_numfields($descriptor);
$regcampos = dbase_get_header_info($descriptor);

$cadenasql = "create table " . $based . " ( ";
$titcampos = "";

for ($j=0;$j<$num_campos -1 ;$j++)
{
$cadenasql = $cadenasql . strtolower($regcampos[$j][name]);
$titcampos = $titcampos . trim(strtolower($regcampos[$j][name])) . ", ";
if ( strtolower($regcampos[$j][type])=="character" )
{
if ( Trim($regcampos[$j][length]) > "20" )
{ $cadenasql = $cadenasql . " varchar(" . $regcampos[$j][length] . "),"; }
else { $cadenasql = $cadenasql . " char(" . $regcampos[$j][length] . "),";}
}
if ( strtolower(trim($regcampos[$j][type]))=="date" )
{
$cadenasql = $cadenasql . " datetime,";
}
if ( strtolower(trim($regcampos[$j][type]))=="number" )
{
if ( Trim($regcampos[$j][precision])=="0")
{ $cadenasql = $cadenasql . " Integer(" . $regcampos[$j][length] . "),";}
else {$cadenasql = $cadenasql . " decimal (" . $regcampos[$j][length] . ",".$regcampos[$j][precision]."),";}
}
}
$cadenasql = $cadenasql . strtolower($regcampos[$j][name]);
$titcampos = $titcampos . trim(strtolower($regcampos[$j][name]));

if ( strtolower($regcampos[$j][type])=="character" )
{
if ( Trim($regcampos[$j][length]) > "20" )
{ $cadenasql = $cadenasql . " varchar(" . $regcampos[$j][length] . ") )"; }
else { $cadenasql = $cadenasql . " char(" . $regcampos[$j][length] . ") )";}
}
if ( strtolower(trim($regcampos[$j][type]))=="date" )
{
$cadenasql = $cadenasql . " datetime ) )";
}
if ( strtolower(trim($regcampos[$j][type]))=="number" )
{
if ( Trim($regcampos[$j][precision])=="0")
{ $cadenasql = $cadenasql . " Integer(" . $regcampos[$j][length] . ") )";}
else {$cadenasql = $cadenasql . " decimal (" . $regcampos[$j][length] . ",".$regcampos[$j][precision].") )";}
}

/* Creando la Tabla */

/* $result = mysql_query($cadenasql, $link); */

/* Insertando los Registros */

for ($i=1;$i<=$num_registros;$i++)
//for ($i=1;$i<=50 ;$i++)
{
$cadenadatos = "" ;
$registro= dbase_get_record ($descriptor, $i);
for ($j=0;$j<$num_campos - 1;$j++)
{
if ( strtolower(trim($regcampos[$j][type]))=="date" )
{
$cadenadatos = $cadenadatos . "'" . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . "',";
}
if ( strtolower(trim($regcampos[$j][type]))=="character" )
{
$cadenadatos = $cadenadatos . "'" . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . "',";
}
if ( strtolower(trim($regcampos[$j][type]))=="number" )
{
$cadenadatos = $cadenadatos . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . ",";
}

}
if ( strtolower(trim($regcampos[$j][type]))=="date" )
{
$cadenadatos = $cadenadatos . "'" . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . "'";
}
if ( strtolower(trim($regcampos[$j][type]))=="character" )
{
$cadenadatos = $cadenadatos . "'" . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . "'";
}
if ( strtolower(trim($regcampos[$j][type]))=="number" )
{
$cadenadatos = $cadenadatos . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . "";
}

$cadenasql = "Insert into " . $based . " (" . $titcampos . ") Values (" . $cadenadatos . ")";
printf($cadenasql);
$result = mysql_query($cadenasql, $link) or die ("Invalid query");
printf("<br>");
}

dbase_close($descriptor);
printf ("<br>Base de datos cerrada");
}
mysql_close( $link);

?>

Saludos y espero ayuda.

la base esta en UTF-8 general-ci
  #2 (permalink)  
Antiguo 14/08/2009, 13:04
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

Verifica este post
http://www.forosdelweb.com/f18/codif...-flash-684205/
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 14/08/2009, 13:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

Pasa los datos por utf8_encode() y mysql_real_escape_string() antes de insertarlos.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 14/08/2009, 13:13
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

lo mire pero no logro hacerlo andar probe algunas cosas.
Si alguien que sepa bien esto si me puede ayudar le agradeceria mucho

Gracias.
  #5 (permalink)  
Antiguo 14/08/2009, 13:14
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

Cita:
Iniciado por Triby Ver Mensaje
Pasa los datos por utf8_encode() y mysql_real_escape_string() antes de insertarlos.
me lo podrias completar en el codigo que puse? ya que no se tanto de php a ver como quedaria?

gracias..
  #6 (permalink)  
Antiguo 14/08/2009, 13:14
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

Lo que te indica Triby es una buena opcion. Pero debes verificar que tu base de datos pueda insertar correctamente los caracteres directamente. Lee los links que te indico alli esta explicado
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 14/08/2009, 13:35
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

la verdad no lo puedo hacer andar , puse lo siguiente:

$cadenadatos = "" ;
$registro= dbase_get_record ($descriptor, $i);
for ($j=0;$j<$num_campos - 1;$j++)
{
if ( strtolower(trim($regcampos[$j][type]))=="date" )
{
$cadenadatos = $cadenadatos . "'" . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . "',";
}
if ( strtolower(trim($regcampos[$j][type]))=="character" )
{
$cadenadatos = $cadenadatos . "'" . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . "',";
$cadenadatos = mysql_real_escape_string($cadenadatos);
}
if ( strtolower(trim($regcampos[$j][type]))=="number" )
{
$cadenadatos = $cadenadatos . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . ",";
}

}
if ( strtolower(trim($regcampos[$j][type]))=="date" )
{
$cadenadatos = $cadenadatos . "'" . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . "'";
}
if ( strtolower(trim($regcampos[$j][type]))=="character" )
{
$cadenadatos = $cadenadatos . "'" . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . "'";
$cadenadatos = mysql_real_escape_string($cadenadatos);
}
if ( strtolower(trim($regcampos[$j][type]))=="number" )
{
$cadenadatos = $cadenadatos . (trim($registro[$j])=="" ? "\n" : trim($registro[$j])) . "";
}

$cadenasql = "Insert into " . $based . " (" . $titcampos . ") Values (" . $cadenadatos . ")";
printf($cadenasql);
$result = mysql_query($cadenasql, $link) or die ("Invalid query");
printf("<br>");
}

dbase_close($descriptor);
printf ("<br>Base de datos cerrada");
}
mysql_close( $link);


pasando mysql_scape_string y da error.

si alguien me puede ayudar le agradeceria.

Saludos
  #8 (permalink)  
Antiguo 14/08/2009, 13:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

Debes convertir (utf8_encode) y escapar (mysql_real_escape_sring) los datos de manera individual, antes de agregarlos a $cadenadatos.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 14/08/2009, 13:53
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

me podrias dar un ejemplo ahi donde tendria que ponerlo y como exactamente, disculpa que te moleste, pero todavia estoy blandito con php

gracias.
  #10 (permalink)  
Antiguo 14/08/2009, 14:06
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

buen puse lo siguiente

$cadenadatos = $cadenadatos . "'" . utf8_encode(mysql_real_escape_string(trim($registr o[$j]))=="" ? "\n" : mysql_real_escape_string(trim($registro[$j]))) . "',";

ahi me esta andando mas o menos el problema que tengo ahora es que en la Ñ pone lo siguiente en la base

ACEVEDO MIÂ¥O, VICTOR

la base esta en utf-8 general.

yo cuando lo paso manual con el navicat en encoding pongo 850 (OEM - Multilingual Latin I)
y pasa perfecto con Ñ , como hago para hacerlo aca??.

Saludos y gracias.
  #11 (permalink)  
Antiguo 14/08/2009, 14:36
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

Nota: Primero convierte los datos con utf8_encode() y despues escapalos con mysql_real_escape_string(), es el orden correcto.

Ejemplo: $dato = mysql_real_escape_string(utf8_encode($dato));

Despues de que insertas los datos agrega:
echo "$cadenadatos<br />";

Esto te ayudara para ver si hay diferencias entre lo que ves en pantalla y lo que se agrega a base de datos.

Verifica como estas guardando el archivo de tu script:

Bloc de notas de Win:
- Menu -> Archivo -> Guardar como...
- En el selector de codificacion selecciona UTF-8

Notepad++
- Menu -> Formato -> Codificar en UTF-8
- Guardas el archivo

Prueba nuevamente; si sigue sin mostrar / almacenar correctamente Ñ y acentos quita la parte del utf8_encode y vuelve a probar, si sigue fallando, nos cuentas si hubo diferencias en pantalla vs insertado en base de datos.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 14/08/2009, 18:45
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años
Puntos: 3
Respuesta: Ayuda para pasar bases con apostrofes y Ñ con php

ahi probe con una base que esta en iso -1 latin 1 y ese pasa perfecto, ahora el problema que tengo bases que son de DOS los dbf y estan en codificacion 850 y esos no encuentro forma de pasarlos bien cosa que las Ñ sean Ñ. alguien sabe como puedo pasar esos dbf de DOS?

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:24.