Buscar este blog

jueves, 12 de diciembre de 2013

APUNTES PHP

Funciones de PHP para MySQL

mysql_connect: Abre una conexión  a MySQL Server.
int mysql_connect(string[hostname [:port][:/path/to/socket]], string[username],string [password])
Esta función establece una conexión a un servidor mysql. Todos los argumentos son opcionales y los valores por defecto son localhost, el usuario dueño del proceso, sin password.
Si realizas dos veces una llamada a esta función con los mismos parámetros, devuelve el mismo identificador que para la llamada anterior.
Todas las conexiones terminan al terminar la ejecución del script, a no ser que se elimine la conexión llamando a la función mysql_close().

mysql_select_db: Selecciona una base de datos MySql.
int mysql_select_db(string database_name, int [identificador del link] )
Esta función asigna la base de datos activa en el servidor asociado al identificador del link.

mysql_query: Envía una consulta SQL a MySQL.
int mysql_query(string query, int [identificador del link] )
Envía una consulta a una base de datos activa en el servidor asociado al link que se especifica. En el caso de que no se especifique ninguna conexión abierta, la función intenta reestablecer una conexión con la función mysql_connect().
La función devuelve TRUE o FALSE si la consulta tiene éxito. Si el valor devuelto es TRUE, significa que la consulta puede ser realizada, no que existan datos que respondan a esa consulta.
Para consultar cuantas líneas responden a esa consulta, se puede utilizar la función mysql_affected_rows() y nos dirá cuantas líneas se han visto afectadas por la última operación INSERT, DELETE, REPLACE o UPDATE. En el caso de tratarse de una operación SELECT la función mysql_query() devuelve un identificador de resultado que se puede utilizar con la función mysql_result().

mysql_fetch_array: Introduce el resultado en un array asociativo.
array mysql_fetch_array(resource resultado, int [result type])
Esta función es una versión extendida de mysql_fetch_row(). Lo que hace es almacenar el resultado en un array indexado, almacenando así los datos en un índice asociativo utilizando los nombres de los campos como claves.
Si existen más de una columna con el mismo nombre, tendrá precedencia la última columna. Para acceder a las otras columnas con el mismo nombre, se debe indexar la columna o hacer un alias para ella.
Ejemplo:
select tabla1.precio as precio 1, tabla2.precio as precio2 from tabla1, tabla2
El segundo argumento, es una constante que puede tomar los siguientes valores.
MYSQL_ASSOC
MYSQL_NUM
MYSQL_BOTH

mysql_num_rows: Obtiene el número de líneas del resultado.
int mysql_num_rows(resource resultado)
Devuelve el número de líneas que contiene el parámetro resultado.

mysql_affected_rows: Obtiene el número de tuplas modificadas en la última operación MySql.
int mysql_affected_rows(resource resultado)
Devuelve el número de líneas afectadas por la última operación, INSERT, UPDATE o DELETE, asociadas con el identificador que se especifica.
Si no se especifica el link, se asume que se refiere al último.
Excepción: Si la última operación ha borrado todos los registros de una tabla, esta función devuelve 0.
Esta función no tiene efecto con ninguna operación SELECT, puesto que no modifican ninguna línea.

mysql_field_name: Devuelve el nombre de un campo especificado en un resultado.
string mysql_field_name(resource resultado, int field_index)
Devuelve el nombre del campo que se especifica, mediante el orden que ocupe dentro del resultado.

mysql_tablename: Obtiene el nombre de la tabla de un campo.
string mysql_tablename(resource resultado, int i)
Esta función devuelve el nombre de una tabla de un puntero de resultados que ha devuelto previamente la función mysql_num_rows.

