Foros del Web » Programando para Internet » PHP »

PHP OO Error Strict Standards En Clase Constructor y Undifined Index

Estas en el tema de Error Strict Standards En Clase Constructor y Undifined Index en el foro de PHP en Foros del Web. muy buenas tardes amigo. una pregunta para expertos en PHP POO sobre este sistemita de login que encontre en internet y hay problema cuando lo ...
  #1 (permalink)  
Antiguo 22/06/2013, 17:15
 
Fecha de Ingreso: noviembre-2008
Mensajes: 150
Antigüedad: 15 años, 5 meses
Puntos: 1
Pregunta Error Strict Standards En Clase Constructor y Undifined Index

muy buenas tardes amigo. una pregunta para expertos en PHP POO
sobre este sistemita de login que encontre en internet y hay problema cuando lo corre en mi servidor.

el error que me sale cuando el index. quiere acceder a la clase login.php



y sale errores en las lineas.. del archivo LOGIN.PHP

Código PHP:
<?PHP
if (version_compare(PHP_VERSION'5.0.0') < 0)
{
    die(
'The CodeFlyer Framework requires PHP 5.x.x or greater.');
}


class 
login
{
    private 
$username;
    private 
$password;
    private 
$privilege;

    private 
$link;
    private 
$id;
    private 
$table;
    
    public 
$error;

  public function 
get($var)
  {
    
$var trim(lcase($var));

    if (
$var=='privilege')
    {
      
$ret $this->privilege;
    }
    else if (
$var=='username')
    {
      
$ret $this->username;
    }
    else if (
$var=='password')
    {
      
$ret $this->password;
    }
    else
    {
      
$ret false;
    }
    return 
$ret;
  }

  public function 
isadmin()
    {
    return 
$this->privilege == 1;
    }
  public function 
isJefe()
    {
    return 
$this->privilege == 2;
    }        
  public function 
isEmpleado()
    {
    return 
$this->privilege == 3;
    }
    
//privilegios
    
    
public function getdata($data)
    {
    
$data $this->clean(trim($data));
    
$query "SELECT $data FROM {$this->table} WHERE id='{$this->id}' LIMIT 1;";
    if (
$result mysql_query($query$this->link))
    {
      if (
$row mysql_fetch_assoc($result))
      {
        return 
$row[$data];
      }
    }
    }

    public function 
modlastlogin()
    {
        
mysql_query("UPDATE {$this->table} SET lastactive = NOW() WHERE id = '{$this->id}';"$this->link);
        return 
mysql_affected_rows($this->link)==true false;
    }

    public function 
lastlogin()
    {
        if (
$result mysql_query("SELECT lastactive FROM {$this->table} WHERE id = '{$this->id}' LIMIT 1"$this->link))
        {
            if (
$row mysql_fetch_assoc($result))
            {
                return 
$row['lastactive'];
            }
        }
    }

    
/**
     * Login core
     */
    
public function inherit($session)
    {
    
session_name(urldecode($session));
    }

    public function 
getSID()
    {
    return 
"PHPSESSID=".session_id();
    }

  public function 
login($username$password$remember false)
  {
    
$username $this->clean($username);
    
$password md5($password);
    
$query    "SELECT * FROM {$this->table} WHERE username = '$username' LIMIT 1;";

    if (
$result mysql_query($query$this->link))
    {
      if (
$row mysql_fetch_assoc($result))
      {
        if (
$row['password']==$password)
        {
          return 
$this->setSession($row$remember);
        }
        else
        {
          
$this->logout();
          
$this->error 'pi'// Password Incorrect
          
return false;
        }
      }
      
$this->logout();
      
$this->error 'ui'// Username Incorrect
      
return false;
    }
    else
    {
      
$this->logout();
      return 
false;
    }
  }
  
  
// Construir la session y la cookie, y guardarlas en la base de datos.
  
private function setSession(&$values$remember false$init true)
  {
    
$this->id         $values['id'];
    
$this->username   $values['username'];
    
$this->password   $values['password'];
    
$this->privilege  $values['privilege'];

    
$_SESSION['cf_login_username'] = htmlspecialchars($this->username);
    
$_SESSION['ID'] = $this->id;
    
$_SESSION['Nivel'] = $this->privilege;
    
$cookie md5($values['username'].date("Y-m-d"));
    if (
$remember)
    {
      
$this->update_cookie($cookietrue);
    }

    if (
$init)
    {
      
$session session_id();
      
mysql_query("UPDATE {$this->table} SET session='{$session}', cookie='{$cookie}' WHERE id='{$this->id}'"$this->link);
      
$this->modlastlogin();
    }
    return 
true;
  }

  private function 
update_cookie($cookie)
  {
    
$this->create_cookie('cf_login_cookie'serialize(array($this->username$this->password$cookie)), time() + 31104000);
  }
  
  public function 
create_cookie($name$value=''$maxage=0$domain=''$path=''$secure=false$HTTPOnly=false)
  {
    
$ob ini_get('output_buffering');
    
    if (
$_SERVER['HTTPS'])
    {
      
$secure true;
    }

    
// Abort the method if headers have already been sent, except when output buffering has been enabled
    
if ( headers_sent() && (bool) $ob === false || strtolower($ob) == 'off' )
    {
      return 
false;
    }

    if (!(bool)
$maxage)
    {
      
$maxage time()+3600;
    }

    if ( !empty(
$domain) )
    {
      
// Fix the domain to accept domains with and without 'www.'.
      
if ( strtolowersubstr($domain04) ) == 'www.' )
      {
        
$domain substr($domain4);
      }

      
// Add the dot prefix to ensure compatibility with subdomains
      
if ( substr($domain01) != '.' )
      {
        
$domain '.'.$domain;
      }


      
// Remove port information.
      
$port strpos($domain':');

      if ( 
$port !== false )
      {
        
$domain substr($domain0$port);
      }
    }
    else
    {
      
// Localhost compatibility
      
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
    }

    
header('Set-Cookie: ' .rawurlencode($name).'='.rawurlencode($value)
                          .(empty(
$domain) ? '' '; Domain='.$domain )
                          .(empty(
$maxage) ? '' '; Max-Age='.$maxage)
                          .(empty(
$path)   ? '' '; Path='.$path     )
                          .(!
$secure       '' '; Secure'          )
                          .(!
$HTTPOnly     '' '; HttpOnly'        )
          , 
false);
    return 
true;
  }

  
