Pregunta:
Fecha: 05-06-2019 14:41:07
(En Español)
login.php
DB.php
Votos: 0 - Respuestas: 1 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
Ayuda con error en instancia $db (objeto singleton)[No resuelta]
hola, no entiendo porque no compila, me podrian dar una manito con esto. Resulta que quiero verificar que no haya ninguna inyección SQL y me da un error en la instancia $db que es un objeto singleton (unico objeto con acceso a la base de datos).login.php
$db = Db::getInstance();
//condicional - si existen datos por medio $_POST se hace
if ($_POST) {
//obtenemos datos especificos y eliminamos codigo de un posible inyeccion de SQL
$nombre= $db->real_escape_string($_POST["nombre"]);
$pass = $db->real_escape_string($_POST["pass"]);
}
DB.php
Class Db{
private $servidor;
private $usuario;
private $password;
private $base_datos;
private $link;
private $stmt;
private $array;
static $_instance;
/*La función construct es privada para evitar que el objeto pueda ser creado mediante new*/
private function __construct(){
$this->setConexion();
$this->conectar();
}
/*Método para establecer los parámetros de la conexión*/
private function setConexion(){
$conf = Conf::getInstance();
$this->servidor=$conf->getHostDB();
$this->base_datos=$conf->getDB();
$this->usuario=$conf->getUserDB();
$this->password=$conf->getPassDB();
}
/*Evitamos el clonaje del objeto. Patrón Singleton*/
private function __clone(){ }
/*Función encargada de crear, si es necesario, el objeto. Esta es la función que debemos llamar desde fuera de la clase para instanciar el objeto, y así, poder utilizar sus métodos*/
public static function getInstance(){
if (!(self::$_instance instanceof self)){
self::$_instance=new self();
}
return self::$_instance;
}
/*Realiza la conexión a la base de datos.*/
private function conectar(){
$link = $this->link=mysqli_connect($this->servidor, $this->usuario, $this->password);
if($link){
$p = mysqli_select_db($this->link, $this->base_datos);
@mysqli_query("SET NAMES 'utf8'");
}
if (!$link){
error_log(0,'Problema de conexión a la base de datos.');
exit('Perdonen las molestias. Tenemos un problema técnico. Esperamos resolverlo en los próximos minutos');
}else{
$this->link = $link;
}
}
Votos: 0 - Respuestas: 1 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 06-06-2019 06:39:41 Saludos
Tendrias que poner bien todo el codigo y que error te marca...
Un ejemplo seria asi...
/* si solo dejas if, te puede dar error */ if(isset($_POST) { /* ocupa addslashes para quitar comillas y apostrofes, evitaras inyecciones */ $nombre= addslashes($_POST["nombre"]); $pass = addslashes($_POST["pass"]); /* funciones para guardar o editar */ /* ejemplo de busqueda $conexion debes tenerla */ $sql = "SELECT nick, email, nombre FROM netolandia where login=:nombre and pass=:pass and activo=1"; $consulta = $conexion->prepare($sql); $consulta->bindParam(':nombre', $nombre); $consulta->bindParam(':pass', $pass); $consulta->execute(); $registro = $consulta->fetch(); /* y tienes en un array el registro si es encontrado y te evitas inyecciones */ }
Si estas iniciando y requieres ayuda, agregame al correo: stryfe.eme@gmail.com Votos: 0 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
