Inicio

domingo, 9 de octubre de 2011

Clases en PHP

Lo que comenzó siendo un lenguaje de scripts, con el tiempo se ha convertido en un potente lenguaje de programación orientado a objetos POO. Este tipo de lenguajes utiliza los elementos clases y objetos como punto de partida de su estructura.
Para que podamos entender dichos conceptos pensemos en un programa que tenga que averiguar el dígito de seguridad de una cuenta corriente, formado por dos cifras.Lo más corriente es crear una función con un parámetro al que se le pase como argumento el número de la cuenta, y le devuelva los dígitos buscados.
Un desarrollo orientado a objetos pensaría en cada problema como una entidad única.Si pensamos que la cuenta corriente va asociado a una persona física o jurídica, podemos crear un procedimiento que identifique a esa persona y dentro de este proceso idear un método que calcule dichos dígitos.
Definición de clase
Una clase es un tipo de dato que contiene, en una misma estructura, variables y funciones.Es como una plantilla que nos permites construir objetos del mismo tipo. Sintáxis:

class blogg

{
function getTitulo()
   {

       return $this->titulo;
  }

}

Ejemplo de clase
Vamos a crear una clase para poder realizar una conexión a MySQL. Para comenzar vamos a crear una primera página (conexionclass.php) que contiene el módulo de clase, al que llamaremos desde otra página.
Código de la página conexionclass.php:

<?php
define ("SERVIDOR","localhost");
define ("USUARIO","root");
define ("PASS","");
define ("BASE","directorio");
class Conexion{
private $conn;
public function __construct()
    {
$this->conn=mysql_connect(SERVIDOR,USUARIO,PASS)
                    or die("Imposible conectar con ". SERVIDOR);
mysql_select_db(directorio,$this->conn) or die(directorio." no existe...");
    }
public function __destruct()
    {
mysql_close($this->conn);
    }
    public function consulta($sql)
    {
return mysql_query($sql,$this->conn);
    }
    public function elemento($id)
    {
$line=mysql_fetch_array($id);
return $line;
}
public function mensajeError()
    {
return mysql_error($this->conn);
}
public function numeroError(){
return mysql_errno($this->conn);
}
}
?>

Para comenzar declaramos las constantes con define para el servidor, usuario, password y base de datos.
A continuación creamos dos funciones la primera :

public function __construct()
    
Nos permite conectarnos a nuestra base de datos con los parámetros de la conexión. La segunda cierra la conexión
public function __destruct()


Creamos cuatro  más una para consulta, otra que nos devuelve la línea asociada al id que le pasemos, y dos más para el control de errores.

La segunda página invoca la clase y realiza la consulta sql:


<?php
include ("conexionclass.php");
$a=new Conexion();
$sql="select id,nombre,edad from example";
    $consu=$a->consulta($sql);
    $linea=$a->elemento($consu);
    while ($linea)
    {
          echo $linea[id]." ".$linea[nombre]." "."<br/>\n";
          $linea=$a->elemento($consu);
    }



?>


Para que el código funcione, necesitamos crear el objeto conexion esto se hace mediante la sentencia new Conexion(). En esa línea hemos creado por tanto una variable $a que contiene todas las funciones y propiedades de la clase conexion.Siempre que vayamos a llamar a una función de esa variable por ejemplo una consulta (recogida a su vez en $consu) tenemos que emplear el operador ->

$consu=$a->consulta($sql);
 $linea=$a->elemento($consu);




viernes, 30 de septiembre de 2011

Trabajando con los datos

Si se conoce un poco el estándar SQL , verá que no es complicado trabajar a través de PHP para efectuar consultas filtradas, actualizaciones, eliminación de datos, etc.

Por ejemplo supongamos que deseamos sacar datos ordenados por un criterio específico, digamos la edad. La solicitud en la línea de $query quedaría así:
$query = "SELECT * FROM example ORDER BY edad";

También pudiera darse la necesidad unos datos que ya están grabados. Para hacerlo, utilizamos el comando UPDATE. La sintaxis para esto es,


UPDATE "nombre_tabla" , SET "columna_1" = [nuevo valor] , WHERE {condición}

Así si desamos cambiar el nombre de Patxi por PATXI podríamos hacerlo de la forma siguiente:
<?php
require("conexion.php");
$peticion=mysql_query("UPDATE example SET nombre = 'PATXI' WHERE nombre = 'Patxi'");

if (!$peticion)
{
    die('No se ha podido realizar la actualización solicitada: ' .mysql_error());
}
$peticion=mysql_query("SELECT * FROM example WHERE nombre LIKE 'Patxi' AND edad LIKE '26'");