// Devuelve true si el usuario está logueado. Caso contrario devuelve false.
  // @return bool
    
public function logged()
    {

    
$cookie = array();
    if (
$_COOKIE['cf_login_cookie'])
    {
      list(
$cookie['username'], $cookie['password'], $cookie['serial']) = @unserialize(stripslashes($_COOKIE['cf_login_cookie']));
    }

    if (
$cookie['serial'] && $cookie['username'] && $cookie['password'])
    {
      
$query    "SELECT * FROM {$this->table} WHERE (username = '{$cookie['username']}') AND (password = '{$cookie['password']}') AND (cookie = '{$cookie['serial']}') LIMIT 1;";
    }
    else
    {
      
// Verificar si los datos de session son válidos.
      
$username $_SESSION['cf_login_username'];
      
$session  session_id();
      
$query    "SELECT * FROM {$this->table} WHERE (username = '$username') AND (session = '$session') LIMIT 1;";
    }


    if (
$result mysql_query($query$this->link))
    {
      if (
$row mysql_fetch_assoc($result))
      {
        return 
$this->setSession($rowfalsefalse); // Log in
      
}
      else
      {
        return 
false;
      }
    }
    else
    {
      return 
false;
    }
    }

    public function 
logout()
    {
    
$_SESSION['cf_login_username'] = '';
    
$_SESSION['cf_login_cookie']   = 0;
    
$this->create_cookie('cf_login_cookie'''time() - 3600);
    
mysql_query("UPDATE {$this->table} SET session='".strtoupper(md5(time()))."', cookie='".strtoupper(md5(time()))."' WHERE id='{$this->id}'"$this->link);

    
$this->username '';
    
$this->password '';
    
$this->privilege 0;
    
$this->id 0;
  }

  private function 
clean($value)
  {
    if (
get_magic_quotes_gpc())
    {
      
$value stripslashes($value);
    }
    
$value mysql_real_escape_stringhtmlspecialchars$value ) );
    return 