mysql_close: Cierra la conexión MySql.
int mysql_close(resource resultado)
Esta función cierra la conexión permanente que mantiene el link. El parámetro es opcional. Si no se especifica, se cerrará la última conexión abierta.
Si una conexión no se cierra, el script la cierra automáticamente al terminar su ejecución.
Esta función no opera correctamente con las conexiones abiertas con la función mysql_pconnect().
-----------------------------------------------------------------------
$GLOBALS
Es un array asociativo que contiene las referencias a todas la variables que están definidas en el ámbito global del script. Los nombres de las variables son las claves del array.
Ejemplo
<?php
function test() {
    $foo = "variable local";
    echo '$foo en el ámbito global: ' . $GLOBALS["foo"] . "\n";
    echo '$foo en el ámbito simple: ' . $foo . "\n";
}
$foo = "Contenido de ejemplo";
test();
?>
El resultado del ejemplo sería algo similar a:
$foo en el ámbito global: Contenido de ejemplo
$foo en el ámbito simple: variable local

$_GET

Un array asociativo de variables pasado al script actual vía parámetros URL.

Ejemplo

<?php
echo 'Hola ' . $_GET["nombre"] . '!';
?>
Asumiendo que el usuario introduzco http://example.com/?nombre=Hannes
El resultado del ejemplo sería algo similar a:
Hola Hannes!
$_POST

Un array asociativo de variables pasadas al script actual a través del método HTTP POST.
Ejemplo

<?php
echo 'Hola ' . $_POST["nombre"] . '!';
?>
Asumiendo que el usuario envió por el método POST a través de un formulario nombre=Juan
El resultado del ejemplo sería algo similar a:
Hola Juan!

$_REQUEST
Un array asociativo que por defecto contiene el contenido de $_GET, $_POST.

$_FILES
En PHP, la capacidad de carga de archivos es posible usando la siguiente función: move_uploaded_file(filename, destination) - mueve un archivo a un destino especificado en el servidor. Cuando un archivo se carga utilizando la función move_uploaded_file(),este es rápidamente almacenado en una ubicación temporal en el servidor web.
Para mover el archivo a su destino final y manipular sus diferentes propiedades, se utiliza la súper matriz global PHP $ _FILES.
La matriz $ _FILES utiliza el valor de nombre proporcionado por <input type="file" name="uploadFile"/> (en este caso 'uploadFile') para identificar el archivo que se cargó.
Las entradas asociadas con la matriz $ _FILES se describen a continuación.
       * $_FILES['UploadFile']['tmp_name']: El directorio en el servidor web donde está temporalmente almacenado el archivo. Por defecto es el directorio uploadtemp ubicado en la carpeta de PHP.
       * $_FILES['uploadFile']['name'] : nombre del archivo en el sistema del usuario.
       * $_FILES['uploadFile']['size'] : tamaño del fichero en bytes.
       * $_FILES['uploadFile']['type']  : el tipo MIME del archivo.
       * $_FILES['uploadFile']['error']  : el código de error asociado a la carga de archivos (0 carga exitosa,1 - el archivo excede el máximo tamaño de carga,  2 - el archivo excede el tamaño máximo de archivo, 3 - fichero parcialmente cargado, 4 - No existe el fichero cargado)

$_SESSION

Es un array asociativo que contiene variables de sesión disponibles para el script actual

Funciones asociadas:

session_start() crea una sesión o reanuda la actual basada en un identificador de sesión pasado mediante una petición GET o POST

session_destroy() destruye toda la información asociada con la sesión actual. No destruye ninguna de las variables globales asociadas con la sesión, ni destruye la cookie de sesión. Para volver a utilizar las variables de sesión se debe llamar a session_start().

