15/12/04, 12:41:00
|
#1 (permalink)
|
|
Ex. *********
Registrado: nov 2002
Ubicación: Santiago - Chile
Mensajes: 34.433
|
FAQ's - $PHP->Orientado_a_objetos()
Normas de uso:
La persona que va a publicar un FAQ debe indicar el Tema de la Pregunta, la Pregunta y la Respuesta a la misma, o en su defecto, un link hacia un Tema del Foro donde se haya tratado con ese problema en particular, y se haya resuelto o explicado correctamente. Podemos utilizar el siguiente esquema :
Tema: Tema (teoría, classes, etc...) (nos facilitará hacer indices a futuro y mantenerlo)
Versión de PHP: 4.x e inferiores o 5.x o superiores (dadas las diferencias entre ambas sobre el modelo de POO que emplean, es altamente recomendable que se indique la versión de PHP si corresponde).
Pregunta: ¿Pregunta? (si el tema es generíco, no es necesario crear una "pregunta" pero si recomendable clasificarlo de alguna manera).
Respuesta: Respuesta
Es importante recalcar algunas cosas:
* Este mensaje queda abierto, cualquier persona puede publicar su "FAQ", sólo intenten que no sean repetidas o de temas similares si no aportan algún punto de vista diferente.
* La persona que publica la FAQ o bien si es de otro autor al que haga referencia explicita en la misma FAQ queda bajo responsabilidad del mismo. Las preguntas aclaratorias por alguna FAQ pueden hacerse directamente por Mensajería privada al autor de dicha FAQ o quien la publique o de forma pública abriendo un nuevo tema en el foro y haciendo referencia a la FAQ aludida.
Un saludo, y animo con las FAQ's - $PHP->Orientado_a_objetos() 
Última edición por Cluster fecha: 15/12/04 a las 12:52:16.
|
|
|
|
15/12/04, 12:48:07
|
#2 (permalink)
|
|
Ex. *********
Registrado: nov 2002
Ubicación: Santiago - Chile
Mensajes: 34.433
|
Última edición por jam1138 fecha: 16/07/07 a las 18:22:41.
|
|
|
|
18/12/04, 01:04:37
|
#3 (permalink)
|
Registrado: nov 2004
Ubicación: Santa Ana - Isla de Margarita
Mensajes: 473
|
Usuarios en Linea
Pregunta: Saber cuantos usuarios hay en linea.
Autor original: Víctor Simental ( vic_mx)
Respuesta:
Esta es la estructura de nuestra tabla:
Código:
CREATE TABLE usuariosenlinea (
timestamp int(15) NOT NULL default '0',
ip varchar(40) NOT NULL default '',
location varchar(100) NOT NULL default '',
KEY timestamp (timestamp),
KEY ip (ip),
KEY location (location)
) TYPE=MyISAM;
Código PHP:
<?php
class Usuariosenlinea
{
/*
* @param string $servidor el host para conectar, usualmente localhost
* @param string $basededatos el nombre de la base de datos
* @param string $nombredb el nombre de la tabla, preferentemente no editar
* @param string $usuario usuario de la base de datos
* @param string $pass la contraseña de la base de datos
*/
var $servidor = 'localhost';
var $basededatos = '';
var $nombredb = '';
var $usuario = '';
var $pass = '';
## Fin de Conexion ##
var $e_rror;
//Segundos para borrar de la base de datos a los usuarios inactivos
var $segundos = 120;
var $ahora = 0;
//CONSTRUCTOR
function Usuariosenlinea() {
$this->recargar();
}
function cuantos() {
return $this->ahora;
}
function enlinea() {
if($this->ahora == 1) {
echo $this->ahora;
}
else
{
echo $this->ahora;
}
}
function ipreal(){
if ($real_ip = getenv('HTTP_X_FORWARDED_FOR')){
$explode_real_ip = explode(",", $real_ip);
return trim($explode_real_ip[0]);
}
else
{
return getenv('REMOTE_ADDR');
}
}
function error(){
return $this->e_rror = mysql_error();
}
function recargar() {
$tiempo_actual = time();
$tiempo_final = $tiempo_actual - $this->segundos;
$ip = $this->ipreal();
@mysql_connect($this->servidor, $this->usuario, $this->pass)
or die('Error al Intentar Conectar con la base de datos '.$this->error().'');
@mysql_select_db($this->basededatos)
or die('Error Seleccionando la base de datos '.$this->error().'');
$result = mysql_query("SELECT ip FROM $this->nombredb WHERE ip='$ip'")
or die('Error de lectura en la base de datos '.$this->error().'');
if(mysql_num_rows($result) == 0){
mysql_query("INSERT INTO $this->nombredb VALUES ('$tiempo_actual','$ip','$_SERVER[REQUEST_URI]')")
or die('Error al Insertar en la base de datos '.$this->error().'');
}
else
{
mysql_query("UPDATE $this->nombredb SET timestamp='$tiempo_actual' where ip='$ip'")
or die('Error al Insertar en la base de datos '.$this->error().'');
}
mysql_query("DELETE FROM $this->nombredb WHERE timestamp < $tiempo_final")
or die('Error al intentar borrar en la base de datos '.$this->error().'');
$result = mysql_query("SELECT ip FROM $this->nombredb")
or die('Error de lectura en la base de datos '.$this->error().'');
$this->ahora = mysql_num_rows($result);
mysql_close();
}
}
?>
Ahora bien como hacemos el llamado en la pagina de nosotros para mostrarlo es de la siguiente manera:
Código HTML:
<?php
include("class.online.php");
$enlinea = new Usuariosenlinea();
$enlinea->enlinea();
?>
Suerte y Salud2. 
__________________
Atte. Mohamed :aplauso:
Desde Venezuela - Isla de Margarita.
Última edición por Cluster fecha: 16/02/06 a las 10:44:21.
|
|
|
|
27/06/05, 10:27:40
|
#4 (permalink)
|
Registrado: may 2005
Mensajes: 152
|
Tema: Sesiones
Versión de PHP: 4.x
Pregunta: Como personalizo las sesiones para alamcenarlas en una base de datos de MySQL ?
Respuesta:
Estructura de la tabla
Código:
DROP TABLE IF EXISTS `sesiones`.`sesiones`;
CREATE TABLE `sesiones` (
`pk` varchar(32) NOT NULL default '',
`inicio` int(10) unsigned NOT NULL default '0',
`fin` int(10) unsigned NOT NULL default '0',
`valor` longtext NOT NULL,
PRIMARY KEY (`pk`)
) TYPE=MyISAM;
Clase que se encarga de manejar las sesiones:
Código PHP:
//******************** ClaseSesiones.php ********************************
define('SQL_LEER_SESION',"SELECT valor FROM %s WHERE pk = '%s'");
define('SQL_ACTUALIZAR_SESION',"UPDATE %s SET fin = %d, valor = '%s' WHERE pk = '%s'");
define('SQL_AGREGAR_SESION',"INSERT INTO %s VALUES('%s',%d,%d,'%s')");
define('SQL_BORRAR_SESION',"DELETE FROM %s WHERE pk = '%s'");
define('SQL_EXPIRA_SESION',"DELETE FROM %s WHERE inicio < %d");
class MSesiones{
var $_tabla;
var $_BDUsuario;
var $_BDClave;
var $_BDHost;
var $_BDatos;
var $_idConMysql;
var $_tiempo_sesion = 10;
var $_operSQL = array(
SQL_LEER_SESION,
SQL_ACTUALIZAR_SESION,
SQL_AGREGAR_SESION,
SQL_BORRAR_SESION,
SQL_EXPIRA_SESION,
);
var $_keys = array(
'_tabla',
'_BDUsuario',
'_BDClave',
'_BDHost',
'_BDatos',
'_tiempo_sesion'
);
function MSesiones($parametros,$sesion = true){
if(!$sesion){
return;
}
session_set_save_handler (
array(&$this, 'open'),
array(&$this, 'close'),
array(&$this, 'read'),
array(&$this, 'write'),
array(&$this, 'destroy'),
array(&$this, 'gc')
);
if(!is_array($parametros)){
trigger_error('Debe de pasar un arreglo',E_USER_ERROR);
}
foreach($parametros as $k => $v){
if(!in_array($k,$this->_keys)){
trigger_error("Falta el parametro $k",E_USER_ERROR);
}
if(empty($v)){
continue;
}
$this->$k = $v;
}
}
function open($salvar_sesion,$nombre_sesion){
$this->_idConMysql = @mysql_connect($this->_BDHost,$this->_BDUsuario,$this->_BDClave);
$bdatos = @mysql_select_db($this->_BDatos);
if(!$this->_idConMysql || !$bdatos){
return false;
}
return true;
}
function close(){
$this->gc(0);
return true;
}
function read($id){
$sql = sprintf($this->_operSQL[0],$this->_tabla,$id);
$rMysql = @mysql_query($sql,$this->_idConMysql);
if(!@mysql_num_rows($rMysql)>0){
return '';
}
$regValor = mysql_fetch_assoc($rMysql);
return $regValor['valor'];
}
function write($id,$valor){
$sql = sprintf($this->_operSQL[1],$this->_tabla,time(),$valor,$id);
$rMysql = @mysql_query($sql);
if(!$rMysql){
return false;
}
if(mysql_affected_rows($this->_idConMysql)){
return true;
}
$sql = sprintf($this->_operSQL[2],$this->_tabla,$id,time(),time(),$valor);
$rMysql = @mysql_query($sql);
if(mysql_affected_rows($this->_idConMysql)){
return true;
}else{
return false;
}
}
function destroy($id){
$sql = sprintf($this->_operSQL[3],$this->_tabla,$id);
$rMysql = @mysql_query($sql);
if(mysql_affected_rows($this->_idConMysql)){
return true;
}else{
return false;
}
}
function gc($vida){
$sql = sprintf($this->operSQL[4],strtotime("-$this->_tiempo_sesion minutes"));
$rMysql = @mysql_query($sql);
if(mysql_affected_rows($this->_idConMysql)){
return true;
}else{
return false;
}
}
}//Fin MSesiones
Ejemplo de uso:
Código PHP:
//Incluimos la definicion de la clase
require('ClaseSesiones.php');
//la clase espera un arreglo con los siguientes parametros
//_tabla = tabla de la base de datos que contendra los datos de las sesiones
//_BDusuario = cuenta de conexion a mysql
//_BDClave = contraseña de la cuenta de mysql
//_BDHost = servidor al que se quiere acceder
//_BDatos = Base de datos a la que accede la cuenta
//_tiempo_sesion = tiempo que existira como registro de la sesion en minutos
// si se deja en blanco pone como default 10 minutos
//
$conf = array( '_tabla'=>'sesiones',
'_BDUsuario'=>'hersan',
'_BDClave'=>'jasson',
'_BDHost'=>'localhost',
'_BDatos'=>'sesiones',
'_tiempo_sesion'=>'');
// creamos objeto sesion
$sesion = new MSesiones($conf);
// iniciamos la sesion
session_start();
if (!isset ($_SESSION['counter'])) {
$_SESSION['counter'] = 1;
}
$_SESSION['counter']++;
echo $_SESSION['counter'];
|
|
|
|
13/10/05, 04:10:24
|
#5 (permalink)
|
Registrado: nov 2002
Ubicación: Vilanova i la Geltrú
Mensajes: 1.942
|
Tema: Conexión y ejecución con MySQL
Versión: Cualquiera
Código PHP:
<?
/////////////////////////////////////////////////////////// // Classe conectar y trabajar con MySQL // // Realiado por: Sergio Sola (contacto@mirablog.com) // // El: 13 de octubre 2005 // // Licencia: GNU (http://www.gnu.org/) // //////////////////////////////////////////////////////
class conectarMySQL { //iniciamos variables //atributos para conectar la base de datos var $servidor; //servidor donde se encuentra la base de datos var $usuario; //nombre de usuario de la base de datos var $password; //password de la base de datos var $bd; //nombre de la base de datos a la que quieres acceder ////////////////////////////////////////////////////////////////////////// var $consulta; //aquí se guarda las consultas que se realizan var $enlace; //aquí se almacena la conexión con la bd, sí se ha producido var $resultado; //aquí se guardan los datos que se generen de una consulta //constructor, donde se inicializan las variables function conectarMySQL($servidor,$usuario,$password,$bd) { $this->servidor=$servidor; $this->usuario=$usuario; $this->password=$password; $this->bd=$bd; } //conectamos con la base de datos function conectar() { //se realiza la conexión a la base de datos if($this->enlace=mysql_connect($this->servidor,$this->usuario,$this->password)) { //se intenta acceder a la base de datos que deseeamos if(mysql_select_db($this->bd,$this->enlace)) { //Sí es correcta muestra mensaje (sí quieres lo quitas, sólo sirve para ver si funciona). echo "Conexión correcta"; } else { //Si falla muestra el mensaje que el error está al acceder a la base de datos echo "No se ha podido seleccionar la BD"; } } else { //Si falla la conexión con la base de datos se muestra el mensaje echo "No se ha podido conectar a la bd"; } } //function consultas a la bd function consultar($query) { //aquí se realizan las consultas a la base de datos $this->consulta=mysql_query($query,$this->enlace); } //obtener resultados de la consulta function obtendatos() { //aquí se obtienen los datos de la consulta $this->resultado=mysql_fetch_array($this->consulta); return $this->resultado; } //cerramos la conexión con la base de datos function cerrarconexion() { mysql_close($this->enlace); } //libera el contenido que se encuentra en el atributo function limpiaconsulta() { mysql_free_result($this->consulta); } }
//creamos el objeto con los datos de nuestra base de datos $obj=new conectarMySQL("SERVIDOR","USUARIO","PASSWORD","BASE DE DATOS"); //realizamos la conexión a la base de datos $obj->conectar(); //aquí realizamos la consulta que queramos $obj->consultar("select * from urls limit 0,10"); //por ejemplo la de mostrar 10 direcciones de una tabla llamada urls.. while($row=$obj->obtendatos()) { echo "<br><a href=".$row['url'].">".$row['title']."</a>"; } //limpiamos la consulta $obj->limpiaconsulta(); //cerramos la conexión... $obj->cerrarconexion(); ?>
Les dejo un código que he hecho hoy en el trabajo, estoy empezando con POO, y creo que es un buen ejemplo para ver como trabajar con bases de datos y POO, es fácil de usar, y a mi no me ha dado ningún problema, sí tenéis alguna duda, pergutarme.
|
|
|
|
16/01/06, 03:33:54
|
#6 (permalink)
|
Registrado: sep 2003
Ubicación: Oviedo
Mensajes: 844
|
Referencias de atributos entre clases
Pregunta: ¿Como funcionan las referencias de los atributos entre clases?
Respuesta: El siguiente ejemplo es la actualizacion de un atributo de una clase A a traves de otra clase B.
Código PHP:
class A{
var $vblA=0;
function A($num){
$this->vblA=$num;
}
function &getvbl(){
$r=&$this->vblA;
return $r;
}
function setvlb($num){
$this->vblA=$num;
}
}
class B{
var $miarray=null;
function B(){
for($i=0;$i<5;$i++){
$this->miarray[]=new A($i);
}
}
function prueba($i){
$elemento=$this->getElemento($i);
echo 'Elemento antes de actualizar: '.$elemento->getvbl().'<br>';
$elemento->setvlb(1000);
echo 'Elemento despues de actualizar: '.$elemento->getvbl().'<br>';
echo 'Comprobacion con array ya actualizado: '.$this->miarray[$i]->getvbl();
}
function getElemento($i){
$retorno=null;
for($j=0;$j<count($this->miarray);$j++){
if($i==$j){
$retorno=$this->miarray[$j];
}
}
return $retorno;
}
}
$b=new B();
$b->prueba(1);
|
|
|
|
22/03/06, 13:58:36
|
#7 (permalink)
|
Registrado: ago 2005
Mensajes: 263
|
Tema: Clase conexión a Base de Datos
Pregunta: ¿Como puedo conectarme a Mysql y/o Oracle?
Respuesta:
* $host: El host de la BD de MySQL, en caso de utilizar BD Oracle el host tiene que ir vacío ya que el número de parámetros en el constructor seguirán siendo los mismos.
* $user: El usuario de la base de datos.
* $pass: El password de la base de datos.
* $db: En MySQL este parámetro tendrá el nombre del esquema existente en MySQL al que queremos conectar, el nombre de la BD. En caso de ser Oracle, $db tendrá el nombre que se ha configurado en el TNSNAMES.ORA para la conexión a Oracle.
* $tipo_db: Esta variable es la que decide que funciones utilizarán los métodos, si las de Oracle o las de MySQL. Los 2 posibles valores que podrá tener son: 0 = MySQL y 1 = Oracle.
Código PHP:
function __construct($host,$user,$pass,$db,$tipo_db) { $this->host=$host; $this->user=$user; $this->pass=$pass; $this->db=$db; $this->tipo_db=$tipo_db; //MySQL if($this->tipo_db==0) { $this->conexion = mysql_connect($host, $user, $pass); if (!$this->conexion) { die('Sin conexión : ' . mysql_error()); } $db_selected = mysql_select_db($db, $this->conexion); if (!$db_selected) { die ('No se puede usar la base de datos seleccionada: ' . mysql_error()); } } //Oracle if($this->tipo_db==1) { $this->conexion = OCILogon($user,$pass,$db); if (!$this->conexion) { $mensaje = "Mensaje de Error: [" . OCIError($this->conexion) . "]"; return $mensaje; exit; } else { return $this->conexion; } } }
Podemos observar también que nada más comenzar a codificar el constructor asignamos valores a las propiedades de la clase con los parámetros que recibe, esto es necesario para que funcione el método autonumerico() que verémos más adelante.
El método lista que recibe como parámetro el string de la sentencia SQL que queremos consultar a la BD devuelve en ambos casos, si es MySQL u Oracle, un array bidimensional en la que la primera dimensión es el nombre de las columnas y la segunda los valores que contiene cada columna. Y la forma de consultar la columna de un registro en concreto sería: $rs["NombreColumna"][NumeroRegistro];
Código PHP:
function lista($sentencia) { //MySQL if($this->tipo_db==0) { $arr = array(); $col=0; $seleccion = mysql_query | |