$value;
  }

    public function 
__construct($array)
    {
    
$this->table $array['table'] ? $array['table'] : 'login';
    
$this->link  mysql_connect$array['host'] ? $array['host'] : 'localhost'$array['username'], $array['password'], true );
    if (!
$this->link)
    {
      die(
mysql_error());
    }
    else
    {
      if (!
mysql_select_db($array['database']))
      {
        die(
mysql_error());
      }
    }

    if (isset(
$_GET['PHPSESSID']))
    {
      
session_id($_GET['PHPSESSID']);
    }

    
session_start();
    }

}

?>
y me sale ese error y no me funciona el sistema de login
esta corrido en xampp
ojo este sistema de logeo me funcionaba en appserver
pero en xampp no me funciona porfavor

el error en la linea 302 y 305 aparece aqui.

Código PHP:
public function __construct($array)
    {
    
$this->table $array['table'] ? $array['table'] : 'login';
    
$this->link  mysql_connect$array['host'] ? $array['host'] : 'localhost'$array['username'], $array['password'], true );
    if (!
$this->link)
    {
      die(
mysql_error());
    }
    else
    {
      if (!
mysql_select_db($array['database']))
      {
        die(
mysql_error());
      }
    }

    if (isset(
$_GET['PHPSESSID']))
    {
      
session_id($_GET['PHPSESSID']);
    }

    
session_start();
    } 
el error en la linea 236 y 242 aqui.

Código PHP:
$cookie = array();
    if (
$_COOKIE['cf_login_cookie'])
    {
      list(
$cookie['username'], $cookie['password'], $cookie['serial']) = @unserialize(stripslashes($_COOKIE['cf_login_cookie']));
    }
  
    
// Verificar si los datos de la cookie son válidos.
    
if ($cookie['serial'] && $cookie['username'] && $cookie['password'])
    {
      
$query    "SELECT * FROM {$this->table} WHERE (username = '{$cookie['username']}') AND (password = '{$cookie['password']}') AND (cookie = '{$cookie['serial']}') LIMIT 1;";
    } 
porfavor me podrian decir que sucede o como solucionarlo de antemano muchas gracias!
  #2 (permalink)  
Antiguo 22/06/2013, 17:34
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 14 años
Puntos: 17
Respuesta: Error Strict Standards En Clase Constructor y Undifined Index

Pues creo que el problema está en que cuando instancias la clase, al constructor debes pasarle un array asociativo, cuyos indices del array deben tener esos nombres, 'host', 'username' y 'password'.

Y en el error de las otras lineas lo mismo.

Revisa eso!!

Saludos.
  #3 (permalink)  
Antiguo 22/06/2013, 17:40
 
Fecha de Ingreso: noviembre-2008
Mensajes: 150
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Error Strict Standards En Clase Constructor y Undifined Index

claro en cuanto a esos valores de array esta en una archivo. config.php
los cuales estan los valores para acceso a la base de datos y tambien hay un include donde se conecta justo a este archivo login.php
ahora te pongo el codigo de este archivo para que tengas una idea completa

Código PHP:
<?php
  
include('login.php');
  
$login = new login(array('database'=>'mibd','table'=>'login','username'=>'miuser','password'=>'123456'));
?>
ese es el archivo include.
ojo estos son archivos de un sistema pequeño de logeo que trabaja con cokkies todo en bd.. obviamente
  #4 (permalink)  
Antiguo 22/06/2013, 17:46
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 14 años
Puntos: 17
Respuesta: Error Strict Standards En Clase Constructor y Undifined Index

Es lo que te digo en el otro mensaje, el constructor de la clase está esperando otro valor con "nombre" host, te faltaría al instanciar la clase ahí

Código PHP:
Ver original
  1. <?php
  2.   include('login.php');
  3.   $login = new login(array('host'=>'tuhost','database'=>'mibd','table'=>'login','username'=>'miuser','password'=>'123456'));
  4. ?>

Algo así.

Saludos.
  #5 (permalink)  
Antiguo 22/06/2013, 17:52
 
Fecha de Ingreso: noviembre-2008
Mensajes: 150
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Error Strict Standards En Clase Constructor y Undifined Index

muchas gracias lobito por contesta.
bueno viendo el codigo si te fijas en la parte del constructor en el archivo
login.php

