Foro oficial de PHP

pues el PHP no fue el culpable :p

PHP recibia las variables como se muestran en los ejemplos dados (visto gracias a firefox y firebug ;)), el problema entonces era de Flash xD

ahora, el problema en el Flash esta en la linea del URLLoaderDataFormat, esta TEXT y debe ser VARIABLES, solo es cosa de cambiarlo y ya :p

afortunadamente estaba el .fla :)

saludos

Muchas gracias por la ayuda. Por fin con lo que me recomendó hacer por MP se pudo traer perfectamente los textos desde Flash y combinarlos con los textos con tildes en PHP y ambos se muestran correctamente.

PHP:
$contact_name = utf8_decode($_POST['name']);
$contact_email = utf8_decode($_POST['email']);
$contact_direc = utf8_decode($_POST['direc']);
$contact_tele = utf8_decode($_POST['tele']);
$contact_pais = utf8_decode($_POST['pais']);
$contact_ciudad = utf8_decode($_POST['ciudad']);
$contact_message = utf8_decode($_POST['msg']);
$contact_proyecto = utf8_decode($_POST['proye']);
 
Navegando por la web me encontre con esto,
http://www.codigogeek.com/2009/06/04/descubre-si-leyeron-el-mail-que-enviaste-con-whoreadme/
la pregunta es como podria hacerlo yo en un sitio web, entiendo que necesito una imagen alojada en el hosting que se va a enlazar en el email usando codigo html, pero que mas tengo q hacer, si alguien sabe se lo agradeceria.

algo como esto ?
<img src="midominio/imagenes/milogo.php?suscriptor=34332">

o como monitoreo los accesos a una imagen en el servidor web?
 
Bueno ya tengo una idea de como hacerlo, solo creo un archivo php con el siguiente codigo
<?
//cambiar a leido
//id correo
//id contenido
//validar
//..
$imageFileName=’nombre-imagen.gif’;
header(“Content-type: image/gif”);
readfile($imageFileName);
?>

y en el correo mando en la etiqueta <img la ruta del archivo php
 
Hola todos los laneros nuevamente :p
Hace.... por allá en el 2006 (según mis archivos) hice unas clases para manejar PostgreSQL y MySQL cambiando solo una palabrita. Pues bien con el pasar del tiempo las fui puliendo poquito a poquito y la verdad es que hoy en día esas clases son las que siempre utilizo para cualquier proyecto.

Yo sé que existen miles de clases que hacen lo mismo y FrameWorks que son EXCELENTES para hacer lo mismo que estoy haciendo, la única diferencia es que estas están completamente ajustadas al día a día de mis rutinas en los proyectos y hasta la fecha no he visto necesidad de más.

Quiero compartirlas y pues se escuchan toda clase de criticas, sugerencias, preguntas, aportes y demás :p

class.PoMyDB.php
PHP:
<?php

/* vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2: */

/**
 * Clase controladora de las clases
 * para la conección a las Bases de Datos
 *
 * @category   Database
 * @package    PoMyDB
 * @author     Julian Lasso <julian.lasso@gmail.com>
 * @copyright  2006
 * @license    GPL
 * @version    0.9.8
 * @name       PoMyDB
 * @link       http://www.sitioficial.com/
 */
class PoMyDB {

  /**
   * Nombre o IP de la maquina donde esté el servidor de la DB
   *
   * @var string
   * @access private
   */
  private $host;

  /**
   * Login del usuario
   *
   * @var string
   * @access private
   */
  private $usuario;

  /**
   * Contraseña del usuario
   *
   * @var string
   * @access private
   */
  private $password;

  /**
   * Nombre de la DB
   *
   * @var string
   * @access private
   */
  private $DB;

  /**
   * Puerto de conección a la DB
   *
   * @var string
   * @access private
   */
  private $puerto;

  /**
   * Clase de Base de Datos MySQL_4, MySQL_4_5 ó PostgreSQL
   *
   * @var string
   * @access private
   */
  private $TipoDB;

  /**
   * Objeto de la DB a utilizar para las demás clases
   *
   * @var string
   * @access private
   */
  private $odb;

  /**
   * Tabla a utilizar en el guardado, modificación o borrado
   *
   * @var string
   * @access private
   */
  private $tabla;

  /**
   * Array asociativo con llaves (campos) y sus valores
   *
   * @var array
   * @access private
   */
  private $camdat;

  /**
   * Variable que guarda los sentencias generadas
   *
   * @var string
   * @access private
   */
  private $sql;

  /**
   * Array asociativo con las llaves primarias y sus datos para el borrado
   *
   * @var string
   * @access private
   */
  private $llaves;

  /**
   * Constructor de la clase
   *
   * @access public
   * @param string $host - Nombre o IP de la maquina donde esté el servidor de la DB,
   *                          por defecto localhost
   * @param string $usuario - Login del usuario
   * @param string $password - Contraseña del usuario
   * @param string $DB - Nombre de la DB
   * @param string $TipoDB - Base de Datos a la que se va a conectar MySQL_4, MySQL_4_5,
   *                        mysql ó PostgreSQL
   * @param int $puerto - Puerto de conección a la DB, por defecto es 3306 [opcional]
   * @return void
   */
  public function __construct($host,$usuario,$password,$DB,$TipoDB,$puerto=null) {
    $this->host = $host;
    $this->usuario = $usuario;
    $this->password = $password;
    $this->DB = $DB;
    $this->TipoDB = $TipoDB;

    if(@$puerto)
      $this->puerto = $puerto;
    elseif($TipoDB == "MySQL" or $TipoDB == "MySQLi")
      $this->puerto = 3306;
    elseif($TipoDB == "PostgreSQL")
      $this->puerto = 5432;

    include_once("class.".$this->TipoDB.".php");
    $this->odb = new $this->TipoDB($this->host,$this->usuario,$this->password,$this->DB,$this->puerto);
  } // fin __construct()

