Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] variable no responde a WHERE

Estas en el tema de variable no responde a WHERE en el foro de PHP en Foros del Web. Buenas noches: capturo el valor de un input mediante javascript : @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original //Obtenemos el valor del apellido que hay ...
  #1 (permalink)  
Antiguo 06/03/2015, 17:05
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
variable no responde a WHERE

Buenas noches:

capturo el valor de un input mediante javascript:
Código Javascript:
Ver original
  1. //Obtenemos el valor del apellido que hay en formulario principal.
  2. var ape_prin = window.opener.document.getElementById(3).value;

Paso la variable a php:
Código PHP:
Ver original
  1. $id_tabla= "<script> document.write(ape_prin) </script>";

Ejecuto la consulta:
Código PHP:
Ver original
  1. $sql="SELECT * FROM clientes WHERE Id_clientes = ". $id_tabla;

Y obtengo mensaje de error:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result,

He forzado la variable para que sea integer:
Código PHP:
Ver original
  1. (int) $id_tabla) ;
pero me sigue dando error
Si asigno a la variable un valor, por ejemplo 19
Código PHP:
Ver original
  1. $id_tabla = 19
y ejecuto la misma consulta consuta:
Código PHP:
Ver original
  1. $sql="SELECT * FROM clientes WHERE Id_clientes = ". $id_tabla;

Obtengo el resultado esperado.

Alguien sabe porque sucede esto?
  #2 (permalink)  
Antiguo 06/03/2015, 17:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: variable no responde a WHERE

¿De verdad crees que así se pasan valores de Javascript hacia PHP?

Código PHP:
Ver original
  1. $id_tabla= "<script> document.write(ape_prin) </script>";

Lamento decirte que eso no funcionará jamás, porque para PHP dicha cadena de HTML/Javascript es únicamente texto y nada más.

¿Si sabías que PHP se ejecuta únicamente en el servidor verdad?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/03/2015, 17:29
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: variable no responde a WHERE

Hola paketrueke.
Quizá puedas aclararme esto un poco más.
He hecho un seguimiento del codigo con esto:

Código PHP:
Ver original
  1. $id_tabla= "<script> document.write(ape_prin) </script>";
  2.             echo "la variable vale: " .$id_tabla;
  3.             echo "<br>";
  4.             echo "Despues de gettype la variable es tipo: ".gettype($id_tabla);
  5.             echo "<br>";
  6.             echo "Le paso a integer: ". gettype((int) $id_tabla) ;
  7.             echo "<br>";
  8.             echo "el opener es: ".$id_tabla;
  9.             echo "<br>";
y trás la consulta incluyo este eco para poder saber que está pasando.
Código PHP:
Ver original
  1. echo  "El valor de la sentencia sql es: " .$sql. "<br><br>";
Ejecuto el código y la respuesta que obtengo a los echo es:

la variable vale: 2
Despues de gettype la variable es tipo: string
Le paso a integer: integer
el opener es: 2
La variable no es nula, es: 2

El valor de la sentencia sql es: SELECT * FROM clientes WHERE Id_clientes = 2

Entiendo que php se lee en servidor.
Quizá puedas decirme la forma adecuada para hacerlo.
Gracias.
  #4 (permalink)  
Antiguo 06/03/2015, 19:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: variable no responde a WHERE

Ejecuta el mismo código desde la linea de comandos y verás lo que sucede.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 06/03/2015, 19:46
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: variable no responde a WHERE

Podrias pasar el codigo entero?
lo que pasa es que al hacer echo de ese string lo que haces es ejecutar el codigo javascript:

la variable vale: <script> document.write(ape_prin) </script>
Despues de gettype la variable es tipo: string
Le paso a integer: integer
el opener es: <script> document.write(ape_prin) </script>
La variable no es nula, es: <script> document.write(ape_prin) </script>

el gettype no esclarece nada, muestra lo que es, primero un string y luego un integer cuando lo convertis a int.

el resultado "2" que muestras lo genera javascript no PHP
  #6 (permalink)  
Antiguo 06/03/2015, 20:05
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 2 meses
Puntos: 3
Busqueda Respuesta: variable no responde a WHERE

