New question

Question:

Date: 05-06-2019 14:41:07 (In Spanish)

Ayuda con error en instancia $db (objeto singleton)[Unresolved]

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; 
      }

   }

Tags: HTML - MySQL - PHP - Question Votes: 0 - Answers: 1 - Views: 10 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 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
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In