  /**
   * Destructor de la clase
   *
   * @access public
   * @return void
   */
  public function __destruct() {
    unset($this->host,$this->usuario,$this->password,$this->DB,$this->puerto,$this->TipoDB,$this->odb,$this->tabla,$this->camdat,$this->sql,$this->llaves);
  } // fin __destruct()

  /**
   * Crea una conección a la DB
   *
   * @access public
   * @return bool
   */
  public function conectar() {
    return $this->odb->conectar();
  } // fin conectar()

  /**
   * Selecciona una DB dada
   *
   * @access public
   * @return bool
   */
  public function seleccionar_db($DB=null) {
    return $this->odb->seleccionar_db($DB);
  } // fin seleccionar_db()

  /**
   * Libera los resultados de la ultima consulta
   *
   * @access public
   * @return void
   */
  public function liberar_resultados() {
    $this->odb->liberar_resultados();
  } // fin liberar_resultados()

  /**
   * Cierra la conección a la DB
   *
   * @access public
   * @return bool
   */
  public function desconectar() {
    return $this->odb->desconectar();
  } // fin desconectar()

  /**
   * Ejecuta una consulta SQL en la DB
   *
   * @access public
   * @param string $sql - Sentencia SQL
   * @return bool
   */
  public function consultar($sql) {
    //echo $this->sql."<br>";
    return $this->odb->consultar($sql);
  } // fin consultar()

  /**
   * Resultados linea a linea
   * NUM = respuesta en matriz numerica
   * ASO = respuesta en matriz asociativa
   *
   * @access public
   * @param string $metodo - Metodo por el cual se va a dar la respuesta NUM o ASO
   * @param source $resultado - Respuesta de una consulta SQL para sacar
   *                               las lineas [opcional]
   * @return array
   */
  public function resultado($metodo,$resultado=null) {
    return $this->odb->resultado($metodo,$resultado);
  } // fin resultado()

  /**
   * Número de resultados en la ultima consulta
   *
   * @access public
   * @return int
   */
  public function numero_resultados() {
    return $this->odb->numero_resultados();
  } // fin numero_resultados()

  /**
   * Número campos en el resultado
   *
   * @access public
   * @return int
   */
  public function numero_campos() {
    return $this->odb->numero_campos();
  } // fin numero_campos()

  /**
   * Errores generados en la DB
   *
   * @access public
   * @return mixed
   */
  public function error() {
    return $this->odb->error();
  } // fin error()

  /**
   * Información de la versión del servidor de la DB
   *
   * @access public
   * @return string
   */
  public function info_version() {
    return $this->odb->info_version();
  } // fin info_version()

  /**
   * Hace ping a la conección establecida y si no reacciona,
   * intenta crear de nuevo la conección
   *
   * @access public
   * @return bool
   */
  public function ping() {
    return $this->odb->ping();
  } // fin ping()

  /*********************************************************/
  /*                                                       */
  /* Funciones publicas o privadas propias de "PoMyDB"     */
  /* Estas funciones no hacen referencia a ninguna función */
  /* de las clases MySQL, MySQLi ó PostgreSQL              */
  /* solo hacen referencia a funciones de "PoMySQL"        */
  /*                                                       */
  /*********************************************************/

  /**
   * Guarda un registro con los datos que han pasados
   *
   * @param string $tabla - Tabla en la que se guardaran los datos
   * @param array $camdat - Array asociativo con llaves como campos
   *                           y sus valores como valores para cada campo
   * @access public
   * @return bool
   */
  public function guardar($tabla,$camdat) {
    $this->tabla = $tabla;
    $this->camdat = $camdat;
    $this->sql_guardar();
    //echo $this->vr_sql."<BR>";
    $estado = $this->consultar($this->sql);
    return $estado;
  } // Fin guardar()

  /**
   * Construye la sentencia SQL para la inserción
   * de los datos
   *
   * @access private
   * @return void
   */
  private function sql_guardar() {
    /* creamos el inicio de la consulta */
    $this->sql = "INSERT INTO " . $this->tabla . " (";
    /*----------------------------------*/
    /* agregamos los campos */
    foreach ($this->camdat as $key => $val) {
      $this->sql .= $key . ",";
    }
    /*----------------------*/
    /* borramos la ultima "," */
    $longitud = strlen($this->sql); //hallamos la lomgitud
    $this->sql = substr($this->sql, 0, $longitud-1) . ") VALUES (";
    /*------------------------*/
    /* agregamos los valores */
    foreach ($this->camdat as $key => $val) {
      $this->sql .= $val . ",";
    }
    /*-----------------------*/
    /* borramos la ultima "," y también cerramos */
    $longitud = strlen($this->sql); //hallamos la lomgitud
    $this->sql = substr($this->sql, 0, $longitud-1) . ")";
    /*-------------------------------------------*/
  } // Fin sql_guardar()

