Spanish B4A con MySql

benji

Active Member
Licensed User
estoy tratando de insertar registros, pero no me resulta... por ahora son solo pruebas, y estoy siguiendo el ejemplo de los tutoriales que existen...

este es mi php, el mismo del tutorial... aunque solo me interesa la parte de "InsertNewPerson"

<?php

$host = "127.0.0.1";
$user = "root";
$pw = "";
$db = "AvalonTR";

$con = mysql_connect($host,$user,$pw) or die(mysql_error());
mysql_select_db($db) or die(mysql_error());
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES 'utf8'");

$action = $_GET["action"];

switch ($action)

{
case "CountPersons":
$q = mysql_query("SELECT * FROM persons");
$count = mysql_num_rows($q);
print json_encode($count);
break;

Case "GetPersons":
$q = mysql_query("SELECT name, age FROM persons");
$rows = array();
while($r = mysql_fetch_assoc($q))
{
$rows[] = $r;
}
print json_encode($rows);
break;

case "InsertNewPerson":
$maquina = $_GET["Maquina"];
$fecha = $_GET["fecha"];
$q = mysql_query("INSERT INTO Damir (maquina, fecha) VALUES ('$maquina', $fecha)");
print json_encode("Inserted");
break;

}

?>

la insercion la hace, el problema es que los valores que inserta son 0 y 0000-00-00 o lo que mande...siempre es el mismo resultado.

este es mi Job
Dim InsertNewPerson As HttpJob
InsertNewPerson.Initialize("InsertNewP", Me)
InsertNewPerson.download2("http://192.168.1.100/avalontr/php_example.php", Array As String ("action", "InsertNewPerson", "maquina", "60", "fecha", "23-07-2015"))


desde ya, muchas gracias por la ayuda.

Saludos.
 

Descartex

Well-Known Member
Licensed User
Buenas, benji.
Prueba a ver a hacer un echo de las variables $_GET y las $maquina y $fecha, a ver si por ahi van los tiros.
Tiene toda la pinta de que pierde los datos en algun momento.
Un saludo.
 

benji

Active Member
Licensed User
Buenas Descartex, como hago los echo y donde los veo? de php casi nada, por no decir nada jajaaja
 

Descartex

Well-Known Member
Licensed User
Buenas, haz algo asi:
PHP:
case "InsertNewPerson":
$maquina = $_GET["Maquina"];
$fecha = $_GET["fecha"];
//$q = mysql_query("INSERT INTO Damir (maquina, fecha) VALUES ('$maquina', $fecha)");
//print json_encode("Inserted");
print "maquina->".$maquina."/fecha->".$fecha;
break;
y observa en el programa a ver que es lo que devuelve cuando le mandas insertar.
Un saludo.
 

benji

Active Member
Licensed User
lo hice, pero no tuve idea donde mirar el resultado(print), donde se debe imprimir... volvi todo identico a como estaba al principio, pero ahora no inserta, pero me devuelve el mensaje de "registro insertado" que se genera con el resultado del Job....
 

benji

Active Member
Licensed User
ya, algo arregle, mi problema obviamente (jajaa) estaba en el lado php, ahora, uno de los temas que tuve, fue con la direccion IP del "servidor"... en el .php tenia puesto 192.168.1.100 que es donde esta mi servidor local, en ese caso no funcionaba... pero si ponia 127.0.0.1, si funciona...
pregunta, para hacerlo remoto, tendria que seguir siendo 127.0.0.1?
 

Descartex

Well-Known Member
Licensed User
Me parecía que había una pérdida de datos...
Si el PHP esta en el mismo servidor que la base de datos, la dirección sera 127.0.0.1 (o localhost, es lo mismo), sino hay q darle la dirección del host destino.
Ejemplo:
Mi BBDD esta en mi servidor www.Pepe.es y mi PHP en el www.Juan.es pues la dirección en el PHP sera www.Pepe.es
Si están las dos en el mismo, sera 127.0.0.1 o localhost que ye lo mismo.
Espero no haberte liado.
 

benji