echo " Actualización realizada con éxito.";

echo "<table border='1'>";
echo "<tr><th>Id</th> <th>Nombre</th> <th>Edad</th> </tr>";

while($row = mysql_fetch_array($peticion)){
    // Presentamos los contenidos en una tabla
    echo "<tr><td>";
    echo $row['id'];
    echo "</td><td>";
    echo $row['nombre'];
    echo "</td><td>";
    echo $row['edad'];
    echo "</td></tr>";
}
  
echo "</table>";

mysql_close();
?>

domingo, 18 de septiembre de 2011

Consulta a datos con buscador

Una forma más usual y asequible para el usuario de poder localizar datos en la BD, sería mediante un buscador. Para ello vamos a seguir con nuestro ejemplo pero añadiéndole algunas modificaciones. Primero crearemos una página htm que nos sirva para recoger la petición y otra php (yo la he llamado buscar.php) que nos permita presentar los datos. En principio lo vamos a realizar de una forma fácil, evidentemente se le puede ir añadiendo otras funcionalidades para depurar mejor el código.
Primero el formulario:
<html>
<head<
<title><h2>Busqueda de datos</h2><hr></title>
</head>
<body>
<form action="buscar.php" method="post">
<label>Nombre:</label>
<input type="text" name="nombre">
<input type="submit"><input type="reset">
</form>
</body>
</html>

 Guárdelo con el nombre que desee. Y a continuación la página php:
<?php
require("conexion.php");
$nom=$_POST['nombre'];
$consulta="SELECT*FROM example WHERE nombre LIKE '$nom'";

$resultado=mysql_query($consulta) or die(mysql_error());
$num_rows = mysql_num_rows($resultado);
echo "Se han encontrado en total $num_rows nombres<br>";?>
<table>
      <tr>
        <th>Nombre</th>
        <th>Edad</th>
      </tr>
      <?php while ($rsEmp = mysql_fetch_assoc($resultado)) { ?>
      <tr>
        <td><?php echo $rsEmp['nombre']; ?></td>
        <td><?php echo $rsEmp['edad']; ?></td>
      
      </tr>
      <?php } ?>
    </table>
 Como podrá observar las únicas modificaciones las tenemos en las líneas en negrita, en donde recogemos en una variable $nom el valor que nos remite el formulario, este se lo pasamos a la petición $consulta siendo el resto como ya comenté en posts anteriores.Pruebe también los comodines como J% y verá que funciona perfectamente.

viernes, 16 de septiembre de 2011

Consulta con WHERE y LIKE

Siguiendo con los tipos de consulta que podemos realizar a nuestra BD , puede surgir la necesidad de filtrar la misma bajo ciertos criterios. Supongamos que deseamos recuperar aquellas entradas de nuestro ejemplo que cuyos nombre comiencen por la letra J. Necesitamos echar mano de la sintáxis SQL y emplear los operadores WHERE (donde) y LIKE(como). Veamos el ejemplo:
<html>
<head>
       <title>Petición a BD con WHERE</title>
</head>

<body>
Solicitud de nombre de personas que empiecen por la letra "J".<br>
<?php
//realizando la conexión
mysql_connect("localhost","root") or die(mysql_error());
mysql_select_db("directorio") or die(mysql_error());

//obteniendo un resultado específico de la tabla example
$resultado=mysql_query("SELECT * FROM example WHERE nombre Like 'J%'" ) or die(mysql_error());
$num_rows = mysql_num_rows($resultado);
echo "Se han encontrado en total $num_rows nombres<br>";
while($row = mysql_fetch_array($resultado)){
// Presentando los resultados

echo $row['nombre']." -> ".$row['edad']."<br>";
}

?>
</body>
</html>

He resaltado la sentencia en negrita para explicarla. Con la misma solicitamos todos aquellos datos de la tabla "donde" nombre sea "como" J más los datos que sigan.
Un resumen de estos comodines:
EjemploDescripción
LIKE 'A%'Todo lo que comience por A
LIKE '_NG'Todo lo que comience por cualquier carácter y luego siga NG
LIKE '[AF]%'Todo lo que comience por A ó F
LIKE '[A-F]%'Todo lo que comience por cualquier letra comprendida entre la A y la F
LIKE '[A^B]%'Todo lo que comience por A y la segunda letra no sea una B
Por último con la sentencia que reescribo más abajo contamos el número de filas que devuelve  la consulta:
$num_rows = mysql_num_rows($resultado);

Recuperando listado de datos