La función session_unset() libera todas las variables de sesión actualmente registradas.
-----------------------------------------------------------------------
Funciones básicas y ejemplos conexión con MySql:
mysql_connect
Se utiliza para conectarse con un servidor de bases de datos, se usa normalmente con 3 parámetros, el dominio del servidor, nombre de usuario y password.
Ejemplo:
$conexion = mysql_connect("localhost", "user","password");
mysql_select_db
Se utiliza para elegir la base de datos que queremos gestionar una vez que se ha realizado la conexión con mysql_connect..
Ejemplo:
$conexion = mysql_connect("localhost", "user","password");
mysql_select_db ("test");
mysql_query
Se utiliza para hacer “querys” o peticiones a la base de datos.
Ejemplo:
$conexion = mysql_connect("localhost", "user","password");
mysql_select_db ("test");
$consulta = "SELECT * FROM Departamentos";
$resultado = mysql_query($consulta);
mysql_fetch_array
Recupera una fila de resultados como un array asociativo, un array numérico o como ambos
Para leer las demás filas necesitamos un while y así leer todas las filas.

La sentencia mysql_fetch_array de php sirve para volcar datos, provenientes de una consulta mysql, dentro de un array php.
Ocurre que cuando hacemos una consulta a la base de datos, Mysql nos retorna el conjunto de datos que responde a nuestra consulta; pero éste conjunto de datos no es legible por php. Para poder manipular estos datos (leerlos y utilizarlos) necesitamos volcarlo en algún elemento manipulable por php, por ejemplo un array.
Entonces, por ejemplo, si hacemos una consulta que nos devuelve 10 filas de una tabla Mysql (conjunto de datos) y luego le aplicamos mysql_fetch_array; obtendremos cómo resultado un array multidimensional de 10 filas y tantas columnas haya en nuestro select.

Ejemplo:
  while ($fila = mysql_fetch_array($resultado))
<tr>  <td> <?php  echo $fila['CodDpto']; ?> </td>
 <td> <?php  echo $fila['Descripcion']; ?> </td></tr>
  mysql_close();
Cierra la conexión con la BD
----------------------------------------------------------
<?php
$dbhost = "localhost";
$dbusuario = "root";    
$dbpassword = "";
$db = "rtb_bd";
$conexion = 0;
//$GLOBALS Significa simplemente que es una variable que está disponible en cualquier parte del script. Cuando quiero utilizar una variable declarada fuera de una función
function conectarBD()
{ $GLOBALS['conexion'] = mysql_connect($GLOBALS['dbhost'], $GLOBALS['dbusuario'], $GLOBALS['dbpassword']);
    mysql_select_db($GLOBALS['db'], $GLOBALS['conexion']);}
function cerrarBD()
{ mysql_close($GLOBALS['conexion']);     }?>
----------------------------------------------------------------
Modificar PHP, MySQL
Para modificar un registro en una base de datos MySQL necesitamos establecer una conexión con el servidor.
$conexion = mysql_connect("servidor" , "usuario" , "password");
seleccionamos la base de datos en la cual se insertaran los datos.
mysql_select_db("bd",$conexion);
Creamos la consulta de modificación.
$sql = "UPDATE agenda SET nombre='$nombre',direccion='$direccion',"telefono='$telefono', email='$email'";
Para ejecutar la consulta necesitamos escribir el siguiente código.
mysql_query($sql);
Ejemplo Procesar un formulario mediante PHP e modificar un registro en MySQL
Para modificar un registro en concreto será necesario conocer el id del registro que vayamos a modificar. Este id puede ser pasado por URL por ejemplo de un listado de 10 empleados pasar por href  (URL) el id del empleado que queramos modificar
<a href='modificar.php?id=<?php echo $fila['CodEmp']?>'><img src="images/icono_modificar.gif"> </a>
Una vez tengamos el id ya podremos generar la pantalla para modificar.
<?php
//Establecimiento de la conexión
$conex = mysql_connect("localhost", "root", "bbdd")
or die("NO se pudo realizar la conexión");
// Selección de la base de datos
mysql_select_db("test")
or die("ERROR con la base de datos");
$id= $_GET['id'];
//Preparación y ejecución de la consulta
$consulta = "SELECT * FROM Empleados";
$consulta .= " WHERE CodEmp=$id";
$resultado = mysql_query($consulta);
$fila = mysql_fetch_array($resultado);?>
<form id="inserciones" action="modificarOk.php" method="POST">
<input type=hidden name="eCodEmp" value="<?php echo $fila['CodEmp']; ?>">
//hidden es para pasar un dato oculto al otro php
<table>
<tr>
<td>Nombre:</td>
<td><input type=text name="eNombre" value="<?php echo $fila['Nombre']; ?>"></td>
</tr>
<tr>
<td>Sueldo:</td>
<td><input type=text name="eSueldo" value="<?php echo $fila['Sueldo']; ?>"></td>
</tr>
<?php
$consulta2 = "SELECT * FROM Departamentos";
$resultado2 = mysql_query($consulta2);
?>
<tr>
<td>Departamento:</td> //Es un desplegable
<td>
<select id="CodDpto" name="eCodDpto">

