Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: spysecurityca en 16 Agosto 2014, 09:20 am



Título: PHP Vuelto Loco con variables.
Publicado por: spysecurityca en 16 Agosto 2014, 09:20 am
Pues si, de repente ya el php no me reconoce las variables que le paso por Ajax vía get.

Antes funcionaba y ahorra de repente me sale con el notice de variable no definida y me tranca la ejecución.

Alguien sabrá del porque pasan estas cosas tan repentinas ?

Estoy usando Wamp, no he instalado otro server.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: MinusFour en 16 Agosto 2014, 17:01 pm
Pues pega el código primero para ver que está pasando.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: spysecurityca en 16 Agosto 2014, 21:27 pm
Bro voy a rehacer el código desde 0, si me da el notice lo traigo.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: engel lex en 16 Agosto 2014, 21:28 pm
recuerda, el compilador/interprete no se equivoca o muy raramente lo hace, quien se equivoca en el 99,99999999999999999999999999999% de los casos eres tu XD


Título: Re: PHP Vuelto Loco con variables.
Publicado por: JorgeEMX en 17 Agosto 2014, 07:28 am
Si antes funcionaba y ahora no, el problema es la configuración de PHP. Por lo que dices, los mensajes son tipo NOTICE; lo que significa que sólo es una anotación sobre tu script y no es un error grave.

Ve si está bien configurado tu nivel de mensajes que arroja el interprete: http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors , puedes usa la siguiente función para cambiar los valores en tipo de ejecución http://php.net/manual/en/function.error-reporting.php


Título: Re:
Publicado por: vladek en 17 Agosto 2014, 16:41 pm
Si el problema persiste utilizá un Sniffer TCP para ver si le están llegando bien las cosas al webserver. Con eso te vas a dar cuenta.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: JorgeEMX en 17 Agosto 2014, 17:59 pm
Si el problema persiste utilizá un Sniffer TCP para ver si le están llegando bien las cosas al webserver. Con eso te vas a dar cuenta.

Un Sniffer? Enserio?


Título: Re:
Publicado por: vladek en 17 Agosto 2014, 20:49 pm
Parece complejo pero por ejemplo el SmartSniff es de fácil instalación y vas a ver en un momento cuál es el problema.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: #!drvy en 17 Agosto 2014, 21:07 pm
@vladek, los navegadores traen sus propias herramientas de  desarrollo que permiten ver las peticiones que se hacen (incluidas las de ajax).

Saludos


Título: Re:
Publicado por: vladek en 17 Agosto 2014, 21:46 pm
También es otra opción. HttpFox para Firefox por ejemplo. Vas a obtener exactamente el mismo resultado.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: spysecurityca en 18 Agosto 2014, 04:22 am
Engel-Ex como dicen en Cisco, error de Capa 8 jejeje.

Bien, para todos les explico: ya quisiera que fuese un simple notice, el problema es que sencillamente no llega la variable que le paso por ajax cuando un textbox detecta un Keyup.

Lo tengo configurado de 2 formas.