Una forma practica para no ondar demasiado es usar Jquery.
agrega como primer script el CDN que ofrece Google:
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.    <head>
  3.       <!-- title, metadatos, css, etc -->
  4.       <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  5.       <!-- otros scripts, etc. -->
  6.    </head>
  7.    <body>
  8.    </body>
  9. </html>

Luego agregas tu script algo asi
Código Javascript:
Ver original
  1. <script>
  2.    var texto = document.getElementById(3).value;
  3.    $.get( "miArchivo.php", { texto_para_PHP : texto } );
  4. </script>

luego accedes a la variable desde "miArchivo.php" asi:

Código PHP:
Ver original
  1. <?php
  2.    $texto_para_mi_BD = $_GET["texto_para_PHP"];
  3. ?>

no lo testie, pero fijate si funciona.
  #7 (permalink)  
Antiguo 07/03/2015, 13:15
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: variable no responde a WHERE

Hola:
Dario:
He probado el código y la respuesta que obtengo al abrir la ventana emergente es:
Undefined index: texto_para_PH

Explico algo que quizá era clave, o mejor dicho os explico lo que quiero hacer.

Formulario principal:
Varios inputs, uno de ellos es el de un campo vinculado a una tabla clientes.
Formulario secundario. Ventana emergente.
Recoge todos los datos de una tabla clientes.

Estoy en formulario principal:
Abro desde un input type = "button" la ventana emergente que es el formulario secundario mediante
Código Javascript:
Ver original
  1. window.open(url,"Clientes",'top=300,left=200,width=800,height=300');
Y funciona sin problemas.
Hasta aquí todo bien.

Ahora necesito hacer lo mismo, pero de manera que en el formulario secundario, sólo aparezca el registro del cliente que tengo en el formulario principal. Para ello tengo que filtrar la consulta que soporta el formulario secundario con la variable que identifica a ese cliente que está en uno de los inputs del formulario principal.

Desde mi ignorancia, por la cual he sido severamente reprendido por pateketrueke (en mi defensa diré que pretendía "pintar" el valor), he pretendido pasar el valor capturado con:
Código Javascript:
Ver original
  1. var ape_prin = window.opener.document.getElementById(3).value;
a una variable php con:
Código PHP:
Ver original
  1. $id_tabla= "<script> document.write(ape_prin) </script>";

Bien, a patir de aquí...
Sugerencias para capturar la variable y pasarla a la consulta.
Aclaro que el input es type="button" y no "submit" con onclick= abrir(url)

Código Javascript:
Ver original
  1. function abrir(url)
  2.     {
  3.         window.open(url,"Clientes",'top=300,left=200,width=800,height=300');
  4.     }

Por supuesto agradezco vuestra atención. Y mi retraso en contestar ha sido por problemas de salud veterinaria. Ha fallecido un gato muy querido en la familia aunque hemos intentado todo por salvarle en la clínica.
  #8 (permalink)  
Antiguo 07/03/2015, 13:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: variable no responde a WHERE

Prueba imprimir así tu variable y vas a ver lo que pasa:
Código PHP:
Ver original
  1. $id_tabla= "<script> document.write(ape_prin) </script>";
  2. echo htmlspecialchars($id_tabla);

y te vas a dar cuenta de tu error.

Saludos.
  #9 (permalink)  
Antiguo 07/03/2015, 13:43
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: variable no responde a WHERE

meti la pata, el texto_para_PHP va entre comillas en el javascript, y no puse el window opener

Código Javascript:
Ver original
  1. <script>
  2.        var texto = window.opener.document.getElementById(3).value;
  3.        $.get( "miArchivo.php", { "texto_para_PHP" : texto } );
  4. </script>
  #10 (permalink)  
Antiguo 08/03/2015, 11:53
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: variable no responde a WHERE

Hola Dario:
No funciona, pero probablemente porque no este poniendo el código debidamente.
Te explico lo que hago y me corriges, por favor:
Dos scripts:
El primero desde el que llamo, mediante el button, lo denomino form_principal.php
El emergente, lo denomino form_clientes.php

En form_principal agrego el código en el head.