<?php
                while($fila2 = mysql_fetch_array($resultado2))
                {
                ?>
<option value="<?php echo $fila2['CodDpto']; ?>"
<?php  if ($fila['CodDpto'] == $fila2['CodDpto']) echo "selected"; ?> ><?php echo $fila2['Descripcion']; ?> </option>
 
//Queremos que en el desplegable nos salga el departamento que tiene ese determinado empleado que queremos modificar. Por eso hacemos la comparación entre los códigos de dpto. que obtenemos del Select primero que contiene los datos del empleado con id=X  y otro select de donde ya sacaremos la descripción del departamento, en el momento que coincidan los códigos será ese el se pinte por defecto, eso se controla con el selected                                                                            
                <?
                }
                ?>            
</select>
</td>
 </tr>
</table>
<input type="submit" value="Modificar">
</form>
Una vez tenemos la pantalla de modificar con los datos del empleado a modificar ya podremos recoger todos esos datos y las modificaciones q el usuario haga del empleado y hacer un update de todos los datos.
<?php
  //Establecimiento de la conexión
  $conex = mysql_connect("localhost", "root", "bbdd")
        or die("NO se pudo realizar la conexi�n");
  // Selección de la base de datos
  mysql_select_db("test")
       or die("ERROR con la base de datos");
  //Preparación y ejecución de la consulta
  $codEmp = $_POST['eCodEmp'];
  $nombre = $_ POST ['eNombre'];
  $sueldo = $_ POST ['eSueldo'];
  $codDpto = $_ POST ['eCodDpto'];
  $consulta = "UPDATE Empleados SET Nombre='$nombre', Categoria='$categoria',      Sueldo='$sueldo', CodDpto='$codDpto'
 WHERE CodEmp=$codEmp";
 $resultado = mysql_query($consulta);
  if ($resultado)
      echo "<b>Empleado modificado!</b><br /><br />\n";
-------------------------------------------------------------------
Eliminar PHP, MySQL
Para eliminar un registro en una base de datos MySQL necesitamos establecer una conexión con el servidor.
$conexion = mysql_connect("servidor" , "usuario" , "password");
seleccionamos la base de datos en la cual se insertaran los datos.
mysql_select_db("bd",$conexion);
Creamos la consulta de eliminación.
$sql = "DELETE FROM tabla “;
Para ejecutar la consulta necesitamos escribir el siguiente código.
mysql_query($sql);
Ejemplo Procesar un formulario mediante PHP y eliminar el registro en MySQL
Previamente pasamos el id por URL del empleado a eliminar
<a href='eliminar.php?id=<?php echo $fila['CodEmp']?>'><img src="images/icono_modificar.gif"> </a>
Eliminar.php
<?php
  //Establecimiento de la conexión
  $conex = mysql_connect("localhost", "root", "bbdd")
        or die("NO se pudo realizar la conexi�n");
  // Selección de la base de datos
  mysql_select_db("test")
       or die("ERROR con la base de datos");
  //Preparación y ejecución de la consulta
  $codEmp = $_GET['id'];
  $consulta = "DELETE FROM Empleados WHERE CodEmp=$codEmp";
  $resultado = mysql_query($consulta);
  if ($resultado)
      header("Location: listado.php");