1 Aplicando un poco de POO a PHP LA CUAL NO ME FUNCIONA :(

2. Sin POO y la cual es la que me funciona.

Ya les inserto los 2 Códigos:

"El Js del Ajax no lo meto ya que el error solo me viene al modificar PHP"

Código
  1.    class NuevaOrden{
  2.     private $arreglo;
  3.     public function __construct($arr) {
  4.     $this->arreglo=$arr;
  5.     $this->empujarProducto();
  6.     }
  7.     private function empujarProducto() {
  8.     foreach ($this->arreglo as $desc => $val) {
  9.     if ($val=="") {
  10.     unset($this->arreglo[$desc]);
  11.     }
  12.     }
  13.     }
  14.     public function verificarProductos() {
  15.     if (count($this->arreglo)==0) {
  16.     echo "No hay elementos seleccionados";
  17.    }else {
  18.     $arreglo=(json_encode($this->arreglo));
  19.     echo $arreglo;
  20.    }
  21.     }
  22.    }
  23.    if (isset($_REQUEST['nombre']) && isset($_REQUEST['valor'])) {
  24.     $nomb=$_REQUEST['nombre'];
  25.     $valo=$_REQUEST['valor'];
  26.    }else {
  27.     $nomb="Ebebe tu variable está en blanco, no llegó, no existe, ve a escuchar Soda Estereo - No existes - :("."<br>";
  28.     $valo="Ebebe tu variable está en blanco, no llegó, no existe, ve a escuchar Soda Estereo - No existes - :(";
  29.    }
  30.    echo $nomb;
  31.    echo $valo;
  32.    if (isset($_SESSION['orden'])) {
  33.     $nuevaOrden= new NuevaOrden($_SESSION['orden']);
  34.    }else {
  35.     $_SESSION['orden']=array();
  36.     $_SESSION['orden'][$nomb]=$valo;
  37.     $nuevaOrden= new NuevaOrden($_SESSION['orden']);
  38.    }

Código
  1.    if (isset($_REQUEST['nombre'])) {
  2.     $nomb=$_REQUEST['nombre'];
  3.    }else {
  4.     $nomb="";
  5.    }
  6.    if (isset($_REQUEST['valor'])) {
  7.     $valo=$_REQUEST['valor'];
  8.    }else {
  9.     $valo="";
  10.    }
  11.    if (isset($_SESSION['orden'])) {
  12.     $_SESSION['orden'][$nomb]=$valo;
  13.     foreach ($_SESSION['orden'] as $desc => $val) {
  14.     if ($val=="") {
  15.     unset($_SESSION['orden'][$desc]);
  16.     }
  17.     }
  18.    }else {
  19.     $_SESSION['orden']=array();
  20.     $_SESSION['orden'][$nomb]=$valo;
  21.     foreach ($_SESSION['orden'] as $desc => $val) {
  22.     if ($val=="") {
  23.     unset($_SESSION['orden'][$desc]);
  24.     }
  25.     }
  26.    }
  27.    if (count($_SESSION['orden'])==0) {
  28.     echo "No hay elementos seleccionados";
  29.    }else {
  30.     $arreglo=(json_encode($_SESSION['orden']));
  31.     echo $arreglo;
  32.    }
  33.  

¿Será problema con PHP POO y Ajax :(?



Es más.

Si agarro y borro todo el PHP y pongo solamente:

Código
  1. <?php
  2.  
  3. if(isset($_REQUEST['valo'])){
  4.  
  5. $valor=$_REQUEST['valo'];
  6. echo $valor;
  7. }
  8.  
  9. ?>

Me sigue tirando el error de que no llega la variable :(, es que ni con eso, osea el archivo como que es sagrado y no lo puedo tocar


Título: Re: PHP Vuelto Loco con variables.
Publicado por: #!drvy en 18 Agosto 2014, 04:39 am
Entonces el problema no esta en tu PHP sino en tu llamada ajax.. Muestra el código js..

PD: Existe el botón modificar. No hagas doble post.

PD2: Estas seguro de que es el mismo archivo ?

Saludos


Título: Re: PHP Vuelto Loco con variables.
Publicado por: spysecurityca en 18 Agosto 2014, 04:43 am
Si, casualmente cuando le dí a modificar ya lo habías arreglado, sorry por hacerte pasar trabajo.

Aqui el Js.

Código:
window.addEventListener("load", iniciarEventos, false);
clase="";
function iniciarEventos(e) {
var cajas = document.getElementsByClassName(clase);
for (var i = 0; i < cajas.length; i++) {
cajas[i].addEventListener('keyup',obtenerDatos,false);
}
}

function obtenerDatos(e) {
var ref=e.target;
var producto=ref.name;
var cantidad=ref.value;
procesarDat(producto,cantidad);
}
var conex3= new XMLHttpRequest();
function procesarDat(pro,can) {
conex3.onreadystatechange=procesarElementos;
conex3.open("GET",'../procesarPedido/orden.php?nombre='+pro+'&valor='+can,true);
conex3.send(null);
}
function procesarElementos() {
if (conex3.readyState==4) {
alert(conex3.responseText);
}else {
alert("conexion fallida");
}
}


Título: Re: PHP Vuelto Loco con variables.
Publicado por: MinusFour en 18 Agosto 2014, 05:32 am
En tu primer script con POO nunca mandas a llamar a verificarProductos que es el que genera el string de JSON.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: spysecurityca en 18 Agosto 2014, 05:40 am
Hola Minus,

Hice lo que me has dicho y nada no hay cambio, fijate el problema no es POO porque borrando todo y haciendo en PHP solo la verificación de que llegue o no la variable me dice que no llega.

De hecho acabo de hacer en el Ajax que me envie las variables a otro PHP y si me lo agarra.

El problema es en ese PHP :( Será que lo deje intacto, pero la verdad no me gusta quedar al aire.


Título: Re:
Publicado por: vladek en 18 Agosto 2014, 06:32 am
Si en ese archivo borrás todo y hacés un var_dump($_GET); llega la data?


Título: Re: PHP Vuelto Loco con variables.
Publicado por: spysecurityca en 18 Agosto 2014, 07:57 am
Ok me explico más resumido.

1. capturo datos del Form.

2. Envio datos por GET con ajax.

3. Ajax al estar en onreadystatechange lanza la funcion que verifica que tenga Status 200, lo cual es positivo y me devuelve el responseText por un alert. En el response Text esta el echo de las variables que envío desde Ajax.

El problema es que cuando ingreso directamente al PHP luego de obviamente captar+enviar+verificarRecepcion de variables, me doy cuenta que sencillamente las variables que he enviado no han sido recibidas y me muestra el agradable Notice: Undefined variable

¿Porque cuando hago el envio/consulta en caliente con ajax si envia y recibe el responseText con el contenido de las variables pero cuando entro directamente PHP me dice literalmente que no he enviado nada?


Título: Re:
Publicado por: vladek en 18 Agosto 2014, 15:02 pm
A qué te referís con "entro directamente"?


Título: Re: PHP Vuelto Loco con variables.
Publicado por: spysecurityca en 18 Agosto 2014, 16:57 pm
Hola vladek con eso me refiero a que tengo un enlace que me dirige al archivo php.

Allí verifico si todo lo que me mostró Ajax sigue estando en el archivo PHP.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: MinusFour en 18 Agosto 2014, 17:22 pm
¿Si pero como accedes al archivo?

archivo.php?valor=valor

Debería traerte una respuesta correcta. No para el último archivo que tienes porque ahi estás usando.

Código
  1. $_REQUEST['valo']

Necesitas definir bien el nombre de tus variables para evitar este tipo de confusiones.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: spysecurityca en 18 Agosto 2014, 17:56 pm
Hola minus que tal.

Mira accedo sin pasarle los parametros por enlace ya que en teoria las variables que mando por Ajax han de ser guardadas en una variable sesion.

El principal problema al parecer es que mis variables no se guardan en la variable sesion.

Si se guardasen aún entrando al PHP sin pasar parametros por GET a lo mucho me deberia arrojar el Notice de que no hay variable valo y nombre definida pero si deberia mostrarme la que se guardó en la $_SESSION previamente.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: MinusFour en 18 Agosto 2014, 18:16 pm
Puedes hacer otro archivo y poner:

Código
  1. print_r($_SESSION["orden"]);

Para checar si hay algo en la session.

¿Estás comprobando con tu código en POO o el otro? Si estás usando el 2ndo debería por lo menos traerte un mensaje siempre.

Edit: No se te olvide el session_start()


Título: Re:
Publicado por: vladek en 18 Agosto 2014, 18:32 pm
Adhiero una pregunta no menor, estás poniendo el session_start?

Nada nada, ya vi que si. Ahora lo veo en la pc el php que en Tapatalk no se entiende nada.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: spysecurityca en 18 Agosto 2014, 19:19 pm
El problema se me da al usar POO, sin usar POO todo va bien.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: MinusFour en 18 Agosto 2014, 20:57 pm
Tienes que organizar mejor tu código.

Estás detectando si estas pasando variables $_REQUEST pero pones código que las utiliza fuera del bloque que las detecta. Resulta mejor si simplemente mueves el código que utiliza estás variables dentro del bloque que detecta si están puestas o no.

No entiendo lo que haces con con tu session, pero quiero creer que si no hay un arreglo en la session, quieres crear un nuevo arreglo para poder usar las propiedades asociativas del arreglo. No es necesario correr dos códigos que hagan lo mismo.

Y por último, como te dije, yo no he visto como implementas verificarProductos que es el que trae el string Json.

Código
  1. <?php
  2. class NuevaOrden{
  3. private $arreglo;
  4. public function __construct($arr) {
  5. $this->arreglo=$arr;
  6. $this->empujarProducto();
  7. }
  8. private function empujarProducto() {
  9. foreach ($this->arreglo as $desc => $val) {
  10. if ($val=="") {
  11. unset($this->arreglo[$desc]);
  12. }
  13. }
  14. }
  15. public function verificarProductos() {
  16. if (count($this->arreglo)==0) {
  17. echo "No hay elementos seleccionados";
  18. } else {
  19. $arreglo=(json_encode($this->arreglo));
  20. echo $arreglo;
  21. }
  22. }
  23. }
  24. if (!isset($_SESSION['orden'])) {
  25. $_SESSION['orden'] = array();
  26. }
  27. if (isset($_REQUEST['nombre']) && isset($_REQUEST['valor'])) {
  28. $nomb=$_REQUEST['nombre'];
  29. $valo=$_REQUEST['valor'];
  30. $_SESSION['orden'][$nomb]=$valo;
  31. }
  32. $nuevaOrden= new NuevaOrden($_SESSION['orden']);
  33. $nuevaOrden->verificarProducts();
  34. ?>


Título: Re: PHP Vuelto Loco con variables.
Publicado por: vladek en 18 Agosto 2014, 22:13 pm
Totalmente cierto, nunca se llamó a verificarProductos();
Si vas a probar el código de Minus, tiene un pequeño error que seguro le ocurrió al tipear, dice "verificarProducts();" en vez de "verificarProductos();".
Te aviso por las dudas por si copiás y pegás.

Si lo que querés es que se haga todo el proceso sin tener que llamar a verificarProductos, deberías llamarla en el constructor.

PD:
Te recomiendo para un próximo desarrollo que utilices un framework de JS, como ser JQuery o Prototype. No es necesario reinventar la rueda para ciertas cosas  :)
Lo mismo con PHP, hay frameworks como Symfony2 o CodeIgniter que hacen muy buen trabajo. Pero si recién estás empezando yo seguiría con PHP plano.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: spysecurityca en 18 Agosto 2014, 23:07 pm
Te me has adelantado maestro, casualmente reorganice el PHP POO pieza por pieza y me funcionó perfecto!.

Ahora me arroja un problema menor, que lo puedo resolver pero me gustaria saber el origen.

Al final del array me agrega un elemento vacio, lo soliciono filtrandolo, pero me gustaria saber el origen.


Título: Re: PHP Vuelto Loco con variables.
Publicado por: yoelrodguez en 20 Agosto 2014, 15:45 pm
Hola Estuve viendo tu código y la primero que te quiero preguntar por estas usando por get y no post. Te lo pregunto porque en una ocasión estuve leyendo que por get existe limitación en tamaño para hacer el envió al servidor.   Existe una frenwork de Java Script que se llama Jquey (http://jquery.com/) que no se si lo conoces el cual te permite pasar los datos tanto por get como por post te voy a dejar un ejemplo para que veas que es muy sencillo y como:
Código:
//Pasando datos por post con Jquery
$.post(path, {clave1: textbox-1, clave2: textbox-2}, function(datos){
        alert(datos);
});


//Capturamos los datos en el servidor.
Código:
<?php
$clave1 = $_post['clave1'];
$clave2 = $_post['clave2'];

//mensage de respuesta.
echo  "Datos Enviado";
?>