  /**
   * Borra un registro con los datos pasados
   *
   * @param  $tabla string
   * @param  $llaves array
   * @access public
   * @return bool
   */
  public function borrar($tabla,$llaves) {
    $this->tabla = $tabla;
    $this->camdat = $llaves;
    $this->sql_borrar();
    $estado = $this->consultar($this->sql);
    return $estado;
  } // Fin borrar()

  /**
   * Construye la sentencia SQL para el borrado
   * de un registro
   *
   * @access private
   * @return void
   */
  private function sql_borrar() {
    /* Apertura de la sentencia */
    $this->sql = "DELETE FROM " . $this->tabla . " WHERE ";
    /*--------------------------*/
    /* organizamos los parametros de borrado */
    foreach($this->camdat as $key => $val) {
      $this->sql .= $key . "=" . $val . " AND ";
    }
    /*---------------------------------------*/
    /* eliminamos el ultimo AND */
    $long = strlen($this->sql);
    $this->sql = substr($this->sql, 0, $long-5);
    /*--------------------------*/
  } // Fin sql_borrar()

  /**
   * Modifica un registro con los datos pasados
   *
   * @param  $tabla string
   * @param  $llaves array
   * @param  $camdat array
   * @access public
   * @return bool
   */
  public function modificar($tabla,$llaves,$camdat) {
    $this->tabla = $tabla;
    $this->llaves = $llaves;
    $this->camdat = $camdat;
    $this->sql_modificar();
    $estado = $this->consultar($this->sql);
    return $estado;
  } // Fin modificar()

  /**
   * Construye la sentencia SQL para la modificación
   * de un registro
   *
   * @access private
   * @return void
   */
  private function sql_modificar() {
    /* Apertura de la sentencia */
    $this->sql = "UPDATE " . $this->tabla . " SET ";
    /*--------------------------*/
    /* Organicacion de datos a modificar */
    foreach ($this->camdat as $key => $val) {
      $this->sql .= $key . "=" . $val . ", ";
    }
    /*-----------------------------------*/
    /* Borramos la ultima "," */
    $long = strlen($this->sql);
    $this->sql = substr($this->sql, 0, $long-2) . " WHERE ";
    /*------------------------*/
    /* Organizacion de las llaves */
    foreach ($this->llaves as $key => $val) {
      $this->sql .= $key . "=" . $val . " AND ";
    }
    /*----------------------------*/
    /* Borramos el ultimo AND */
    $long = strlen($this->sql);
    $this->sql = substr($this->sql, 0, $long-5);
    /*------------------------*/
  } // Fin sql_modificar()

  /**
   * Resultados en un array numerico y su segundo nivel numero o asiciativo
   * NUM = respuesta en matriz numerica
   * ASO = respuesta en matriz asociativa
   *
   * @access public
   * @param string $sql - Sentencia SQL
   * @param string $metodo - Metodo por el cual se va a dar la respuesta NUM o ASO
   * @return array ó false
   */
  public function resultado_array($sql,$metodo) {
    $this->consultar($sql);
    $bool = $this->numero_resultados();
    if($bool == 0) return false;
    $n = 0;
    while($fila = $this->resultado($metodo)) {
      foreach($fila as $key => $val) {
        $respuesta[$n][$key] = $val;
      }
      $n++;
    }
    return $respuesta;
  } // Fin resultado_array()

  public function calcular_numero_siguiente($tabla,$campo,$where=null) {
    $where = ($where == null) ? '' : 'WHERE '.$where ;
    $sql = "SELECT (MAX($campo) + 1) FROM $tabla $where";
    $respuesta = $this->resultado_array($sql,"NUM");
    if($respuesta[0][0] == NULL) $respuesta[0][0] = 1;
    return $respuesta[0][0];
  } // fin calcular_numero_siguiente()

  public function sql() {
    return $this->sql;
  } // fin sql()
} // fin PoMyDB()
?>

class.MySQL.php
PHP:
<?php

/* vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2: */

/**
 * Clase controladora de las funciones mysql (MySQL 4.x.x)
 *
 * @category   Database
 * @package    PoMyDB
 * @author     Julian Lasso <julian.lasso@gmail.com>
 * @copyright  2006
 * @license    GPL
 * @version    0.5.3
 * @name       MySQL
 * @link       http://www.sitioficial.com/
 */
class MySQL {

  /**
   * Nombre o IP de la maquina donde esta el servidor de la DB
   *
   * @var string
   * @access private
   */
  private $host;

  /**
   * Login del usuario
   *
   * @var string
   * @access private
   */
  private $usuario;

  /**
   * Contraseña del usuario
   *
   * @var string
   * @access private
   */
  private $password;

  /**
   * Nombre de la DB
   *
   * @var string
   * @access private
   */
  private $DB;

  /**
   * Puerto de coneccion a la DB, por defecto es 3306
   *
   * @var integer
   * @access private
   */
  private $puerto;

  /**
   * Variable que controla la coneccion
   *
   * @var string
   * @access private
   */
  private $conex;

  /**
   * Variable que guarda los resultados de la ultima consulta
   *
   * @var string
   * @access private
   */
  private $resultado;