--------------------------------------------------------------------
BÚSQUEDAS PHP, MySQL
Para buscar un registro en una base de datos MySQL necesitamos establecer una conexión con el servidor.
$conexion = mysql_connect("servidor" , "usuario" , "password");
seleccionamos la base de datos en la cual se buscaran los datos.
mysql_select_db("bd",$conexion);
Creamos la consulta general
$sql="select * from tabla where condición '";
Y concatenamos con nuevas subconsultas para realizar la búsqueda dependiendo del valor a buscar
$sql  =  $sql  .  " WHERE campo LIKE '%$valor%'";
// concatena la consulta principal con la subconsulta
Las 2 búsquedas más convencionales son:
1. Buscar filas que contengan cierta palabra clave.
Para esto utilizamos el Operador Mysql LIKE
if ($campoBusqueda == 'categoria')   //campoBusqueda es un desplegable con las                    opciones por las que puede buscar
$sql  =  $sql  .  " WHERE Categoria LIKE '%$valor%'";  
 //valor es el input donde escribe el usuario
2. Buscar filas que coincidan exactamente con cierta palabra clave.
Para esto utilizamos el Operador Mysql de igualdad
if ($campoBusqueda == 'sueldo')
 $sql  =  $sql  .  " WHERE Sueldo = '$valor'";
Por último, para ejecutar la consulta necesitamos escribir el siguiente código.
mysql_query($sql);
----------------------------------------------------------
SESIONES
Las sesiones son una forma sencilla de almacenar datos para usuarios de manera individual usando un ID de sesión único. Esto se puede usar para hacer persistente la información de estado entre peticiones de páginas.
Lo primero que debemos hacer cuando el usuario introduzca su nombre y contraseña será comprobar que existen en la BD y todo es correcto almacenar el id_usuario y el nombre en variables de Sesión para poder usar esas variables en todas las páginas php de la aplicación.
Hay que tener en cuenta que cada vez que queramos usar esas variables habrá que iniciar sesión.
A continuación se detallan las funciones necesarias para trabajar con sesiones.
Para registrar una variable de sesión y establecer un valor usaremos $_SESSION["nombre_variable"].
En todas las páginas de nuestro sitio web donde necesitemos usar algún dato del usuario que ha iniciado sesión o mostrar alguna opción especial para el usuario deberemos añadir el siguiente código, siempre al principio del fichero (antes de cualquier etiqueta HTML de la página):
<?
  session_start();
?>
Con el procedimiento "session_start()" iniciaremos la sesión, si ya está iniciada no hará nada.
Añadir un enlace para que el usuario pueda cerrar la sesión en cualquier momento
if (isset ($_SESSION["id_usuario"])){

echo "<b>Bienvenid@ " . $_SESSION['nombre_usuario'] . "  <a href='logout.php'>[Cerrar Sesion]</a></b>";
}
Uso de la función session_destroy para cerrar la sesión en PHP
Crearemos un fichero de texto plano sin formato con el siguiente contenido, guardándolo con el nombre "cerrarsesion.php" y lo subiremos a nuestro sitio FTP:
<?
  session_start();
  unset($_SESSION["id_usuario"]);
  unset($_SESSION["nombre_usuario"]);
  session_destroy();
  header("Location: index.php");
  exit;
