Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/04/2015, 11:15
Avatar de Djoaq
Djoaq
 
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: Podria mejorar el codigo???

Hola lo del tema de mysqli no lo ví bién .

A lo de escapara los caracteres me refiero a que uses funciones como :
Código PHP:
mysql_real_escape_string 
Piensa que los inputs siempre són los puntos más calientes para que un visitante malintencionado altere el comportamiento de tus consultas .

Vamos a hacer un ejemplo sencillo :

Código MySQL:
Ver original
  1. SELECT * FROM tbl_usuarios WHERE nombe = TU INPUT AND pass = TUINPUT2


Imagina que un usuario malintencionado tuviese un form e introdujera en el campo nombre :

Código SQL:
Ver original
  1. blabla /*

Y en el campo pass :

Código SQL:
Ver original
  1. */ OR 1=1


Y le dieras al submit .. Lo que pasaría es que tu consulta quedaría :

Código MySQL:
Ver original
  1. SELECT * FROM tbl_usuarios WHERE nombe = blabla /* AND pass =  */ OR 1=1

Como hemos desactivado la condición , hemos añadido el op lógico OR y 1=1 siempre dará true .. el resultado sera que nos mostrara todos los nombre de usuario y contraseñas de la bd.

Esto es un ejemplo sencillo para que veas el concepto de algunas inyecciones de SQL .

Luego el ejemplo de herencia básico sería algo como :

Código PHP:
<?php
class BaseDatos 
{
function 
__construct()
{
$conexion=mysqli_connect("localhost","Prueba","Pru eba")or die("ERROR, no se puede conectar a la base de datos: ".mysqli_error());
mysqli_select_db($conexion,"Prueba");

return 
$conexion;
}

}
Código PHP:
<?php
class Prueba extends BaseDatos 
{

function 
__construct(){
 
parent::__construct();
}


function 
agregarNombre($Nombre)
{
$json['bandera']="";

mysqli_query($this->conexion,"BEGIN");
$sql="INSERT into Prueba(Nombre)values('".$Nombre."')";
$query=mysqli_query($this->conexion,$sql)or die("ERROR, no se pudo insertar en la base de datos: ".mysqli_error());

if(
$query==FALSE)
{
mysqli_query($this->conexion,"ROLLBACK");
$json['bandera']="0";
}
else
if(
$query!=FALSE)
{
mysqli_query($this->conexion,"COMMIT");
$json['bandera']="1";
}
echo 
json_encode($json);
}
}

?>
No lo he probado es teórico .


De esta forma cuando haces :
$objPrueba = new Prueba;
al inicializarse el consturctor de prueba llama al constructor de la clase conexión.
$objPrueba->agregarNombre(params);

La idea es cuando heredas usas la palabra reservada extends al declarar la clase .
Se heredan todos los atributos y métodos , recuerda atributo = var y método = funcion.
Los atributos public y protected se heredan mientras que private no. ( A esto se le llama encapsulación ).

Luego las constantes se definen con cons y las propiedades estáticas con la palabra reservada static .. y se acceden a ellas mediante nombreClasse::$mivarstatic ;
Recuerda también que poner una función con el mismo nombre de la clase es lo mismo que usar __construct().
El constructor es lo primero que se ejecuta nada mas instanciar una clase.
y con el operador de resolución parent:: estamos instanciando el constructor de la clase padre en la case hija .

Un saludo!