  /**
   * Constructor de la clase
   *
   * @access public
   * @param string $host - Nombre o IP de la maquina donde esta el servidor de la DB,
   *                          por defecto localhost
   * @param string $usuario - Login del usuario
   * @param string $password - Contraseña del usuario
   * @param string $DB - Nombre de la DB
   * @param int $puerto - Puerto de coneccion a la DB, por defecto es 3306 [opcional]
   * @return void
   */
  public function __construct($host,$usuario,$password,$DB,$puerto=3306) {
    $this->host = $host;
    $this->usuario = $usuario;
    $this->password = $password;
    $this->DB = $DB;
    $this->puerto = $puerto;
  } // fin __construct()

  /**
   * Destructor de la clase
   *
   * @access public
   * @return void
   */
  public function __destruct() {
    unset($this->host,$this->usuario,$this->password,$this->DB,$this->puerto,$this->conex,$this->resultado);
  } // fin __destruct()

  /**
   * Crea una coneccion a la Base de Datos
   *
   * @access public
   * @return bool
   */
  public function conectar() {
    $this->conex = mysql_connect($this->host,$this->usuario,$this->password) or die($this->error());
    if(@$this->conex) $this->seleccionar_db();
    return true;
  } // fin conectar()

  /**
   * Selecciona una Base de Datos dada
   *
   * @access public
   * @param string $DB - Nombre de la Base de Datos que se utilizar [Opcional]
   * @return bool
   */
  public function seleccionar_db($DB=null) {
    if(@$DB) $this->DB = $DB;
    if(!mysql_select_db($this->DB,$this->conex)) die($this->error());
    return true;
  } // fin seleccionar_db()

  /**
   * Libera los resultados de la ultima consulta
   *
   * @access public
   * @return void
   */
  public function liberar_resultados() {
    if(@$this->resultado) mysql_free_result($this->resultado);
  } // fin liberar_resultados()

  /**
   * Cierra la coneccion a la Base de Datos
   *
   * @access public
   * @return bool
   */
  public function desconectar() {
    $this->liberar_resultados();
    return mysql_close($this->conex);
  } // fin desconectar()

  /**
   * Ejecuta una consulta SQL en la Base de Datos
   *
   * @access public
   * @param string $sql - Sentencia SQL
   * @return bool
   */
  public function consultar($sql) {
    $this->resultado = mysql_query($sql,$this->conex);
    if($this->numero_resultados() > 0) $rsp = true;
    else $rsp = false;
    return $rsp;
  } // fin consultar()

  /**
   * Resultados linea a linea
   * NUM = respuesta en matriz numerica
   * ASO = respuesta en matriz asociativa
   *
   * @access public
   * @param char $metodo - Metodo por el cual se va a dar la respuesta NUM o ASO
   * @param source $resultado - Respuesta de una consulta SQL para sacar
   *                               las lineas [opcional]
   * @return array
   */
  public function resultado($metodo,$resultado=null) {
    if(@$resultado) $this->resultado = $resultado;
    switch($metodo) {
      case "NUM":
        $rsp = mysql_fetch_row($this->resultado);
        break;
      case "ASO":
        $rsp = mysql_fetch_assoc($this->resultado);
        break;
    }
    return $rsp;
  } // fin resultado()

  /**
   * Numero de resultados en la ultima consulta
   *
   * @access public
   * @return int
   */
  public function numero_resultados() {
    return mysql_num_rows($this->resultado);
  } // fin numero_resultados()

  /**
   * Numero campos en el resultado
   *
   * @access public
   * @return int
   */
  public function numero_campos() {
    return mysql_num_fields($this->resultado);
  } // fin numero_campos()

  /**
   * Errores generados en la Base de Datos
   *
   * @access public
   * @return string
   */
  public function error() {
    return (@$this->conex) ? mysql_error($this->conex) : false;
  } // fin error()

  /**
   * Informacion de la version del servidor de la Base de Datos
   *
   * @access public
   * @return string
   */
  public function info_version() {
    return mysql_get_server_info($this->conex);
  } // fin info_version()

  /**
   * Hace ping a la coneccion establecida y si no reacciona,
   * intenta crear de nuevo la coneccion
   *
   * @access public
   * @return bool
   */
  public function ping() {
    return mysql_ping($this->conex);
  } // fin ping()
} // fin class MySQL()
?>

class.MySQLi.php
PHP:
<?php

/* vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2: */

/**
 * Clase controladora de las funciones mysqli (MySQLi 5.x.x)
 *
 * @category   Database
 * @package    PoMyDB
 * @author     Julian Lasso <julian.lasso@gmail.com>
 * @copyright  2006
 * @license    GPL
 * @version    0.0.9
 * @name       MySQLi
 * @link       http://www.sitioficial.com/
 */
class MySQLi {

  /**
   * Nombre o IP de la maquina donde esta el servidor de la DB
   *
   * @var string
   * @access private
   */
  private $host;

  /**
   * Login del usuario
   *
   * @var string
   * @access private
   */
  private $usuario;

  /**
   * Contraseña del usuario
   *
   * @var string
   * @access private
   */
  private $password;

  /**
   * Nombre de la Base de Datos
   *
   * @var string
   * @access private
   */
  private $DB;

  /**
   * Puerto de coneccion a la Base de Datos, por defecto es 3306
   *
   * @var integer
   * @access private
   */
  private $puerto;