?>
-------------------------------------------------------
Generar PDF con Dompdf
Vamos a ver cómo generar PDF's desde PHP empleando una librería llamada DomPDF.
Esta librería nos permite convertir un documento HTML a PDF, con lo cual es muy sencillo el generar cualquier documento PDF, simplemente generando la página HTML e indicándole a la librería que genere el documento PDF.
Lo primero que tendremos que hacer es cargar la librería, y a partir de ahí podremos generar el documento HTML que luego imprimiremos.
Véase el siguiente ejemplo de utilización de dicha librería:
<?php
# Cargamos la librería dompdf.
require_once 'lib/pdf/dompdf_config.inc.php';
# Contenido HTML del documento que queremos generar en PDF.
$html='
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Ejemplo de Documento en PDF.</title>
</head>
<body>
<h2>Ingredientes para la realización de Postres.</h2>
<p>Ingredientes:</p>
<dl>
<dt>Chocolate</dt>
<dd>Cacao</dd>
<dd>Azucar</dd>
<dd>Leche</dd>
<dt>Caramelo</dt>
<dd>Azucar</dd>
<dd>Colorantes</dd>
</dl>
</body>
</html>';
# Instanciamos un objeto de la clase DOMPDF.
$mipdf = new DOMPDF();
# Definimos el tamaño y orientación del papel que queremos.
# O por defecto cogerá el que está en el fichero de configuración.
$mipdf ->set_paper("A4", "portrait");
# Cargamos el contenido HTML.
$mipdf ->load_html(utf8_decode($html));
# Renderizamos el documento PDF.
$mipdf ->render();
# Enviamos el fichero PDF al navegador.
$mipdf ->stream('FicheroEjemplo.pdf');
?>
-----------------------------------------------------------------
Convertir Fechas PHP y MySQL
El formato usado en las tablas de MySQL para representar las fechas, es distinto al usado en muchos países, como por ejemplo España. Mientras que MySQL usa el formato AAAA/MM/DD (ejemplo 2013/08/08); aquí, como en muchos lugares se usa el formato DD/MM/AAAA (ejemplo 08/08/2013).
Bien, para poder introducir fechas en MySQL, recogidas en formularios a los usuarios por ejemplo, debemos convertirlas a formato MySQL; y lo mismo si queremos mostrar una fecha obtenida de una tabla MySQL en nuestra web.
La mejor forma de realizar una conversión entre la fecha que nos devuelve MySQL a nuestro formato es utilizando DATE_FORMAT de MySQL . La siguiente consulta nos devolvería la fecha con el formato DD/MM/AAAA, aunque podríamos indicarle que nos la devolviera como a nosotros nos interese.
mysql_query("SELECT DATE_FORMAT(campo_fecha,'%d/%m/%Y') FROM tabla", $conexión);
// El resultado será devuelto con el formato DD/MM/AAAA
Con este método obtendríamos una fecha del formato MySQL al nuestro. Pero no es la única.
Tenemos otra opción que nos valdría para convertir desde MySQL al nuestro, y desde el nuestro a MySQL:
//Cambiar fecha a MySQL(almacenar en BD). Formato fecha en MySQL
function obtenerFechaMySql($fecha)
{   list($day, $month, $year) = explode('/', $fecha);
    return "$year-$month-$day";}
En este caso, recogemos una variable $fecha con la fecha que ha introducido el usuario, o simplemente la que deseamos cambiar. Nos lista en las variables $dia $mes y $ano los valores resultantes de separar con la función ”explode” la variable $fecha. Una vez listadas las variables solo debemos montar la última variable $fecha a nuestro gusto.
OJO!! Como muchos sabréis  la función “explode” lee una cadena de texto y separa en un array (o en este caso nos lista por variable) los valores de esa cadena de texto usando un separador común, como puede ser un espacio ” “, o en este caso una barra “/”. Dicho esto, si la fecha introducida tiene el formato 08-08-2013 no funcionaria, con lo cual debemos avisar al usuario a introducir la fecha como nosotros queramos.
Para pasar de MySQL a nuestro formato, sabiendo de nuevo la separación en la fecha (que normalmente es /) usamos la misma función que antes, pero recogiendo en la variable $fecha el dato obtenido de la tabla.
//Leer de BD. Formato fecha española
function obtenerFecha($fechaMySql)
{  list($year, $month, $day) = explode('-', $fechaMySql);
    return "$day/$month/$year";}




No hay comentarios:

Publicar un comentario