En muchos de nuestros formularios, tal vez hemos querido manejar la opción de que el usuario pueda subir un archivo (imágen, por decir) a nuestro servidor. Normalmente podríamos manejar esto con HTML y PHP … pero que tal una alternativa donde no se refresque la página?. Utilizaremos una aplicación hecha con JQuery llamada AjaxFileUpload.

jQuery is a fast, concise, JavaScript Library

that simplifies how you traverse HTML documents, handle events, perform animations, and add Ajax interactions to your web pages.

This AjaxFileUpload Plugin is a hacked version of Ajaxupload plugin created by yvind Saltvik, which is really good enought for normal use. Its idea is to create a iframe and submit the specified form to it for further processing.

In this hacked version, it submits the specified file type of input element only rather than an entire form.

La forma de implementarlo en nuestras páginas no es tan difícil y de hecho en la página del proyecto publican código para hacerlo.

Se me hizo bastante bueno, lo acabo de probar en una página y funciona a la perfección, vale la pena darle una checada.

Enlace:

http://www.phpletter.com/Our-Projects/AjaxFileUpload/

Cuando programo en javascript, me pasa de repente que se me olvida que propiedades puedo utilizar de algunos objetos… por decir…

Si queremos manipular el elemento document … y no recordamos que propiedades tiene, pues vamos a la página de referencia que tiene w3, y encontramos todo un menú de objetos de donde elegir:

This section contains a complete reference of

  • All built-in JavaScript objects
  • All browser objects
  • All HTML DOM objects

JavaScript Objects Reference

The references describe the properties and methods of each object, along with examples.

* Array object
* Boolean object
* Date object
* Math object
* Number object
* String object
* RegExp object
* Global properties and functions

Browser Objects Reference

The references describe the properties and methods of each object, along with examples.

* Window object
* Navigator object
* Screen object
* History object
* Location object

HTML DOM Objects Reference

The references describe the properties and methods of each object, along with examples.

* Document object
* Event object
* HTMLElement object
* Anchor object
* Area object
* Base object
* Body object
* Button object
* Form object
* Frame/IFrame object
* Frameset object
* Image object
* Input Button object
* Input Checkbox object
* Input File object
* Input Hidden object
* Input Password object
* Input Radio object
* Input Reset object
* Input Submit object
* Input Text object
* Link object
* Meta object
* Object object
* Option object
* Select object
* Style object
* Table object
* TableCell object
* TableRow object
* Textarea object

De hecho, de esa página no solo nos presenta propiedades de los objetos, si no que al entrar a determinado objeto, podemos ver también sus propiedades, métodos y eventos, por lo que esta página de referencia se me ha hecho muy buena para visitar mientras trabajo.

Dirección:

http://www.w3schools.com/jsref/default.asp

De wikipedia:

Un procedimiento almacenado (stored procedure) es un programa (o procedimiento) el cual es almacenado físicamente en una base de datos. Generalmente son escritos en un lenguaje de bases de datos propietario como PL/SQL para Oracle database o PL/PgSQL para PostgreSQL. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y solo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.

Usos típicos para procedimientos almacenados incluyen la validación de datos siendo integrados a la estructura de base de datos (los procedimientos almacenados utilizados para este propósito a menudo son llamados disparadores; triggers en inglés), o encapsular un proceso grande y complejo. El último ejemplo generalmente ejecutará más rápido como un procedimiento almacenado que de haber sido implementado como, por ejemplo, un programa corriendo en el sistema cliente y comunicándose con la base de datos mediante el envío de consultas SQL y recibiendo sus resultados.

Los procedimientos pueden ser ventajosos: Cuando una base de datos es manipulada desde muchos programas externos. Al incluir la lógica de la aplicación en la base de datos utilizando procedimientos almacenados, la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es reducida. Esto puede simplificar la creación y, particularmente, el mantenimiento de los programas involucrados.

Podemos ver un claro ejemplo de estos procedimientos cuando requerimos realizar una misma operación en un servidor dentro de algunas o todas las bases de datos y a la vez dentro de todas o algunas de las tablas de las bases de datos del mismo. Para ello podemos utilizar a los Procedimientos almacenados auto creables que es una forma de generar ciclos redundantes a través de los procedimientos almacenados.

——————————————————————————————————————————–

Apunte:

Ahora para MySQL, podemos en un Stored Procedure hacer uso de transacciones asegurando asi que realmente se llevará a cabo de forma segura el procedimiento y para esto hacemos uso de @@error_count, el cual siendo 0 significa que no han habido errores (usando un if bajo esta condición podriamos decidir cuando proceder al COMMIT).

En el manual de referencia viene como crear stored procedures, pero simplificando un poco pongon un ejemplo. Lo empezamos con CREATE PROCEDURE sp_nombreDelProcedimiento … luego abrimos un paréntesis para indicar las variables que pueden ser de IN, OUT o INOUT…

Una vez definido esto, definimos entre BEGIN y END las consultas que compondrán al stored procedure. Podemos declarar variables dentro de este stored procedure haciendo uso de DECLARE nombreVariable TipoVariable.

Ejemplo:

CREATE PROCEDURE sp_altaUsuario(IN nick VARCHAR(10) ,
IN correo VARCHAR(35),
IN contrasenia VARCHAR(32), IN estadox TINYINT(3),
IN permisox TINYINT(3))

BEGIN
DECLARE a INTEGER;
INSERT INTO usuario(nickUsuario, correoUsuario,
contraseniaUsuario, idEstado,
idPermiso)
VALUES(nick, correo, contrasenia, estadox,
permisox);
SET a=(SELECT @@error_count);
IF a = 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END;

Ahora, si queremos llamar a un stored procedure, la consulta sería haciendo uso de CALL sp_nombreDelStoredProcedure(valoresDeEntrada). y en PHP podemos hacerlo de la siguiente manera:

$sql= “CALL sp_ejemplo(“.$parametro1.”);”;

$datos= mysqli_query($conexion, $sql);

Sobre @@error_count -> http://dev.mysql.com/doc/refman/5.0/es/show-errors.html

PHP y MySQLi

Configurar una conexión:

Podemos hacer uso de una nueva biblioteca para conectarnos a MySQL llamada mysqli, usaremos la sintaxis orientada a procedimientos. La conexión se establece de la siguiente forma:

//Archivo conexion.php

<?php

function conectar()

{

$servidor=”localhost”;

$usuario=”root”;

$password=”1234″;

$basededatos= “proyecto”;

$con=mysqli_connect($servidor,$usuario,$password, $basededatos );

if(mysqli_connect_errno()) {

echo ‘Error, no se pudo conectar’;

exit;

}

$_SESSION['conexion']=$con;

}

?>

Podemos hacer querys haciendo uso de la función en PHP mysqli_query( link, consulta ), en donde para la parte de link usamos la variable de session $_SESSION['conexion'] y en la parte de consulta ponemos la query que queramos ejecutar (ejemplo y entre comillas “SELECT * FROM tabla”).

$sql = ‘SELECT * FROM menu ORDER BY idMenu’;

$datos = mysqli_query($_SESSION['conexion'], $sql);

if($datos)

{

$info = ‘<table><tr>’;

$num= mysqli_num_rows($datos);

for($i=0; $i<$num; $i++) {

$row= mysqli_fetch_row($datos);

$info .= ‘<td style=cursor:pointer align=”center”><font style=”font-size:12px”><b>’;

if( $i > 0 AND $i < mysqli_num_rows($datos))

$info.= ‘<font style=cursor:default color=”#333333″> :: </font>’ ;

$info .= $row[1];

$info .= ‘</b></font></td>’;

}

$info .= ‘</tr></table>’;

return $info;

}

else

{

return ‘Error al realizar consulta’;

}

}

?>

Ahora si queremos en PHP mostrar una consulta de este tipo (SELECT) recomiendo hacer lo siguiente en base al código anterior:

$info= ‘<table><tr>’; //Guardamos la tabla en una variable para poder regresar toda la tabla

$num= mysqli_num_rows($datos); // Con esto sabemos el numero de rows de nuestra query

for($i=0; $i<$num; $i++) { // Recorremos las filas con un for

$row= mysqli_fetch_row($datos); // Con mysqli_fetch_row obtenemos el valor de cada fila de forma independiente

$info .= ‘<td style=cursor:pointer align=”center”><font style=”font-size:12px”><b>’;

if( $i > 0 AND $i < mysqli_num_rows($datos)) //Esto es adorno

$info.= ‘<font style=cursor:default color=”#333333″> :: </font>’ ;

$info .= $row[1]; // Las filas se obtienen completas en forma de arreglo, si queremos bajo una columna en especifico, es necesario indicar en el arreglo bajo que columna está, empieza desde 0

$info .= ‘</b></font></td>’;

}

$info .= ‘</tr></table>’;

return $info;

}

else

{

return ‘Error al realizar consulta’;

}

Más información en el manual de referencia.

© 2011 Quanaxblog Suffusion theme by Sayontan Sinha