Autor Tema: ¿Cómo recuperar variable $_GET en una clase php?  (Leído 7471 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado vamaya

  • The newbie
  • *
  • Mensajes: 7
¿Cómo recuperar variable $_GET en una clase php?
« : agosto 15, 2014, 06:09:56 pm »
Buenas tardes amigos, tengo un inconveniente al hacer una consulta a una base de datos mysql, en la que utilizo una variable $_GET, cuando hago esta consuta en mi clases php resulta que NO muestra los resultados porque al parecer esa variable no existe... les dejo mis archivos, ojalá me puedan ayudar, gracias.

usuarios.class.php
Citar
<?php
$suc = "$_GET[f]";
class Usuarios
{
    public function  __construct() {
        $dbhost = 'localhost';
        $dbuser = 'root';
        $dbpass = '';
        $dbname = 'tda';

        mysql_connect($dbhost, $dbuser, $dbpass);

        mysql_select_db($dbname);
    }

    public function buscarUsuario($nombreUsuario){
        $datos = array();
      
        $sql = "SELECT * FROM existencia
                WHERE (id_suc='$suc') AND (cod_prod LIKE '%$nombreUsuario%')
                "; //ESTA ES MI CONSULTA A LA BD, CUANDO UTILIZO $suc NO ME HACE LA CONSULTA.

        $resultado = mysql_query($sql);

        while ($row = mysql_fetch_array($resultado, MYSQL_ASSOC)){
            $datos[] = array("value" => $row['cod_prod'],
                             "descripcion" => $row['descripcion_prod'],
                             "precio" => $row['precio_venta_cli']);
        }

        return $datos;
    }
}

ajax.php
Citar
<?php

include_once 'usuarios.class.php';

$usuario = new Usuarios();

echo json_encode($usuario->buscarUsuario($_GET['term']));

facturar.php
Citar
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Administración | Tda. Genesis</title>
<link href="estilo/estilo.css" rel="stylesheet" type="text/css" />
<link href="estilo/jquery-ui-1.8.4.custom.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.4.custom.min.js"></script>
<script type="text/javascript">
            $(function(){
                $('#buscar_usuario').autocomplete({
                   source : 'ajax.php',
                   select : function(event, ui){
                       $('#resultados').slideUp('fast', function(){
                            $('#resultados').html(
                                ''   ui.item.descripcion   '<br/>' 
                                '$ '   ui.item.precio
                            );
                       });
                       $('#resultados').slideDown('fast');
                   }
                });
            });
</script>
</head>
<?php

date_default_timezone_set('America/El_Salvador');
include("conectar.php");
session_start();
if($_SESSION["usuario"]) //ANTES DE PHP 5.4 -- @session_is_registered('usuario')
{
   //include("conectar.php");
   $user = $_SESSION["usuario"];
   $suc = "";
   $editor_user = mysql_query("SELECT * FROM usuario WHERE cod_per='$user'", $conexion);
   while($extraer = mysql_fetch_array($editor_user))
   {
      echo "
      <body class='body_ad' onload='document.form5.cod.focus()'>
      <a href='cerrar_sesion.php'><img src='img/gral/cs.png' align='right'></a>
      <center>";
      echo "<div class='div_ad'>FACTURACION</div>
      <div class='div_panel_facturacion'>
         <div class='div_panel_fac_total'>
         TOTALES
         <div class='label_panel_fac_sub'>SUB
         </div>
         <div class='label_panel_fac_iva'>IVA
         </div>
         <div class='label_panel_fac_total'>TOTAL
         </div>
         </div>
         <form id='form5' name='form5' method='post' action=''>
            <div class='div_panel_fac_cli'>
            <table border='0'>
            <tr>
              <td class='td_ad'>Cliente</td>
              <td><label>
              <input type='text' name='cod' id='cod' size='50' />
              </label></td>
              <td class='td_ad'>DUI</td>
              <td><label>
              <input type='text' name='dui' id='dui' size='10' />
              </label></td>         
            </tr>
            <tr>
              <td class='td_ad'>Direcci&oacute;n</td>
              <td colspan='4'><label>
              <input type='text' name='direccion' id='direccion' size='50' />
              </label></td>
            </tr>                  
            </table>
         </form>
         </div>
         <div class='div_panel_fac_producto'>
          <form id='form5' name='form5' method='post' action=''>
            <table border='0'>
            <tr>
              <td class='td_ad'>Cod.</td>
              <td class='td_ad'>Cant.</td>
              <td class='td_ad'>Desc.</td>
              <td class='td_ad'>Total</td>
              <td class='td_ad'></td>      
            </tr>
            <tr>
              <td><input type='text' name='buscar_usuario' id='buscar_usuario' size='40' /></td>
              <td><input type='text' name='cantpro' id='cantpro' size='10' /></td>
              <td><input type='text' name='despro' id='despro' size='10' /></td>
              <td><input type='text' name='totalpro' id='totalpro' size='10' /></td>
              <td><input type='submit' name='aceptarca' id='aceptarca' value='   ' /></td>
            </tr>
            <tr>
              <td><label id='resultados'>
              </label></td>
            </tr>                  
            </table>
         </form>
         </div>
         <div class='div_panel_fac_producto'>
         </div>";
            if(isset($_POST["aceptarca"]))
            {
               $suc = "$_GET[f]";
               $cod = "$_POST[cod]";
               $cantidad = "$_POST[cantidad]";
            }
         echo "</div>";   
   }
}
else
{   
   echo "
   <html>
   <body>
   <script>alert('Por favor inicie sesión... Esta es una página restringida');
   location.replace('admin.php')</script>";
}
?>

Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14587
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:¿Cómo recuperar variable $_GET en una clase php?
« Respuesta #1 : agosto 15, 2014, 06:32:39 pm »
Código: [Seleccionar]
$suc = "$_GET[f]";
...
WHERE (id_suc='$suc') AND (cod_prod LIKE '%$nombreUsuario%')
ESTO ES MALA PRACTICA
para empezar, en el controlador dale tratamiento a la variable, va contra toda buena practica el hecho que estes buscando cosas en una base de datos con una variable que es entrada desde la interfaz. tendrias que tener una funcion que te limpie de todo caracter de escape de query como minimo.

segundo, quema la variable a ver si con la variable quemada te da resultado.

tercero, si con la variable quemada te da resultado, entonces si tenes razon y tenes que revisar donde es que la capturas.

pro tip: para obtener la variable asi como la has declarado la tenes que llamar dentro de una funcion como $this->suc
« Última Modificación: agosto 15, 2014, 06:37:27 pm por g00mba »

Desconectado Jaru

  • The Communiter-
  • *
  • Mensajes: 13252
  • some text
Re:¿Cómo recuperar variable $_GET en una clase php?
« Respuesta #2 : agosto 15, 2014, 06:38:34 pm »
En la funcion "buscarUsuario" ya le estas pasando el $_GET, yo digo que no se lo pases con argumento, pasaselo asi:

Código: [Seleccionar]
include_once 'usuarios.class.php';

$usuario = new Usuarios();

echo json_encode($usuario->buscarUsuario($_GET));

-- ahora ya dentro de la funcion jalas el elemento que queras

Código: [Seleccionar]
public function buscarUsuario($nombreUsuario){
        $datos = array();
     
        $sql = "SELECT * FROM existencia
                WHERE (id_suc='".$_GET["f"]."') AND (cod_prod LIKE '%".$_GET["term"]."%')
                "; //ESTA ES MI CONSULTA A LA BD, CUANDO UTILIZO $suc NO ME HACE LA CONSULTA.

...
N/A

Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14587
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:¿Cómo recuperar variable $_GET en una clase php?
« Respuesta #3 : agosto 15, 2014, 06:49:20 pm »
Código: [Seleccionar]
WHERE (id_suc='".$_GET["f"]."') AND (cod_prod LIKE '%".$_GET["term"]."%') yo no recomiendo que haga eso, peor todavia meter una superscope variable dentro de un query es peligroso tambien. mejor que agarre la variable con super scope, la limpie, la haga local y DESPUES que la pase al query. es lo mas sano.
« Última Modificación: agosto 15, 2014, 06:53:36 pm por g00mba »

Desconectado Jaru

  • The Communiter-
  • *
  • Mensajes: 13252
  • some text
Re:¿Cómo recuperar variable $_GET en una clase php?
« Respuesta #4 : agosto 15, 2014, 06:55:29 pm »
Código: [Seleccionar]
WHERE (id_suc='".$_GET["f"]."') AND (cod_prod LIKE '%".$_GET["term"]."%') yo no recomiendo que haga eso, peor todavia meter una superscope variable dentro de un query es peligroso tambien. mejor que agarre la variable con super scope, la limpie, la haga local y DESPUES que la pase al query. es lo mas sano.
osea aja, la seguridad y todo eso,  solo le apuntaba el error que tenia extrayendo la variable.

Lo de la inyección de sql es algo que debería preocuparse desde un principio.
N/A

Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14587
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:¿Cómo recuperar variable $_GET en una clase php?
« Respuesta #5 : agosto 15, 2014, 06:57:27 pm »
osea aja, la seguridad y todo eso,  solo le apuntaba el error que tenia extrayendo la variable.

Lo de la inyección de sql es algo que debería preocuparse desde un principio.
lo de la seguridad y todo eso se llaman buenas practicas  :thumbsup:

si puesi tambien podes hacerlo asi como decis vos... pero con solo ponerle $this-> antes del nombre de la variable cuando la esta invocando tiene el mismo efecto, el scope de la variable es la q el no habia dominado bien.
« Última Modificación: agosto 15, 2014, 06:59:32 pm por g00mba »

Desconectado vamaya

  • The newbie
  • *
  • Mensajes: 7
Re:¿Cómo recuperar variable $_GET en una clase php?
« Respuesta #6 : agosto 15, 2014, 07:13:26 pm »
Código: [Seleccionar]
$suc = "$_GET[f]";
...
WHERE (id_suc='$suc') AND (cod_prod LIKE '%$nombreUsuario%')
ESTO ES MALA PRACTICA
para empezar, en el controlador dale tratamiento a la variable, va contra toda buena practica el hecho que estes buscando cosas en una base de datos con una variable que es entrada desde la interfaz. tendrias que tener una funcion que te limpie de todo caracter de escape de query como minimo.

segundo, quema la variable a ver si con la variable quemada te da resultado.

tercero, si con la variable quemada te da resultado, entonces si tenes razon y tenes que revisar donde es que la capturas.

pro tip: para obtener la variable asi como la has declarado la tenes que llamar dentro de una funcion como $this->suc

¿Me explicas cómo por favor? te lo agradecería mucho.

Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14587
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:¿Cómo recuperar variable $_GET en una clase php?
« Respuesta #7 : agosto 15, 2014, 07:15:02 pm »
pero que parte necesitas que te explique? como limpiar los datos o sobre el scope de las variables?

Desconectado Jaru

  • The Communiter-
  • *
  • Mensajes: 13252
  • some text
Re:¿Cómo recuperar variable $_GET en una clase php?
« Respuesta #8 : agosto 15, 2014, 07:18:40 pm »
pero que parte necesitas que te explique? como limpiar los datos o sobre el scope de las variables?
la parte de como terminarle la tarea
N/A

Desconectado vamaya

  • The newbie
  • *
  • Mensajes: 7
Re:¿Cómo recuperar variable $_GET en una clase php?
« Respuesta #9 : agosto 15, 2014, 07:20:53 pm »
pero que parte necesitas que te explique? como limpiar los datos o sobre el scope de las variables?

Sobre las dos cosas, realmente esto es algo nuevo para mi, y me gustaría saber como se puede resolver este problema, desde ayer estoy intentando pero no me da resultado.

Desconectado vamaya

  • The newbie
  • *
  • Mensajes: 7
Re:¿Cómo recuperar variable $_GET en una clase php?
« Respuesta #10 : agosto 15, 2014, 07:22:49 pm »
la parte de como terminarle la tarea
Si eso solo es un 10% de la tarea  :drinks: