Sv Community El Salvador
Soporte y Tecnología => Programación => Web => Mensaje iniciado por: vamaya en 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
<?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
<?php
include_once 'usuarios.class.php';
$usuario = new Usuarios();
echo json_encode($usuario->buscarUsuario($_GET['term']));
facturar.php
<!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ó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>";
}
?>
-
$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
-
En la funcion "buscarUsuario" ya le estas pasando el $_GET, yo digo que no se lo pases con argumento, pasaselo asi:
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
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.
...
-
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.
-
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.
-
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.
-
$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.
-
pero que parte necesitas que te explique? como limpiar los datos o sobre el scope de las variables?
-
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
-
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.
-
la parte de como terminarle la tarea
Si eso solo es un 10% de la tarea :drinks:
-
lee aqui
http://stackoverflow.com/questions/110575/do-htmlspecialchars-and-mysql-real-escape-string-keep-my-php-code-safe-from-inje/110576#110576 (http://stackoverflow.com/questions/110575/do-htmlspecialchars-and-mysql-real-escape-string-keep-my-php-code-safe-from-inje/110576#110576)
y aqui
http://php.net/manual/en/language.variables.scope.php (http://php.net/manual/en/language.variables.scope.php)
-
lee aqui
http://stackoverflow.com/questions/110575/do-htmlspecialchars-and-mysql-real-escape-string-keep-my-php-code-safe-from-inje/110576#110576 (http://stackoverflow.com/questions/110575/do-htmlspecialchars-and-mysql-real-escape-string-keep-my-php-code-safe-from-inje/110576#110576)
y aqui
http://php.net/manual/en/language.variables.scope.php (http://php.net/manual/en/language.variables.scope.php)
Gracias.