Supongamos ahora que deseamos realizar un listado por pantalla de todos los datos que tengamos en una tabla. Para ello y, utilizando los datos de nuestro ejemplo, vamos a presentar un ejemplo de como podemos hacerlo:
</head>
<body>
<?php
print "<p>".strftime("%A, %d de %B de %Y")."</p>";
mysql_connect("localhost", "root") or die(mysql_error());
echo "Conectado a  MySQL<br />";
mysql_select_db("directorio") or die(mysql_error());
echo "Conectado a BD directorio";
echo"<br>";
echo"<hr>";
echo"Datos de la petición a las ".date("H:i:s")."<br>";
// realizando la conexión
$query = "SELECT * FROM example";

$result = mysql_query($query) or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Nombre</th> <th>Edad</th> </tr>";

while($row = mysql_fetch_array($result)){
    // Presentamos los contenidos en una tabla
    echo "<tr><td>";
    echo $row['nombre'];
    echo "</td><td>";
    echo $row['edad'];
    echo "</td></tr>";
}
   
echo "</table>";

?>
</body>
</html>

He incluido algunos complementos para hacer la tabla más presentable.Por ejemplo la fecha actual en la cabecera:
print "<p>".strftime("%A, %d de %B de %Y")."</p>";
Después los códigos para la conexión a la base de datos y tabla del ejemplo:

mysql_connect("localhost", "root") or die(mysql_error());
echo "Conectado a  MySQL<br />";
mysql_select_db("directorio") or die(mysql_error());
echo "Conectado a BD directorio";

Conformamos la tabla de presentación, realizamos la petición con while... y presentamos los resultados:
$result = mysql_query($query) or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Nombre</th> <th>Edad</th> </tr>";

while($row = mysql_fetch_array($result)){
    // Presentamos los contenidos en una tabla
    echo "<tr><td>";
    echo $row['nombre'];
    echo "</td><td>";
    echo $row['edad'];
    echo "</td></tr>";
}
   
echo "</table>";

El resultado sería este:

 

sábado, 10 de septiembre de 2011

Insertando datos desde un formulario

El siguiente paso después de haber visto como acceder y leer datos de una BD en MySQL será estudiar como conseguir insertar datos mediante un formulario HTML. Para ello necesitaremos dos ficheros, el primero un archivo con el formulario necesario para recoger los datos puede ser este:
<html>
<head>
<title>Formulario HTML</title>
</head>
<body>
<form action="insert.php" method="post">
<label>Nombre:</label>
<input type="text" name="nombre_form">
<label>Edad: </label>
<input type="text" name="edad_form">
<input type="submit"><input type="reset">
</form>
</body>
</html>

El fichero insert.php nos va a hacer todo el procesamiento de insertar los datos generando los mensajes de errores pertinentes si hay algún fallo:
<?php
// Crear conexión a la Base de Datos
$conexion = mysql_connect("localhost","root");
if (!$conexion) {
die("Fallo la conexión a la Base de Datos: " . mysql_error());
}
//Seleccionar la Base de Datos a utilizar
$seleccionar_bd = mysql_select_db("directorio", $conexion);
if (!$seleccionar_bd) {
die("Fallo la selección de la Base de Datos: " . mysql_error());
}
//Tomar los campos provenientes del Formulario
$nombre = $_POST['nombre_form'];
$edad = $_POST['edad_form'];
// Insertar campos en la Base de Datos
$insertar = mysql_query("INSERT INTO example (nombre, edad)
VALUES ('{$nombre}', '{$edad}')", $conexion);
if (!$insertar) {
die("Fallo en la insercion de registro en la Base de Datos: " . mysql_error());
}
// Cerrar conexión a la Base de Datos
mysql_close($conexion);
echo "Se ha insertado el siguiente dato NOMBRE: ".$nombre." EDAD: ".$edad." años."
?>

Es similar al código visto en post anterior salvo que recogemos los valores de las variables $_POST.

Recuperando datos de una tabla

En el presente post vamos a ver como recuperar datos de una tabla de nuestra base de datos. La lógica sigue siendo la misma sólo que con algunos añadidos. Primero debemos conectarnos a MySQL, después seleccionar la base que nos interesa. Realizamos la petición con una sentencia SQL presentamos los datos por pantalla.

Ejemplo:

<?php
// Conexión a MySQL
mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("directorio") or die(mysql_error());

// Recuperando datos de la tabla example
$resultado = mysql_query("SELECT * FROM example")
or die(mysql_error()); 

//almacenamos la petición en la variable $row
$row = mysql_fetch_array( $resultado );
// Presentamos los datos

echo "Nombre: ".$row['nombre'];
echo " Edad: ".$row['edad'];

?>