Active Member
Licensed User
para nada me complicaste, tengo claro que 127.0.0.1 y localhost son lo mismo, mi pregunta iba por que el 192.168.1.100 tambien "deberia ser lo mismo", ya que es la misma direccion ip del equipo...
pero vale, ya me quedo claro, en este caso estoy usando la BBDD en el mismo servidor, y despues seguiran estando... asi que deberia seguir usando 127.0.0.1.

Muchas gracias.
 

dar2o3

Active Member
Licensed User
Cuando pones la ip 127.0.0.1 o localhost, php directamente ataca a la base de datos que está en local, pero cuando pones la ip real de tu equipo (192.168.1.100 o la que tengas) php intenta acceder a esa ip, para ello vamos a decirlo así primero pregunta a tu router si conoce la ip, el router le dice que sí y le dice como llegar ( en este caso es tu mismo equipo, pero pasando antes por el router, es como si tu conexión viniera de tu red lan) tienes que configurar mysql para que puedan acceder al él desde fuera de localhost (cosa que yo no haría en un entorno de producción si no es con filtro de ip) y también tienes que redireccionar un puerto en tu ruter hacia el puerto que mysql pone a la escucha (ahora no recuerdo cual el 3306 creo.)
 
Last edited:

benji

Active Member
Licensed User
Sigo pidiendo ayuda...
tengo en mi SQLite por ejemplo, 10 registros y cada 5 minutos quiero insertarlos en MySQL

B4X:
CurVentas = DBVenta.ExecQuery("Select * from Venta where Up = 'NO'")
    If CurVentas.RowCount > 0 Then
        For i = 0 To CurVentas.RowCount-1
            CurVentas.Position = i
            FechaVta = CurVentas.GetString("Fecha")
            'DateTime.DateFormat = "yyyy-MM-dd"
            'FechaSql = DateTime.Date(FechaVta)
           
            HorarioVta = CurVentas.GetString("Horario")
            HoraVta = CurVentas.GetString("Hora")
            ValorVta = CurVentas.GetString("Valor")
            TipoVta = CurVentas.GetString("Tipo")
            FolioVta = CurVentas.GetString("Folio")
            latVta = CurVentas.GetString("lat")
            lonVta = CurVentas.GetString("lon")
            InsertNewPerson.Initialize("InsertNewP", Me)
            InsertNewPerson.download2("http://192.168.1.100/avalontr/persons.php", Array As String ("action", "InsertNewPerson","maquina",AuxMaquina,"fecha",FechaVta,"horario",HorarioVta,"hora",HoraVta,"valor",ValorVta,"tipo",TipoVta,"folio",FolioVta,"lat",latVta,"lon",lonVta))
        Next
    End If
cuando ejecuto lo anterior,los 5 registros quedan con el mismo numero de folio, el ultimo realizado por el ciclo For...
entonces, tiene que ver con el php? o tengo algo mal por aca?
ademas, cuando tengo el regreso desde el php, quiero actualizar mi SQLite, y marcarlos como ya subidos...

se entiende?

desde ya, muchas gracias.
 

dar2o3

Active Member
Licensed User
Eso que haces, me parece que no es correcto, estás lanzando en un bucle un montón de inserts a una base de datos sin tener en cuenta si la primera lanzada a sido correcta o no por ejemplo, yo que tu lo que haría es enviar un json con todos los registros que quieres insertar en la bd, en php recoges el json y ahí si creas un bucle para insertar todos los registros en un bucle, comprobando eso si después de cada insert que se haya realizado correctamente.
 

benji

Active Member
Licensed User
al final, en vez de usar php, tome una de las librerias que hay que se conectan directo a la BD a traves de distinos conectores, vas directo sobre la BD, se gana en velocidad, pero tiene un pero, no es recomendable para aplicaciones comerciales que vayan a estar en el play, ya que los datos de conexion podrian quedar expuestos....
 

prodisoft

New Member
Licensed User
Qué librería de coneción directa a la BD estás utilizando? Vi en el foro que hay MSMariaDB y MSMySQL pero no sé cual irá mejor. Por otro lado no sé como descargarlas. Veo que hay que pagar 5$ pero una vez hecho el pago ¿Cómo se descargan?
Gracias por tu ayuda.
 
Top