dale que ese parametro array host esta ya iniciada fijate en esta linea de codigo.

Código PHP:
public function __construct($array)
    {
    
$this->table $array['table'] ? $array['table'] : 'login';
    
$this->link  mysql_connect$array['host'] ? $array['host'] : 'localhost'$array['username'], $array['password'], true );
    if (!
$this->link)
    {
      die(
mysql_error());
    } 
de antemano muchas gracias.
  #6 (permalink)  
Antiguo 22/06/2013, 17:55
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 14 años
Puntos: 17
Respuesta: Error Strict Standards En Clase Constructor y Undifined Index

Has intentado poner el código que te he dicho, a ver si te desaparecía el error?

Ponle 'host'=>'localhost'

Y a ver si ese error de la linea 305 desaparece.

Saludos.
  #7 (permalink)  
Antiguo 22/06/2013, 18:03
 
Fecha de Ingreso: noviembre-2008
Mensajes: 150
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Error Strict Standards En Clase Constructor y Undifined Index

agrege el parametro al array host .
y de los error que describi en imagen al inicio de este post.
solo desaparecio el undefined index HOST.
pero el strict standards del constructor sigue ahi.
  #8 (permalink)  
Antiguo 22/06/2013, 18:09
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 14 años
Puntos: 17
Respuesta: Error Strict Standards En Clase Constructor y Undifined Index

Pues ese "error" la verdad es que no lo había visto nunca, he buscado un poco y aparentemente no es un error en si, sería como una especie de "warning", pero esto te lo podrá decir mejor alguien que lo sepa con seguridad.

Yo intentaría arreglar los otros problemas, que tienen la misma solución que te he dicho antes, pasar todos los datos ahí al llamar al método que sea.

Saludos.
  #9 (permalink)  
Antiguo 22/06/2013, 18:12
 
Fecha de Ingreso: noviembre-2008
Mensajes: 150
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Error Strict Standards En Clase Constructor y Undifined Index

muchas gracias. es verdad es un error que emite el apache.
se solucionar poniendole un parametro en DISPLAY_ERROR
en el archivo PHP.INI.
pero eso solo seria tapar el error. y no solucionarlo
queria ir mas alla y solucionarlo en fin vere como hacerlo
en todo caso muchas gracias por tu tiempo.
  #10 (permalink)  
Antiguo 22/06/2013, 18:57
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Error Strict Standards En Clase Constructor y Undifined Index

Hola,

Cita:
Iniciado por keygen20 Ver Mensaje
...pero eso solo seria tapar el error. y no solucionarlo
queria ir mas alla y solucionarlo en fin vere como hacerlo ...
El constructor está redefinido, la forma antigua de crear un constructor es ponerle el mismo nombre de la clase y la nueva forma es ponerle el nombre __construct. Si existen las dos entonces te genera ese error. En el caso que esté de último el __construct.

Código PHP:
Ver original
  1. public function login($username, $password, $remember = false)
  2.   {
  3.   }
  4.  
  5.     public function __construct($array)
  6.     {
  7.     }

Saludos,

Última edición por HackmanC; 22/06/2013 a las 19:09 Razón: edit
  #11 (permalink)  
Antiguo 24/06/2013, 17:05
 
Fecha de Ingreso: noviembre-2008
Mensajes: 150
Antigüedad: 15 años, 5 meses
Puntos: 1
Pregunta Respuesta: Error Strict Standards En Clase Constructor y Undifined Index

muchas gracias por responderme.
la cuestion es que pienso que esos problemas es el porque no me ejecuta ese script de login
lo probe con la ultima version de XAMPP
y no me funciona ese script de login
pero si me funciona con el APPSERVERNETWORK 2.5.10
no entiendo porque en xampp no me funciona y si en appserver
el detalle del servidor de APPSERV:

Apache Web Server Version 2.2.8
PHP Script Language Version 5.2.6
MySQL Database Version 5.0.51b
phpMyAdmin Database Manager Version 2.10.3

y si me funciona correctamente sin errores.

pero en XAMPP no me funciona este script.
alguna idea?
De antemano muchas gracias.

Etiquetas: clase, constructor, html, index, mysql, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:53.