  /**
   * Variable que controla la coneccion
   *
   * @var string
   * @access private
   */
  private $conex;

  /**
   * Variable que guarda los resultados de la ultima consulta
   *
   * @var string
   * @access private
   */
  private $resultado;

  /**
   * Constructor de la clase
   *
   * @access public
   * @param string $host - Nombre o IP de la maquina donde esta el servidor de la DB,
   *                          por defecto localhost
   * @param string $usuario - Login del usuario
   * @param string $password - Contraseña del usuario
   * @param string $DB - Nombre de la DB
   * @param int $puerto - Puerto de coneccion a la DB, por defecto es 3306 [opcional]
   * @return void
   */
  public function __construct($host,$usuario,$password,$DB,$puerto=3306) {
    $this->host = $host;
    $this->usuario = $usuario;
    $this->password = $password;
    $this->DB = $DB;
    $this->puerto = $puerto;
  } // fin __construct()

  /**
   * Destructor de la clase
   *
   * @access public
   * @return void
   */
  public function __destruct() {
    unset($this->host,$this->usuario,$this->password,$this->DB,$this->puerto,$this->conex,$this->resultado);
  } // fin __destruct()

  /**
   * Crea una coneccion a la Base de Datos
   *
   * @access public
   * @return bool
   */
  public function conectar() {
    $this->conex = mysqli_connect($this->host,$this->usuario,$this->password,$this->DB,$this->puerto) or die($this->error());
    return true;
  } // fin conectar()

  /**
   * Selecciona una Base de Datos dada
   *
   * @access public
   * @param string $DB - Nombre de la Base de Datos que se utilizar [Opcional]
   * @return bool
   */
  public function seleccionar_db($DB=null) {
    if(@$DB) $this->DB = $DB;
    if(!mysqli_select_db($this->conex,$this->DB)) die($this->error());
    return true;
  } // fin seleccionar_db()

  /**
   * Libera los resultados de la ultima consulta
   *
   * @access public
   * @return void
   */
  public function liberar_resultados() {
    if(@$this->resultado) mysqli_free_result($this->resultado);
  } // fin liberar_resultados()

  /**
   * Cierra la coneccion a la Base de Datos
   *
   * @access public
   * @return bool
   */
  public function desconectar() {
    $this->liberar_resultados();
    return mysqli_close($this->conex);
  } // fin desconectar()

  /**
   * Ejecuta una consulta SQL en la Base de Datos
   *
   * @access public
   * @param string $sql - Sentencia SQL
   * @return bool
   */
  public function consultar($sql) {
    $this->resultado = mysqli_query($this->conex,$sql);
    if($this->numero_resultados() > 0) $rsp = true;
    else $rsp = false;
    return $rsp;
  } // fin consultar()

  /**
   * Resultados linea a linea
   * NUM = respuesta en matriz numerica
   * ASO = respuesta en matriz asociativa
   *
   * @access public
   * @param char $metodo - Metodo por el cual se va a dar la respuesta NUM o ASO
   * @param source $resultado - Respuesta de una consulta SQL para sacar
   *                               las lineas [opcional]
   * @return array
   */
  public function resultado($metodo,$resultado=null) {
    if(@$resultado) $this->resultado = $resultado;
    switch($metodo) {
      case "NUM":
        $rsp = mysqli_fetch_row($this->resultado);
        break;
      case "ASO":
        $rsp = mysqli_fetch_assoc($this->resultado);
        break;
    }
    return $rsp;
  } // fin resultado()

  /**
   * Numero de resultados en la ultima consulta
   *
   * @access public
   * @return int
   */
  public function numero_resultados() {
    return mysqli_num_rows($this->resultado);
  } // fin numero_resultados()

  /**
   * Numero campos en el resultado
   *
   * @access public
   * @return int
   */
  public function numero_campos() {
    return mysqli_num_fields($this->resultado);
  } // fin numero_campos()

  /**
   * Errores generados en la Base de Datos
   *
   * @access public
   * @return string
   */
  public function error() {
    return (@$this->conex) ? mysqli_error($this->conex) : false;
  } // fin error()

  /**
   * Informacion de la version del servidor de la Base de Datos
   *
   * @access public
   * @return string
   */
  public function info_version() {
    return mysqli_get_server_info($this->conex);
  } // fin info_version()

  /**
   * Hace ping a la coneccion establecida y si no reacciona,
   * intenta crear de nuevo la coneccion
   *
   * @access public
   * @return bool
   */
  public function ping() {
    return mysqli_ping($this->conex);
  } // fin ping()
} // fin class MySQLi()
?>

class.PostgreSQL.php
PHP:
<?php

/* vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2: */

/**
 * Clase controladora de las funciones pg (PostgreSQL 8.1.x)
 *
 * @category   Database
 * @package    PoMyDB
 * @author     Julian Lasso <julian.lasso@gmail.com>
 * @copyright  2006
 * @license    GPL
 * @version    0.3.2
 * @name       PostgreSQL
 * @link       http://www.sitioficial.com/
 */
class PostgreSQL {

  /**
   * Nombre o IP de la maquina donde esta el servidor de la DB
   *
   * @var string
   * @access private
   */
  private $host;

  /**
   * Login del usuario
   *
   * @var string
   * @access private
   */
  private $usuario;

  /**
   * Contraseña del usuario
   *
   * @var string
   * @access private
   */
  private $password;

