Comunidad de diseño web y desarrollo en internet online

Error al llamar funcion en PHP que usa un foreach..!!

Citar            
MensajeEscrito el 29 May 2012 04:42 pm
Hola a todos, soy relativamente nuevo en flex y php

pues resulta que tengo en php mis clases (servicios) en amfphp los cuales llamo desde flex, para agregar, borrar, actualizar datos, etc.

pero me tope con un problema, tengo que traer primero una lista de registros y guardarlos, ya que tengo que actualizar un inventario y luego posteriormente eliminar esos registros de mi detalle, asi ke se me ocurrio

1- generar el array con los datos
2- empezar una transaccion
3- foreach para recorrer cada registro del arreglo y hacer el update
4- borrar los registros de ese arreglo de su tabla por el id
5- hacer el commit o el rollback

en amfphp tenemos un browser de los servicios que me muestran mis funciones y si meto un **** return $sql **** despues del foreach, efectivamente me muestra el update tabla, bla bla, el problema, es a la hora de hacerlo desde flex, mando llamar esa funcion y me marca.!


e[level]: Unknown error type
e[details]: C:\xampp\htdocs\taller\servicios\services\tiposser vicios_svc.php
e[line]: 133
e[description]: Invalid argument supplied for foreach()
e[code]: AMFPHP_RUNTIME_ERROR

*** Alguien sabe.! ke sucede.!!!!!

Alguien me puede ayudar.! es urgente, ya me atrase en este proyecto


--------------------------

// Borrar borrar detalle anterior, actualizar inventario, insertar nuevo detalle tipos_servicios
function delDetalle($id)
{
$detalle = array();

$detalle = $this->getDetalle($id);

// Iniciar transaccion
$sql = "SET AUTOCOMMIT=0;";
$resultado = $this->query($sql);
$sql = "BEGIN;";
$resultado = $this->query($sql);

foreach ( $detalle as $row=>$datos )
{
$sql = "update inventario set existencia = existencia + ".$datos[cantidad]." where id_articulo = ".$datos[id_articulo].";";
$resultado = $this->query($sql);
}

$SQL = "delete from det_tipos_servicios where id_tipo_servicio = $id ;";
if ($rs2 = $this->query($SQL))
{
$sql = "COMMIT;";
$resultado = $this->query($sql);
return "SI";
}
else
{
$sql = "ROLLBACK;";
$resultado = $this->query($sql);
return "NO";
}

}

Por leviatanMX

32 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 May 2012 01:27 am
Usa charlesproxy.com como sniffer, te muestra los paquetes que van y vienen desde Flash a PHP, allí puedes que datos envías y la estructura de los paquetes.
Luego lo del foreach ( $detalle as $row=>$datos ) me suena un poco raro ... $row automáticamente se convierte en un objeto con una propiedad que saca de detalle?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 May 2012 12:57 pm
Hola ke tal, lo de foreach ( $detalle as $row=>$datos ) fue por ke realmente soy nuevo en php, y no comprendia bien, lo vi en un ejemplo, ke asi deberia de ser, pero lo tenia como

foreach ( $detalle as $row ) ya ke en realidad lo que hace es hace un miniarray de una linea con 3 campos que es mi caso y por eso sacaba los valores $row[id_articulo]

de cualquier forma marca error al ejecutarla desde flex, voy a probar el programa ue me dijiste

Por leviatanMX

32 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 May 2012 01:22 pm
Ok, entonces mira con mas detalle el PHP, por ejemplo esto

$sql = "SET AUTOCOMMIT=0;";
$resultado = $this->query($sql);

Si no devuelve un array asociativo el foreach no funciona. Me inclino a pensar que debes revisar el PHP. Con Charles podras ver si Flex esta mandando la data

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 May 2012 01:48 pm
Hola ya vi el problema, por alguna razon que aun no comprendo si yo hago esto en php
function getAll()
{
$SQL = "select * from tipos_servicios order by nombre" ;
if ($rs = $this->query($SQL))
{
while ($row = mysql_fetch_assoc($rs))
{
$datos[] = $row;
}
}
else
{
$datos = null;
}
return $datos;
}
al hacer return $datos en flex lo cacho bien, es decir me lo toma como un array, perooooo
ya revisando hice lo siguiente

en lugar de return $datos

$es_Array= is_array($yes);
return $es_Array;

y me regresa falsoooooo, es decir, en php no lo toma como un array.! me lleva el tren.! y ahora como le hago, pke si verifico esa funcion getAll en el Charles, si me regresa datos del arreglo, pke flex asi los cacha, pero si lo kiero procesar en PHP no me lo ve como un array

Por leviatanMX

32 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 May 2012 01:51 pm
En vez de hacer esto:

$es_Array= is_array($yes);

Prueba hacer esto

$es_Array= is_array($datos);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 May 2012 01:53 pm
jajajaja, perdon perdon..!! ske lo copie mal.! esta ssi como tu lo tienes
y regresa falsooooooo

Por leviatanMX

32 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 May 2012 01:58 pm
¿Flex lo recibe bien? Entonces no te preocupes

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 May 2012 02:03 pm

solisarg escribió:

¿Flex lo recibe bien? Entonces no te preocupes

Jorge


si Jorge, pero en la primea funcion que mencione, debe correr desde php, hace una serie de update y delete al final

por eso use foreach, pero dentro de php, realmente no me regresa un Array

Por leviatanMX

32 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 May 2012 02:05 pm
Postea en el foro de PHP tu problema

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 May 2012 02:52 pm
Sip, eso hare, ya que el error me di cuenta en Flex, y ya vi que, el problema es en php

Por leviatanMX

32 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.