Código Javascript:
Ver original
  1. <!-- title, metadatos, css, etc -->
  2.       <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  3.       <!-- otros scripts, etc. -->

Sigo en form_principal.php y agrego en la función desde la que llamo a la ventana emergente el código que me pasaste:

Código Javascript:
Ver original
  1. function abrir(url)
  2.     {
  3.         var texto = document.getElementById(3).value;
  4.         $.get( "form_principal.php", { texto_para_PHP : texto } );
  5.         window.open(url,"Clientes",'top=300,left=200,width=800,height=300');
  6.  
  7.     }

En form_clientes agrego en la zona de código php:
Código PHP:
Ver original
  1. $texto_para_mi_BD = $_GET["texto_para_PHP"];

Se abre la ventana emergente form_clientes.php
con el siguiente mensaje de error

Undefined index: texto_para_PHP
  #11 (permalink)  
Antiguo 08/03/2015, 11:59
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: variable no responde a WHERE

Cita:
Iniciado por GatorV Ver Mensaje
Prueba imprimir así tu variable y vas a ver lo que pasa:
Código PHP:
Ver original
  1. $id_tabla= "<script> document.write(ape_prin) </script>";
  2. echo htmlspecialchars($id_tabla);

y te vas a dar cuenta de tu error.

Saludos.
He probado lo que me dijiste. Entiendo lo que quieres decir. O eso creo
Probé también generando una multiplicación con la variable y entiendo que no siver el código de pasar variable javascrip a php.
Gracias por tu respuesta. Disculpa mi tardanza. No he sido muy cortes.
Un saludo.
  #12 (permalink)  
Antiguo 08/03/2015, 14:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: variable no responde a WHERE

Si vas a usar el popup, es simple con que en el URL pongas la variable que quieras, por ejemplo:
Código Javascript:
Ver original
  1. function abrir(url)
  2.     {
  3.         var texto = document.getElementById(3).value;
  4.         url += "?elnombredetuvariable="+texto;
  5.         window.open(url,"Clientes",'top=300,left=200,width=800,height=300');
  6.  
  7.     }

Después en donde abres tu popup rescatas $_GET['elnombredetuvariable'] y listo.

Saludos.
  #13 (permalink)  
Antiguo 08/03/2015, 16:16
 
Fecha de Ingreso: noviembre-2005
Mensajes: 146
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: variable no responde a WHERE

Hola GatorV.
Sí. Caí en que podía pasar la variable a través de GET, aunque había leido algo respecto a seguridad del método de usar GET.
El caso es que estudié como se hacía y lo apliqué.
Dejo descrito el código por si alguien se atasca como me ha pasado a mí.
Dos scripts que se corresponden a dos ventanas.
El primer script (form_principal.php) llama al segundo (form_clientes.php) que es la ventana emergente.

En form_principal.php:

La función que llama a form_clientes.php:

Código Javascript:
Ver original
  1. function abrir(url)
  2.     {
  3.         window.open(url,"Clientes",'top=200,left=250,width=800,height=450');
  4.     }

Bueno de nuevo mi agradecimiento a los tres que habéis dedicado un tiempo a atender mis dudas.
Un saludo.
Los inputs que generan el evento de llamada:
Uno para llamar aplicando filtro a la consulta que soporta el formulario y que tiene que pasar la variable que contiene el valor que necesito en la ventana emergente($varid)

Código Javascript:
Ver original
  1. <input type="button" value="Ver"     onclick= "abrir('form_clientes.php?var3id=<?php echo $var3id ?>')" />

Otro sin filtrar los datos:

Código Javascript:
Ver original
  1. <input type="button" value="Abrir"onclick="abrir('form_clientes.php')"/>

En form_clientes.php (ventana emergente)

Asigno el valor pasado por GET a la variable que estara en la clausula WHERE de la sql:


Código PHP:
Ver original
  1. if(isset($_GET['var3id']))
  2.             {
  3.                 $id_tabla = $_GET['var3id'];
  4.             }
  5.             else
  6.             {
  7.                 $id_tabla = null;
  8.             }

Etiquetas: formulario, mysql, responde, select, sql, tabla, variable
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 09:54.