  /**
   * Nombre de la DB
   *
   * @var string
   * @access private
   */
  private $DB;

  /**
   * Puerto de coneccion a la DB, por defecto es 5432
   *
   * @var integer
   * @access private
   */
  private $puerto;

  /**
   * Variable que controla la coneccion
   *
   * @var string
   * @access private
   */
  private $conex;

  /**
   * Variable que guarda los resultados de la ultima consulta
   *
   * @var string
   * @access private
   */
  private $resultado;

  /**
   * Constructor de la clase
   *
   * @access public
   * @param string $host - Nombre o IP de la maquina donde esta el servidor de
   *                       la Base de Datos, por defecto localhost
   * @param string $usuario - Login del usuario
   * @param string $password - Contraseña del usuario
   * @param string $DB - Nombre de la DB
   * @param int $puerto - Puerto de coneccion a la DB, por defecto es 5432 [opcional]
   * @return void
   */

  public function __construct($host,$usuario,$password,$DB,$puerto=5432) {
    $this->host = $host;
    $this->usuario = $usuario;
    $this->password = $password;
    $this->DB = $DB;
    $this->puerto = $puerto;
  } // fin __construct()

  /**
   * Destructor de la clase
   *
   * @access public
   * @return void
   */
  public function __destruct() {
    unset($this->host,$this->usuario,$this->password,$this->DB,$this->puerto,$this->conex,$this->resultado);
  } // fin __destruct()

  /**
   * Crea una coneccion a la Base de Datos
   *
   * @access public
   * @return bool
   */
  public function conectar() {
    $vl_config = "host=$this->host port=$this->puerto dbname=$this->DB user=$this->usuario password=$this->password";
    $this->conex = pg_connect($vl_config,$this->puerto) or die("No se pudo conectar a PostgreSQL");
    return true;
  } // fin conectar()

  /**
   * Selecciona una Base de Datos dada
   *
   * @access public
   * @param string $DB - Nombre de la DB que se utilizar [Opcional]
   * @return bool
   */
  public function seleccionar_db($DB=null) {
    if(@$DB) {
      $this->DB = $DB;
      $this->liberar_resultados();
      $this->desconectar();
      $this->conectar();
      return true;
    }
    return false;
  } // fin seleccionar_db()

  /**
   * Libera los resultados de la ultima consulta
   *
   * @access public
   * @return void
   */
  public function liberar_resultados() {
    if(@$this->resultado) pg_free_result($this->resultado);
  } // fin liberar_resultados()

  /**
   * Cierra la coneccion a la Base de Datos
   *
   * @access public
   * @return bool
   */
  public function desconectar() {
    $this->liberar_resultados();
    return pg_close($this->conex);
  } // fin desconectar()

  /**
   * Ejecuta una consulta SQL en la Base de Datos
   *
   * @access public
   * @param string $sql - Sentencia SQL
   * @return bool
   */
  public function consultar($sql) {
    $this->resultado = pg_query($this->conex,$sql);
    return $this->resultado;
  } // fin consultar()

  /**
   * Resultados linea a linea
   * NUM = respuesta en matriz numerica
   * ASO = respuesta en matriz asociativa
   *
   * @access public
   * @param char $metodo - Metodo por el cual se va a dar la respuesta NUM o ASO
   * @param source $resultado - Respuesta de una consulta SQL para sacar las lineas [opcional]
   * @return array
   */
  public function resultado($metodo,$resultado=null) {
    if(@$resultado) $this->resultado = $resultado;
    switch($metodo) {
      case "NUM":
        return pg_fetch_row($this->resultado);
        break;
      case "ASO":
        return pg_fetch_assoc($this->resultado);
        break;
    }
  } // fin resultado()

  /**
   * Numero de resultados en la ultima consulta
   *
   * @access public
   * @return int
   */
  public function numero_resultados() {
    return pg_num_rows($this->resultado);
  } // fin numero_resultados()

  /**
   * Numero campos en el resultado
   *
   * @access public
   * @return int
   */
  public function numero_campos() {
    return pg_num_fields($this->resultado);
  } // fin numero_campos()

  /**
   * Errores generados en la Base de Datos
   *
   * @access public
   * @return mixed
   */
  public function error() {
    return (@$this->conex) ? pg_result_error($this->resultado) : false;
  } // fin error()

  /**
   * Informacion de la version del servidor de la Base de Datos
   *
   * @access public
   * @return string
   */
  public function info_version() {
    $vl_temp = pg_version($this->conex);
    return $vl_temp['client'];
  } // fin info_version()

  /**
   * Hace ping a la coneccion establecida y si no reacciona,
   * intenta crear de nuevo la coneccion
   *
   * @access public
   * @return bool
   */
  public function ping() {
    return pg_ping($this->conex);
  } // fin ping()
} // fin PostgreSQL()
?>

Algunos ejemplos de uso (ejemplos de mi uso habitual)
PHP:
<?php
include 'PoMyDB/class.PoMyDB.php';

// $DB seria el nombre de la DB
// $TipoDB seria el tipo de DB - PostgreSQL, MySQL y MySQLi
$db = new PoMyDB($host, $usuario, $password, $DB, $TipoDB);
$db->conectar();

$sql = "SELECT id, usuario, password, nombre, apellidos FROM usuarios";

/**
 * en $rsp habría como respuesta false si no hay respuesta o un array del tipo asociativo
 * $rsp[0][campo] donde el primer array sería correspondiente a la línea de respuesta y
 * el segundo array correspondería al nombre del campo. Por ejemplo que nos respondieran
 * 2 lineas
 * [id]  [usuario]  [password]  [nombre]  [apellidos]
 *   1       JALF       12345    Julian        Lasso
 *   2       FLAJ       54321    Andres     Figueroa
 *
 * Entonces la forma de accesar a los resultados de la primera linea sería
 * $rsp[0]['id']
 * $rsp[0]['usuario']
 * $rsp[0]['password']
 * $rsp[0]['nombre']
 * $rsp[0]['apellidos']
 *
 * Y para la segunda línea...
 * $rsp[1]['id']
 * $rsp[1]['usuario']
 * $rsp[1]['password']
 * $rsp[1]['nombre']
 * $rsp[1]['apellidos']
 *
 * El metodo es ASO = asiciativo ó NUM = numerico
 */
$rsp = $db->resultado_array($sql,"ASO");

/**
 * Ejemplo de guardado de datos
 */
$camdat['id'] = $db->calcular_numero_siguiente('usuarios', 'id');
$camdat['usuario'] = "'XYZ'";
$camdat['password'] = "'LMJ'";
$camdat['nombre'] = "'Lastenia'";
$camdat['apellidos'] = "'Rojas del Totaso'";
$db->guardar('usuarios', $camdat);
unset($camdat);

/**
 * Ejemplo de modificación de datos
 */
$llaves['id'] = 1;
$camdat['nombre'] = "William";
$db->modificar('usuarios', $llaves, $camdat);
unset($llaves, $camdat);

/**
 * Ejemplo de borrado de datos
 */
$llaves['id'] = 2;
$db->borrar('usuarios', $llaves);

$db->desconectar();
?>
Espero que les sea de utilidad a alguien :p y pues las demás funciones que trae no las explico porque son algo... intuitivas, pero de todas maneras cualquier duda será resuelta con el mayor de los gustos o cualquier aporte se atenderá de muy buena forma =)
 
Muchas gracias por compartir.

Revisé las clases rapidamente y esta bien identadas y ordenadas....(como me gusta cuando no echan código por echar código) para MI ese tipo de cosas demuestran cuando una persona sabe lo que esta haciendo.

Pero pues tengo una pregunta....¿No veo por ningún lado que se puedan realizar consultas transaccionales??
Tienen esa opción???

Si bien las personas casi no utilizan ese tipo de querys pues la mayoria de aplicaciones no los requieren, algunos sistemas complejos que manejan varios hilos de ejecución y operaciones delicadas comparables con las de un cajero, es importante tener ese tipo de consultas para garantizar la integridad de la información.

Es una recomendación para hacer tus scripts mas completos y adaptables a las diferentes necesidades.
 
(...)Pero pues tengo una pregunta....¿No veo por ningún lado que se puedan realizar consultas transaccionales??
Tienen esa opción???(...)

Hola que tal, gracias por tus comentarios =)

Bueno en cuanto a lo de las consultas pues te cuento que.... estoy como medio perdido porque cuando necesito hacer una consulta multitabla (si es que a eso te refieres) la haría de la siguiente manera

PHP:
$sql = "SELECT usu_nombre AS usuario, his_observaciones AS observaciones
FROM usuarios, historial
WHERE usu_id = his_usu
ORDER BY usu_nombre";
$db->resultado_array($sql,"ASO"); 
foreach($vector as $indice => $valor) {
  echo $valor['usuario'].' -> '.$valor['observaciones'];
}

A eso te refieres¿? porque si de pronto te refieres a un guardar y que modifique todas las tablas relacionadas pues.... lo que pasa es que trabajo en PostgreSQL y MySQL y... siempre los diseños son de bases de datos relacionales y que cuando se actualiza el registro padre, se actualizan automáticamente los registros hijos. Y lo mismo pasaría al borrar el registro padre, automáticamente se van los registros hijos, por eso siempre manejamos un borrado físico y un borrado lógico donde el lógico siempre me pone en desactivado los registros que deseo borrar supuestamente y no se tienen en cuenta en las consultas que se realizan después.

¿esa es tu duda verdad? y sino ilustrame con un ejemplito bien chebre, puede que no me halla pasado pero puede pasar :p

Salu2
 
Hola que tal, gracias por tus comentarios =)

Bueno en cuanto a lo de las consultas pues te cuento que.... estoy como medio perdido porque cuando necesito hacer una consulta multitabla (si es que a eso te refieres) la haría de la siguiente manera

PHP:
$sql = "SELECT usu_nombre AS usuario, his_observaciones AS observaciones
FROM usuarios, historial
WHERE usu_id = his_usu
ORDER BY usu_nombre";
$db->resultado_array($sql,"ASO"); 
foreach($vector as $indice => $valor) {
  echo $valor['usuario'].' -> '.$valor['observaciones'];
}

A eso te refieres¿? porque si de pronto te refieres a un guardar y que modifique todas las tablas relacionadas pues.... lo que pasa es que trabajo en PostgreSQL y MySQL y... siempre los diseños son de bases de datos relacionales y que cuando se actualiza el registro padre, se actualizan automáticamente los registros hijos. Y lo mismo pasaría al borrar el registro padre, automáticamente se van los registros hijos, por eso siempre manejamos un borrado físico y un borrado lógico donde el lógico siempre me pone en desactivado los registros que deseo borrar supuestamente y no se tienen en cuenta en las consultas que se realizan después.

¿esa es tu duda verdad? y sino ilustrame con un ejemplito bien chebre, puede que no me halla pasado pero puede pasar :p

Salu2
de pronto es esto :p (ejemplo para MySQL)
http://dev.mysql.com/doc/refman/5.0/en/commit.html

por que "repites" variables? es mas, para que las declaras como de la clase? $host y compañia solo las usas para conectar a la BD y ya, que las necesitas para el metodo conectar, pues lo llamas en el constructor y ya, y te ahorras una linea despues :p o bien llamas el metodo conectar con las variables en lugar del constructor (asi no se "satura" con dos variables con lo mismo y no ha necesidad de hacerlas parte de las clases)

PHP:
$db = new PoMyDB($TipoDB); 
$db->conectar($host, $usuario, $password, $DB);

ya que usas PHP5 y "POO", convendria que usaras abstract y extends ;)
 

;) voy a echarle un ojito, porque esa parte si me parece interesante, como hacer una simulación de meter los datos y si todo sale bien entonces que la operación se ejecute. ¿si comprendí bien?

por que "repites" variables? es mas, para que las declaras como de la clase? $host y compañia solo las usas para conectar a la BD y ya, que las necesitas para el metodo conectar, pues lo llamas en el constructor y ya, y te ahorras una linea despues :p o bien llamas el metodo conectar con las variables en lugar del constructor (asi no se "satura" con dos variables con lo mismo y no ha necesidad de hacerlas parte de las clases)

La clase llega desde php4 donde POO no existía y daba la oportunidad de a la misma conexión, cambiarla de rumbo en caliente, pero como ahora solo es una conexión y si se quiere otra que creen otro objeto, entonces voy a modificar esa parte :p

ya que usas PHP5 y "POO", convendria que usaras abstract y extends ;)

Buen punto, dejame masticarlo; voy a mirar esa parte porque quedaría bien chebre aprovechar el potencial de la POO.

Salu2

PD: gracias por el aporte, y ahora más rato o mañana que las modifique las publico ;)
 
Ahhh ya se cual es, pero..... eso no se quedaría es mejor en JavaScript? o..... que pretendes en PHP ¿?
 
si queda mejor pero en la U me lo exigen en php, no se porque, en java sale facil, incluso en c, pero lo necesito en php pero no se como hacerlo... ayuda
 
si queda mejor pero en la U me lo exigen en php, no se porque, en java sale facil, incluso en c, pero lo necesito en php pero no se como hacerlo... ayuda

Tiene por lo menos el pseudo código del programa?

El ultimo paso es llevar todo al código y segun lo que entiendo ahí es donde usted tiene problemas, entonces me imagino que ya tiene algo elaborado previamente de donde se pueda partir.
 
en la web me encontre el codigo en pascal, no se si sea posible pasarlo a php, la verdad no se casi de php, aradeceria cualquier ayuda

program simondice;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
paso, contador, respuesta : integer;
numeros : array [1..10] of integer;

begin

randomize;
paso := 1;
Respuesta := 1;

while paso <= 10 do
begin
contador := 1;

while contador <= paso do
begin
numeros[paso] := random(4)+1;
writeln('Paso ', contador, ' ==> ', numeros[contador]);
contador := contador + 1;
end;

writeln;

writeln('Pulsa <RETURN> cuando estes listo...');

readln;

for contador:=1 to 30 do writeln;

contador := 1;

while contador <= paso do
begin
write('Introducir Paso ', contador,': ');
readln(respuesta);
if respuesta <> numeros[contador] then
begin
writeln('¡¡¡ HAS FALLADO !!!');
readln;
exit;
end
else contador := contador + 1;
end;
writeln;
writeln;
paso := paso +1;
end;
writeln('¡¡¡ HAS GANADO !!!');
end.
 
Hola, soy nueva en la comunidad y leyendo esto me causo mucha curiosidad que es eso de simón dice ............ alguien me explica ??? :)
 
en la web me encontre el codigo en pascal, no se si sea posible pasarlo a php, la verdad no se casi de php, aradeceria cualquier ayuda

program simondice;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
paso, contador, respuesta : integer;
numeros : array [1..10] of integer;

begin

randomize;
paso := 1;
Respuesta := 1;

while paso <= 10 do
begin
contador := 1;

while contador <= paso do
begin
numeros[paso] := random(4)+1;
writeln('Paso ', contador, ' ==> ', numeros[contador]);
contador := contador + 1;
end;

writeln;

writeln('Pulsa <RETURN> cuando estes listo...');

readln;

for contador:=1 to 30 do writeln;

contador := 1;

while contador <= paso do
begin
write('Introducir Paso ', contador,': ');
readln(respuesta);
if respuesta <> numeros[contador] then
begin
writeln('¡¡¡ HAS FALLADO !!!');
readln;
exit;
end
else contador := contador + 1;
end;
writeln;
writeln;
paso := paso +1;
end;
writeln('¡¡¡ HAS GANADO !!!');
end.


y que lenguaje manejas tu ?
el código q acabas de colocar si sabes lo q hace?
 

Los últimos temas