Tutorial de PHP y MySQL (Ayúdate de la funcion buscar de Adobe para ir a la página deseada) Este manual es una actualización del que puedes encontrar en: http://es.tldp.org/Manuales-LuCAS/manual_PHP/manual_PHP/index.htm 1. INSTALACIÓN DE PHP+MYSQL ................................................................................................ 4 Instalación php+MySql en Windows ............................................................................................... 4 Instalación de Apache+PHP+MySQL en Linux/Unix ..................................................................... 6 2. SINTAXIS EN PHP ......................................................................................................................... 9 Mi primer script ............................................................................................................................... 9 Variables y operadores ................................................................................................................... 10 Variables: ................................................................................................................................... 10 Constantes: ................................................................................................................................. 10 Operadores Aritméticos: ............................................................................................................ 11 Operadores de Cadenas: ............................................................................................................. 11 Operadores de Comparación: ..................................................................................................... 11 Operadores Lógicos: .................................................................................................................. 12 Operadores de Asignación: ........................................................................................................ 12 Sentencias de control ..................................................................................................................... 12 IF...ELSE ................................................................................................................................... 12 IF...ELSEIF...ELSE ................................................................................................................... 13 SWITCH...CASE...DEFAULT .................................................................................................. 13 WHILE ....................................................................................................................................... 14 DO...WHILE .............................................................................................................................. 14 FOR ............................................................................................................................................ 14 Las tablas unidimensionales........................................................................................................... 15 Utilizando índices ...................................................................................................................... 15 Utilizando array.......................................................................................................................... 15 Utilizando tablas asociativas ...................................................................................................... 16 Tablas multidimensionales............................................................................................................. 17 Las funciones ................................................................................................................................. 18 La instrucción RETURN............................................................................................................ 18 Parámetros de las funciones ....................................................................................................... 19 Funciones Variable .................................................................................................................... 21 Recursión ................................................................................................................................... 21 INCLUDE, REQUIRE: ¿Cómo ahorranos líneas de código?........................................................ 22 Tiempo y fecha............................................................................................................................... 23 time............................................................................................................................................. 23 date(formato, timestamp) ........................................................................................................... 23 mktime(hora, min, seg, mes, dia, año) ....................................................................................... 24 chekdate (mes, dia, año)............................................................................................................. 24 Las clases ....................................................................................................................................... 25 3. LOS FORMULARIOS .................................................................................................................. 28 Cuadro de texto: ......................................................................................................................... 28 Cuadro de texto con barras de desplazamiento: ......................................................................... 28 Casilla de verificación:............................................................................................................... 28 Botón de opción: ........................................................................................................................ 28 Menú desplegable: ..................................................................................................................... 28 Boton de comando: .................................................................................................................... 28
95
Embed
Tutorial de PHP y MySQL€¦ · Tutorial de PHP y MySQL (Ayúdate de la funcion buscar de Adobe para ir a la página deseada) Este manual es una actualización del que puedes encontrar
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Tutorial de PHP y MySQL
(Ayúdate de la funcion buscar de Adobe para ir a la página deseada) Este manual es una actualización del que puedes encontrar en:
1. INSTALACIÓN DE PHP+MYSQL................................................................................................4 Instalación php+MySql en Windows...............................................................................................4 Instalación de Apache+PHP+MySQL en Linux/Unix.....................................................................6
2. SINTAXIS EN PHP.........................................................................................................................9 Mi primer script ...............................................................................................................................9 Variables y operadores...................................................................................................................10
Variables: ...................................................................................................................................10 Constantes: .................................................................................................................................10 Operadores Aritméticos: ............................................................................................................11 Operadores de Cadenas:.............................................................................................................11 Operadores de Comparación:.....................................................................................................11 Operadores Lógicos: ..................................................................................................................12 Operadores de Asignación: ........................................................................................................12
Sentencias de control .....................................................................................................................12 IF...ELSE ...................................................................................................................................12 IF...ELSEIF...ELSE ...................................................................................................................13 SWITCH...CASE...DEFAULT..................................................................................................13 WHILE.......................................................................................................................................14 DO...WHILE..............................................................................................................................14 FOR............................................................................................................................................14
Tablas multidimensionales.............................................................................................................17 Las funciones .................................................................................................................................18
La instrucción RETURN............................................................................................................18 Parámetros de las funciones.......................................................................................................19 Funciones Variable ....................................................................................................................21 Recursión ...................................................................................................................................21
INCLUDE, REQUIRE: ¿Cómo ahorranos líneas de código?........................................................22 Tiempo y fecha...............................................................................................................................23
Las clases .......................................................................................................................................25 3. LOS FORMULARIOS ..................................................................................................................28
Cuadro de texto: .........................................................................................................................28 Cuadro de texto con barras de desplazamiento:.........................................................................28 Casilla de verificación:...............................................................................................................28 Botón de opción: ........................................................................................................................28 Menú desplegable: .....................................................................................................................28 Boton de comando: ....................................................................................................................28
Campo oculto: ............................................................................................................................28 Descarga de archivos .....................................................................................................................31
4. FICHEROS ....................................................................................................................................33 Funciones de acceso a ficheros ......................................................................................................33
5. COMENZANDO CON MySQL....................................................................................................36 MySQL ..........................................................................................................................................36
La estructura de MySQL............................................................................................................36 Seguridad ...................................................................................................................................37
Conectar a MySQL desde PHP......................................................................................................47 Creación de una Base de Datos en MySQL...................................................................................48
1. Linea de comandos.................................................................................................................49
2. Script ......................................................................................................................................49 Importar bases de datos desde MS Access.....................................................................................51 Mostrar los datos de una consulta ..................................................................................................51 Un buscador para nuestra base de datos.........................................................................................54
6. OPERACIONES CON REGISTROS............................................................................................56 Añadir registros..............................................................................................................................56 Modificar registros en MySQL......................................................................................................57 Borrar registros ..............................................................................................................................58 Todo a la vez ..................................................................................................................................58
7. CONEXIÓN A MYSQL CON ODBC ..........................................................................................61 Instalación de MyODBC................................................................................................................61 Conexión remota a MySQL con MS Access .................................................................................64
Exportar un tabla MS Access a MySQL............................................................................................66 Importar tablas desde MySQL a MS Access .................................................................................68
9. CUESTIONES MÁS FRECUENTES ...........................................................................................71 Direcciones útiles...........................................................................................................................71 Recorrer un array ...........................................................................................................................71 Ejemplo de carrito de la compra ....................................................................................................71 Insercion de datos en una base de datos.........................................................................................72 Usos de foreach, each, list.............................................................................................................73 Paginar los resultados de una consulta en php...............................................................................74
Mostrar los registros adecuados.................................................................................................74 Añadir los enlaces a otras páginas .............................................................................................75
Update, insert, delete......................................................................................................................76 Boton submit con imagen ..............................................................................................................78 ¿Como importar una base de datos? ..............................................................................................79 WARNING session_start() ............................................................................................................80 Listar directorios y subdirectorios con PHP ..................................................................................81 Funciones de gestión de directorios ...............................................................................................82 ¿Cómo habilitar y deshabilitar botones desde php?.......................................................................83 ¿Cómo transferir información entre páginas?................................................................................83 ¿Algunos campo de texto sólo muestran hasta el primer espacio en blanco, cómo lo soluciono? 84 ¿Cómo evitar el pantallazo molesto de la regeneración de un formulario cuando al hacer clic sobre un control tengo que solicitarle a php que regenere la página? De paso como cargo una lista desplegable conforme a los valores de otra?..................................................................................85 ¿Cómo ocultar/mostrar una capa html en función de un valor de una variable php?. ...................87 ¿Cómo utilizar una variable php dentro de un javascript?.............................................................87 ¿Cómo conseguir interrelacionar claves externas con más de un campo? ....................................88 ¿Cómo catenar campos desde un Select….as? ..............................................................................88 ¿Cómo conseguir eliminar campos de una lista desplegable o añadirlos mediante una matriz intermedia o como trasladar de una lista a otra?............................................................................88 Usos de try….catch(ex)..................................................................................................................88 Id versus name en los formularios .................................................................................................89 ¿Cómo llamar desde un controlador de evento a varias funciones javascript seguidas?...............89 ¿Se puede hacer interactuar codigo php con JavaScript y html en la misma página.php? ............90 ¿Es difícil trabajar con SQlite? ......................................................................................................91 ¿Puedo pasar fácilmente de Access a SQLite en Window?...........................................................91
Página 4 de 95
1. INSTALACIÓN DE PHP+MYSQL
Instalación php+MySql en Windows En este capítulo describiremos el proceso de instalción de la base de datos MySQL, de un servidor web Apache con PHP, en una máquina con sistema operativo Windows. Lo primero que debemos hacer es conseguirnos los programas necesarios, y que mejor para ello que diriguirnos a las páginas web (o cualquiera de sus mirros) de los programas en cuestión: cualquiera de sus mirros) de los programas en cuestión: Apache: www.apache.org apache_1_3_x_win32.exe MySQL: www.mysql.com mysql-shareware-3.22.34-win.zip PHP: www.php.net php-3.0.x-win32.zip NOTA: La versión para sistemas Windows de MySQL no es gratuita. Por lo que usaremos la versión shareware que está limitada a 30 días. La instalación de estos programas es muy fácil, PHP y MySQL vienen comprimidos en formato ZIP y sólo los tenemos que descomprimir en una carpeta, mientras que Apache es autoejecutable: Descomprimimos PHP en "C:\php3" Descomprimimos MySQL en "C:\mysql" Hacemos "doble click" en el fichero de Apache y aceptamos el directorio de instalación por defecto "C:\Archivos de Programas\Apache Group\Apache". Ya tenemos instalados los programas, ahora sólo nos queda hacer unos pequeños ajuste de configuración: APACHE de configuración: APACHE Editamos el fichero de configuración http.conf que se halla en C:\Archivos de Programas\Apache Group\Apache\conf\" Buscamos la línea donde pone: #ServerName new.host.name Quitamos el comentario (#) y la cambiamos por: ServerName http://localhost
Página 5 de 95
Indicamos el directorio de PHP: ScriptAlias /php3 "C:\php3" Definimos la extención de los script PHP: AddType application/x-httpd-php3 .php3 AddType application/x-httpd-php3 .php AddType application/x-httpd-php3 .phtml Y asignamos la aplicación para las extensiones PHP: Action application/x-httpd-php3 "/php3/php.exe" Por defecto los ficheros que son accesibles desde el navegador se encuentran el la carpeta htdocs del directorio de Apache, pero la podemos cambiar: DocumentRoot "C:\www" <Directory "C:\www"> ...... </Directory> PHP Para configurar PHP, primero buscamos el fichero php3.ini-distphp3.ini-dist y lo renombramos a php.ini, después lo editamos y le hacemos los siguientes cambios: Buscamos la expresión "extension_dir" y la cambiamos por: extension_dir = C:\php3 Para añadir el soporte para MySQL busca la línea: ; extension = php3_mysql.dll Cámbiala por: extension = php3_mysql.dll Copia el fichero php3.ini en "C:\windows\" Ejecución de los programas:
Página 6 de 95
Pues bien, ya solo nos queda arrancar los programas: C:\Archivos de Progrmas\Apache Group\Apache\apache.exe C:\mysql\bin\mysqld.exe #Para la versión shareware C:\mysql\bin\mysqld-shareware.exe También podemos arrancar el servidor Apache desde el menú de inicio: Inicio->Progrmas->Apache Web Server->Start Para comprobar nuestra instalación crea un fichero llamado test.php3 con la siguiente linea: <?php phpinfo() ?> Colócalo en el directorio de documentos de Apache y llámalo desde el navegadentos de Apache y llámalo desde el navegador. Si lo hemos hecho todo bien nos saldrá una página con todas las variables de PHP. NOTA: Cabe destacar que lo que hemos echo es una instalación básica, por lo que recomendamos leer los manuales de las distintas aplicaciones para obtener más detalles sobre la instalación de éstas.
Instalación de Apache+PHP+MySQL en Linux/Unix
En este capítulo describiremos el proceso de instalción de la base de datos MySQL, de un servidor web
Apache con PHP, en una máquina con sistema operativo Linux o Unix.
Lo primero que debemos hacer es conseguirnos los paquetes necesarios, y que mejor para ello que
diriguirnos a las páginas web (o cualquiera de sus mejor para ello que diriguirnos a las páginas web (o
cualquiera de sus mirros) de los programas en cuestión:
• Apache: www.apache.org
o apache-1.3.x.tar.gz
• MySQL: www.mysql.com
o mysql-3_22_22_tar.gz
• PHP: www.php.net
o php-3.0.x.tar-gz
Para poder realizar todo el proceso de instalación has de tener acceso como root a la máquin Linux.
Lo primero que debemos hacer un directorio de instalación, aunque lo normal sería que lo hicieramos en
/usr/local, /urs/src, o bien en /opt. Como hay que escoger uno, yo voy ha escoger el primero,
/usr/local, aunque el proceso sería el mismo si nos declináramos por cualquier otro.
Página 7 de 95
Supongamos que ya nos hemos conseguido los paquetes y los tenemos en el directorio /root/install, lo
primiero que hacemos es descomprimirlos:
cd /usr/local tar zxvf /root/install/apache-1.3.x.tar.gz tar zxvf /root/instal/mysql-3.22.x.tar.gz toot/instal/mysql-3.22.x.tar.gz tar zxvf /root/instal/php-3.0.x.tar-gz
Creamos enlaces sencillos (blandos) a código fuente
Preparamos la fuentes par al compilación de Apache
cd /usr/loca/apache ./configure --prefix=/usr/local/apache
Compilamos e instalamos MySQL
cd /usr/local/mysql ./configure --witout-debug --prefix=/usr/local/mysql make make install cp /usr/local/support-files/mysql.server /etc/rc.d/init.d/mysql chmod 755 /etc/rc.d/init.d/mysql
make make install #cp php3.ini-dist /usr/local/lib/php3.ini
Compilamos Apache
Página 8 de 95
cd /usr/local/apache ./configure --prefix=/usr/local/apache \
--activate-module=src/modules/php3/libphp3.a # si hemos compilado PHP4 utilizaremos #--activate-module=src/modules/php4/libphp4.a # quitar los comentarios para habilitar el módulo de proxy #--activate-module=src/modules/proxy/libproxy.a< proxy modules>
make make install
Para definir las extenciones de los scripts PHP, hay que añadir las siguientes lineas en el fichero de
Para comprobar nuestra instalación crea un fichero llamado test.php3 con la siguiente linea:
<?php phpinfo() ?>
Colócalo en el directorio de documentos de Apache y llámalo desde el navegador. Si lo hemos hecho todo
bien nos saldrá una página con todas las variables de PHP.
NOTA:
Cabe destacar que lo que hemos echo es una instalación básica, por lo que recomendamos leer los
manuales de las distintas aplicaciones para obtener más detalles sobre la instalación de éstas.
Página 9 de 95
2. SINTAXIS EN PHP
Mi primer script
Una vez que ya tenemos instalados PHP y MySQL, y el servidor Apache configurado para usarlos,
podemos comenzar a escribir nuestro primer script en PHP.
Ejemplo script php
<html> <body> <?php $myvar = "Hola. Este es mi primer script en PHP \n"; //Esto es un comentario es mi primer script en PHP \n"; //Esto es un comentario echo $myvar; ?> </body> </html>
Una vez escrito esto lo salvamos en un fichero con la extensión php3 (la nueva versión de PHP, la 4,
utiliza la extensión php), y lo colocamos en nuestro servidor, http://mi_servidor/php/test.php3.
Ahora si ponemos esta URL en nuestro navegador veremos una línea con el texto "Hola. Este es mi
primer script en PHP".
Lo primero que apreciamos en el script son sus delimitadores. En la primera línea del script vemos <?php
que nos indica que comienza un script en PHP, y en la última colocamos ?> para indicar el final del script.
Hay que destacar que todas las líneas que se encuentre entre estos delimitadores deben acabar en
punto y coma, excepto las sentencias de control (if, swicht, while, etc.).
Como en toda programación, es importante poner muchos comentarios, para lo cual si queremos
comentar una sola línea tenemos que poner al principio de la línea //, si lo que queremos es comentar
varias utilizaremos los delimitadores /* - */.
Para que el servidor envié texto utilizaremos la instrucción echo, aunque también podemos utilizar
printf de uso similar al del C o Perl.
Finalmente, vemos que la palabra myvar comienza con el signo dólar ($) . Este símbolo le indica a PHP
que es una variable. Nosotros le hemos asignado un texto a esta variable, pero también pueden contener
números o tablas (arrays). Es importante recordar que todas las variables comienza con el signo dólar.
También habréis observado que el texto que le asignamos a la variable termina con \n, esto no se
imprime sirve para indicarle al navegador una nueva línea.
Página 10 de 95
Variables y operadores
Ahora antes de seguir, vamos a ver un poco de teoría, la sintaxis en PHP.
Variables:
Como vimos antes todas la variables deben precedidas por signo dólar ($), y le asignamos contenido
con el signo igual (=). Con las variables, PHP distingue entre mayúsculas y minúsculas, por lo que bles,
PHP distingue entre mayúsculas y minúsculas, por lo que no es lo mismo $myvar que $Myvar, éstas son
$a OR $b Verdadero si alguno de los dos es verdadero
$a !! $b Verdadero si alguno de los dos es verdadero
$a XOR $b Verdadero si sólo uno de los dos es verdadero
!$a Verdadero si $a es falso, y recíprocamente
Operadores de Asignación:
$a = $b Asigna a $a el contenido de $b
$a += $b Le suma a $b a $a
$a -= $b Le resta a $b a $a
$a *= $b Multiplica $a por $b y lo asigna a $a
$a /= $b Divide $a por $b y lo asigna a $a
$a .= $b Añade la cadena $b a la cadena $a
Sentencias de control
Las sentencias de control permiten ejecutar bloque de códigos dependiendo de unas condiciones. Para
PHP el 0 es equivalente a Falso y cualquier otro número es Verdadero.
IF...ELSE
La sentencia IF...ELSE permite ejecutar un bloque de instrucciones si la condición es Verdadera y otro
bloque de instrucciones si ésta es Falsa. Es importante tener en cuenta q instrucciones si ésta es Falsa.
Es importante tener en cuenta que la condición que evaluemos ha de estar encerrada entre paréntesis
(esto es aplicable a todas la sentencias de control).
if (condición) { Este bloque se ejecuta si la condición es VERDADERA
} else { Este boque se ejecuta si la condición es FALSA
}
Existe una forma sencilla de usar la sentencia IF cuando no tenemos que usar el ELSE y solo tenenemos
que ejecutar una línea de código.
if ($a > 4) echo "$a es mayor que 4";
Página 13 de 95
IF...ELSEIF...ELSE
La sentencia IF...ELSEIF...ELSE permite ejecuta varias condiciones en cascada. Para este caso veremos
un ejemplo, en el que utilizaremos los operadores lógicos.
<?php if ($nombre == ""){
echo "Tú no tienes nombre"; } elseif (($nombre=="eva") OR ($nombre=="Eva")) {
echo " echo "Tu nombre es EVA";<
} else { echo "Tu nombre es " . $nombre;
}
SWITCH...CASE...DEFAULT
Una alternativa a IF...ELSEIF...ELSE, es la sentencia SWITCH, la cuál evalúa y compara cada expresión
de la sentencia CASE con la expresión que evaluamos, si llegamos al final de la lista de CASE y encuentra
una condición Verdadera , ejecuta el código de bloque que haya en DEFAULT. Si encontramos una
condición verdadera debemos ejecutar un BREAK para que la sentencia SWITCH no siga buscando en la
lista de CASE. Veamos un ejemplo.
<?php switch ($dia) {
case "Lunes": echo "Hoy es Lunes"; break;
c case "Martes":
echo "Hoy es Martes"; break;
case "Miercoles": echo "Hoy es Miercoles"; break;
case "Jueves": echo "Hoy es Jueves"; break;
case "Viernes": echo "Hoy es Viernes"; break;
case "Sábado": echo "Hoy es Sábado"; break;
case "Domingo": echo "Hoy es Domingo"; break;
default: echo "Esa cadena no corresponde a ningún día de la semana";
} ?>
Página 14 de 95
WHILE
La sentencia WHILE ejecuta un bloque de código mientras se cumpla una determinada condición.
<?php $num = 1; while ($num < 5) {
echo $num; $num++
} ?>
Podemos romper un bucle WHILE utilizando la sentencia BREAK.
<?php $num = 1; while ($num < 5) {
echo $num; if ($num == 3){
echo "Aquí nos salimos \n"; break
} $num++
} ?>
DO...WHILE
Esta sentencia es similar a WHILE, salvo que con esta sentencia primero ejecutamos el bloque de código
y después se evalúa la condición, por lo que el bloque de código se ejecuta siempre al menos una vez.
<?php $num = 1; do {
echo $num; if ($num == 3){
echo "Aquí nos salimos \n"; break
} $num++
} while ($num < 5); ?>
FOR
El bucle FOR no es estrictamente necesario, cualquier bucle FOR puede ser sustituido fácilmente por otro
WHILE. Sin embargo, el bucle FOR resulta muy útil cuando debemos ejecutar un bloque de código a
condición de que una variable se encuentre entre un valor mínimo y otro máximo. El bucle FOR también
se puede romper mediante la sentencia BREAK.
Página 15 de 95
<?php for ($num = 1; Snum <=5; $num++){
echo $num; if ($num == 3){
echo "Aquí nos salimos \n"; break
} } ?>
Las tablas unidimensionales
Las tablas (o array en inglés), son muy importantes en PHP, ya que generalmente, las funciones que
devuelven varios valores, como las funciones ligadas a las bases de datos, lo hacen en forma de tabla.
Utilizando índices
En PHP disponemos de dos tipos de tablas. El primero sería el clásico, utilizando índices:
<?php $ciudad[] = "París";
$ciudad[] = "París";
$ciudad[] = "Roma"; $ciudad[] = "Sevilla"; $ciudad[] = "Londres"; print ("yo vivo en " . $ciudad[2] . "<BR>\n"); ?>
Esta es una forma de asignar elementos a una tabla, pero una forma más formal es utilizando la función
array.
Utilizando array
<?php
$ciudad = array("París", "Roma", "Sevilla", "Londres"); //contamos el número de elementos de la tabla $numelentos = count($ciudad); //imprimimos todos los elementos de la tabla for ($i=0; $i < $numelentos; $i++) {
print ("La ciudad $i es $ciudad[$i] <BR>\n"); } ?>
Sino
?>
Página 16 de 95
Sino se especifica, el primer índice es el cero, pero podemos utilizar el operador => para especificar el
PHP también permite la recursión, es decir, una función se puede llamar así misma. Para aclarar el
concepto de recursión, vamos a crear una función que comprueba si un número es entero o no.
Un número que no sea entero (7'4), tiene una parte entera y otra decimal (comprendida entre 0 y 1), lo
que vamos a hacer para comprobar si un número es entero o no, será restarle 1 al número en cuestión
hasta que nos que demos sin parte entera, y entoces comprobaremos si tiene parte decimal (un poco
lioso todo ésto).
<?php function esEntero($numero) {
if ($numero > 1) { return (esEntero($numero -1));
} elseif ($numero < 0) {
/* como los núm. son simétricos chequeamos lo convertimos a positvo */ return (esEntero((-1) * $numero -1));
} elseif (($numero > 0) AND ($numero < 1)) {
return ("NO"); } else {
/* el cero es entero por definición */ return ("SI");
}
} //fin function
Página 22 de 95
echo "¿Es 0 un número entero? ".esEntero(0)."\n"; echo "¿Es 3.5 un número entero? ".esEntero(3.5)."\n"; echo "¿Es -7 un número entero? ".esEntero(-7)."\n"; echo "¿Es -9.2 un número entero? ".esEntero(9.2)."\n"; ?>
INCLUDE, REQUIRE: ¿Cómo ahorranos líneas de código?
Cómo ahorranos líneas de código
En las lecciones anteriores hemos aprendido el uso básico de las funciones de PHP para trabajar con
MySQL. En esta lección y sucesivas vamos a ver nuevas funciones que nos facilitan y potencian nuestras
páginas web.
Por lo general, todos nuestros script tienen partes de código iguales, las funciónes include() y require()
nos van ahorrar muchas de estas lineas de código. Ambas funciones hacen una llamada a un
determinado fichero pero de dos maneras diferentes, con include(), insertamos lo que contenga el
fichero que llamemos de manera literal en nuestro script, mientras que con require(), le decimos que el
script necesitará parte de código de se encuentra en el fichero que llama require().
Como todo esto es un poco lioso, veamos unos ejemplos que nos lo aclará.
<?php include ("header.inc"); echo "Hola Mundo"; include ("footer.inc"); ?>
Si tenemos encuenta que el fichero header.inc contiene:
Como ejemplo vamos a crear la clase mysql, que nos servirá para realizar consultas a las bases de datos
MySQL.
<?php class DB_mysql { /* variables de conexión */ var $BaseDatos; var $Servidor; var $Usuario; var $Clave; /* identificador de conexión y consulta */ var $Conexion_ID = 0; var $Consulta_ID = 0; /* número de error y texto error */ var $Errno = 0; var $Error = ""; /* Método Constructor: Cada vez que creemos una variable de esta clase, se ejecutará esta función */ function DB_mysql($bd = "", $host = "localhost", $user = "nobody", $pass = "") {
Debemos tener en cuenta que los comandos de arriba debe escribirse cada uno en una sola línea. Se han
separado para aumentar la legibilidad del código.
Ahora desde la línea de comandos ejecuta:
cat mydb.dump | mysql mydb
Cabe destacar el campo id, que no puede estar vacío, y además es autoincrementable, lo cuál deberemos
tener en cuenta a la hora de actualizar y añadir registros. Si no hemos cometido ningún error, ya
tenemos nuestra base de datos de ejemplo en el servidor MySQL.
2. Script
Una seguna forma de crear las bases de datos y tablas es utilizar las funciones que para ello nos da PHP.
Para crear una base de datos tenemos dos opciones, una utilizar la función mysql_create_db(), o bien
enviado una consulta SQL con la intrucción "CREATE DATABASE mydb". Como ejemplo vamos a crear un
script crear_my.php que creará la anterio base de datos.
Página 50 de 95
<html> <body> <?PHP $basedatos = "mydb"; //conectamos con el servidor $link = @mysql_connect("localhost", "root", ""); // comprobamos que hemos estabecido conexión en el servidor if (! $link){
echo "<h2 align='center'>ERROR: Imposible establecer conexión con el servidor</h2>"; exit;
} // obtenemos una lista de las bases de datos del servidor $db = mysql_list_dbs(); // vemos cuantas BD hay $num_bd = mysql_num_rows($db); //comprobamos si la BD que queremos crear exite ya $existe = "NO" ; for ($i=0; $i<$num_bd; $i++) {
El siguiente script de busqueda lo llamaremos buscador.php3, y será el encargado de hacer la búsqueda
en la BD, y devolver por pantalla los registros encontrados.
Script búsqueda
<html> <body> <?php if (!isset($buscar)){
echo "<p>Debe especificar una cadena a buscar</p> \n"; echo "<p><a href=buscador_bd.htm>Volver</p> \n"; echo "</html></body> \n"; exit;
} $link = mysql_connect("localhost", "nobody"); mysql_select_db("mydb", $link); $sql = "SELECT * FROM agenda WHERE nombre LIKE '%$buscar%' ORDER BY nombre"; $result = mysql_query($sql, $link); if ($row = mysql_fetch_array($result)){
echo "<table border = '1'> \n"; //Mostramos los nombres de las tablas echo "<tr> \n"; mysql_field_seek($result,0); while ($field = mysql_fetch_field($result)){
echo "<td><b>$field->name</b></td> \n"; } echo "</tr> \n"; do {
Primero, para modificar hay que tener permiso para ello en el servidor de BD, el resto nos viene de
corrido. Primero seleccionamos el registro que deseamos modificar, y luego, mandamos una consulta con
la modificaciones, o ambas cosas a la vez. Suponemos que las modificaciones las recogemos de un
formulario como el de la lección anterior .
Modificar registros opcion A
<html> <body> <?php if (isset($id)){
// process form $link = mysql_connect("localhost", "root"); mysql_select_db("mydb",$db); $sql = "SELECT * FROM agenda WHERE id = $id" $result = mysql_query($sql); $sql = "UPDATE agenda SET nombre='$nombre', direccion='$direccion', telefono='$telefono', email='$email'"; $result = mysql_query($sql);
}else{ echo "Debe especificar un 'id'.\n";
} </body> </html>
O bien, Modificar registros opcion B
<html>
Página 58 de 95
<body> <?php if (icodigo"><?php if (isset($id)){
// process form $link = mysql_connect("localhost", "root"); mysql_select_db("mydb",$db); $sql = "UPDATE agenda SET nombre='$nombre', direccion='$direccion', "; $sql .= "telefono='$telefono', email='$email' WHERE id=$id"; $result = mysql_query($sql);
}else{ echo "Debe especificar un 'id'.\n";
} ?> </body> </html>
Borrar registros
El proceso de borrar un registro es identico al de modificar, solo que en vez de utilizar UPDATE utilizamos
DELETE en la sentenica SQL. Por tanto el script quedaría como sigue.
Borrado registros de BD
<html> <body> <?php
<body>
<?php if (isset($id)){
// process form $link = mysql_connect("localhost", "root"); mysql_select_db("mydb",$db); $sql = "DELETE FROM agenda WHERE id=$id") $result = mysql_query($sql);
}else{ echo "Debe especificar un 'id'.\n";
} ?> </body> </html>
Todo a la vez
Como resuemen de todo lo visto hasta ahora, vamos a hacer un script donde se mezcla todo, y algo
nuevo. Como ejercico, os dejo que la incorporación del buscador de la lección 5.
} elseif ($delete) { // Borramos un registro $sql = "DELETE FROM agenda WHERE id=$id"; $result = mysql_query($sql); echo "Registro Borrado<p>";
} else { /* Esta parte se ejecuta si no hemos presionado el boton enviar, es decir no venimos de un formulario */ if (!$id) {
// Mostramos todos los registros de nuestra BD $result = mysql_query("SELECT * FROM agenda",$link)ot;SELECT * FROM agenda",$link); while ($myrow = mysql_fetch_array($result)) {
} } ?> <p><a href="<?php echo $PHP_SELF?>">Añadir un registro</a></p> <p><form method="post" action="<?php echo $PHP_SELF?>"></p> <?php if ($id) {
// editamos el registro seleccionado $sql = "SELECT * FROM agenda WHERE id=$id"; $result = mysql_query($sql); $myrow = mysql_fetch_array($result); $id = $myrow["id"]; $nombre = $myrow["nombre"]; $direccion = $myrow["direccion"]; $telefono = $myrow["telefono"]; $email = $myrow["email"]; // enviamos el id para poder editar el registro echo "<input type=hidden name="id" value=$id>";
Recorrer un array Recorrer un array utilizando foreach en vez de un blucle for: <? /* Creo un array */ $las_vocales = array ('a','e','i','o','u'); /* Recorro el array utilizando foreach */ foreach ($las_vocales as $elem) { print $elem.'<br>'; } print '<br>'; /* Es equivalente a realizar */ for ($i=0;$i<count($las_vocales);$i++) { print $las_vocales[$i].'<br>'; } ?>
Ejemplo de carrito de la compra <?php // Manual de PHP de WebEstilo.com session_start(); session_register('itemsEnCesta'); $item=$_POST['item']; $cantidad=$_POST['cantidad']; $itemsEnCesta=$_SESSION['itemsEnCesta']; if ($item){ if (!isset($itemsEnCesta)){ $itemsEnCesta[$item]=$cantidad; }else{ foreach($itemsEnCesta as $k => $v){ if ($item==$k){ $itemsEnCesta[$k]+=$cantidad; $encontrado=1; } } if (!$encontrado) $itemsEnCesta[$item]=$cantidad;
Página 72 de 95
} } $_SESSION['itemsEnCesta']=$itemsEnCesta; ?> <html> <body> <tt> <form action="<?=$PHP_SELF."?".$SID?>" method="post"> Dime el producto <input type="text" name="item" size="20"><br> Cuantas unidades <input type="text" name="cantidad" size="20"><br> <input type="submit" value="Añadir a la cesta"><br> </form> <? if (isset($itemsEnCesta)){ echo'El contenido de la cesta de la compra es:<br>'; foreach($itemsEnCesta as $k => $v){ echo 'Artículo: '.$k.' ud: '.$v.'<br>'; } } ?> </tt> </body> </html>
Insercion de datos en una base de datos <!-- Manual de PHP de WebEstilo.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1> <FORM ACTION="procesar.phtml"> <TABLE> <TR> <TD>Nombre:</TD> <TD><INPUT TYPE="text" NAME="nombre" SIZE="20" MAXLENGTH="30"></TD> </TR> <TR> <TD>Apellidos:</TD> <TD><INPUT TYPE="text" NAME="apellidos" SIZE="20" MAXLENGTH="30"></TD> </TR> </TABLE> <INPUT TYPE="submit" NAME="accion" VALUE="Grabar"> </FORM> <hr> <?php include("conex.phtml"); $link=Conectarse(); $result=mysql_query("select * from prueba",$link); ?> <TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1> <TR><TD> <B>Nombre</B></TD> <TD> <B>Apellidos</B> </TD></TR> <?php while($row = mysql_fetch_array($result)) { printf("<tr><td> %s</td> <td> %s </td></tr>", $row["Nombre"], $row["Apellidos"]); } mysql_free_result($result);
Paginar los resultados de una consulta en php Autor: Daniel Rodríguez Herrera
1 . Mostrar los registros adecuados 2 . Añadir los enlaces a otras páginas
Realizar una consulta a una base de datos MySQL desde PHP y presentarla es sencillo. El problema viene cuando debemos presentar 3000 registros y nos gustaría que el usuario no esperara hasta Nochebuena. En ese caso, se presenta un número menor de registros en la página (diez, viente) y se añaden enlaces para poder acceder a los demás. A esto se le llama paginación.
Mostrar los registros adecuados
Para poder paginar debemos recibir en la página, además de los parámetros que reciba normalmente, uno que indique la página de resultados que deseamos obtener. Por defecto será 1 y lo llamaremos pag. Supongamos que tenemos una página que devuelve el nombre de todos los clientes de una empresa. La llamaremos, en un alarde de originalidad, clientes.php. Sería algo así:
Página 75 de 95
<html> <body> <?php $link = mysql_connect("localhost", "nobody"); mysql_select_db("mydb", $link); $result = mysql_query("SELECT nombre, apellidos FROM clientes", $link); if (mysql_num_rows($result)){ echo "<table border = '1'> \n"; echo "<tr><td>Nombre</td><td>Apellidos</td></tr> \n"; while ($row = @mysql_fetch_array($result)) { echo "<tr><td>".$row["nombre"]. "</td><td>".$row["email"]."</td></tr> \n"; } echo "</table> \n"; } else echo "¡ No se ha encontrado ningún registro !"; ?> </body> </html>
Para poder soportar paginación debemos, primero, decidir cuantos registros presentamos por página (por ejemplo, 10) y recibir el número de página que debemos presentar. Hay dos maneras de obtener el número de registros totales y los registros que necesitamos para presentar la página. Nosotros utilizaremos dos consultas. En la primera obtendremos el total de registros de la tabla y, en la segunda, cogeremos sólo los registros que necesitamos haciendo uso de LIMIT. Sustituiremos el código de la consulta por lo siguiente:
if (!isset($pag)) $pag = 1; // Por defecto, pagina 1 $result = mysql_query("SELECT COUNT(*) FROM clientes", $link); list($total) = mysql_fetch_row($result); $tampag = 10; $reg1 = ($pag-1) * $tampag; $result = mysql_query("SELECT nombre, apellidos FROM clientes LIMIT $reg1, $tampag", $link);
Añadir los enlaces a otras páginas
La primera labor que vamos a hacer es crear una función abstracta que reciba el número de registros que en total devuelve la consulta, el tamaño de página, el número de la página actual, y el texto del enlace hasta insertar el número de página. Este último parámetro puede resultar un poco confuso. Pongamos un ejemplo. Si en nuestra página recibimos ese número por el parámetro pag, si quisieramos ver la página 2 escribiríamos:
clientes.php?pag=2
Por lo tanto, como debemos quitar el número de página, nos quedará:
clientes.php?pag=
La función deberá obtener primero el número total de páginas. Luego averiguará si existe una página anterior, escribiendo en enlace que va a esa página previa. Lo siguiente es escribir los enlaces a todas las páginas anteriores a la actual desde la 1. Luego escribe el número de la página actual, resaltado, pero sin enlace. Después escribe los números de las páginas posteriores y, finalmente, el enlace a la página posterior:
/******************************************************/ /* Funcion paginar * actual: Pagina actual * total: Total de registros
Página 76 de 95
* por_pagina: Registros por pagina * enlace: Texto del enlace * Devuelve un texto que representa la paginacion */ function paginar($actual, $total, $por_pagina, $enlace) { $total_paginas = ceil($total/$por_pagina); $anterior = $actual - 1; $posterior = $actual + 1; if ($actual>1) $texto = "<a href=\"$enlace$anterior\">«</a> "; else $texto = "<b>«</b> "; for ($i=1; $i<$actual; $i++) $texto .= "<a href=\"$enlace$i\">$i</a> "; $texto .= "<b>$actual</b> "; for ($i=$actual+1; $i<=$total_paginas; $i++) $texto .= "<a href=\"$enlace$i\">$i</a> "; if ($actual<$total_paginas) $texto .= "<a href=\"$enlace$posterior\">»</a>"; else $texto .= "<b>»</b>"; return $texto; }
Además de incluir la función en nuestro script la tendremos que llamar después de cerrar la tabla:
Como resuemen de todo lo visto hasta ahora, vamos a hacer un script donde se mezcla todo, y algo
nuevo. Como ejercicio, os dejo que la incorporación del buscador de la lección 5.
<html> <body> <?php $link = mysql_connect("localhost", "root"); mysql_select_db("mydb",$link); //Comprobamos si hemos recibido datos del formulario (enviar) if ($enviar) {
// Si recibimos un id, modificamos, sino añadimos un registro if ($id) {
$sql = "UPDATE agenda SET nombre='$nombre', direccion='$direccion'"; $sql.= "telefono='$telefono', email='$email' WHERE id=$id"; echo "Registro Actualizado<p>";
} elseif ($delete) { // Borramos un registro $sql = "DELETE FROM agenda WHERE id=$id"; $result = mysql_query($sql); echo "Registro Borrado<p>";
} else { /* Esta parte se ejecuta si no hemos presionado el boton enviar, es decir no venimos de un formulario */ if (!$id) {
// Mostramos todos los registros de nuestra BD $result = mysql_query("SELECT * FROM agenda",$link)ot;SELECT * FROM agenda",$link); while ($myrow = mysql_fetch_array($result)) {
} } ?> <p><a href="<?php echo $PHP_SELF?>">Añadir un registro</a></p> <p><form method="post" action="<?php echo $PHP_SELF?>"></p> <?php if ($id) {
// editamos el registro seleccionado $sql = "SELECT * FROM agenda WHERE id=$id"; $result = mysql_query($sql); $myrow = mysql_fetch_array($result); $id = $myrow["id"]; $nombre = $myrow["nombre"]; $direccion = $myrow["direccion"]; $telefono = $myrow["telefono"]; $email = $myrow["email"]; // enviamos el id para poder editar el registro echo "<input type=hidden name="id" value=$id>";
Cabe destacar el uso de $PHP_SELF, esta es una funcion interna de PHP que nos devuelve la dirección del
script en el que se ejecuta.
Boton submit con imagen <INPUT TYPE=’image’ src=’imagen.gif’ name=’submit’>
Página 79 de 95
¿Como importar una base de datos?
Introducción Para empezar le hace falta proveerse de: 1. El archivo de salvaguarda (copia de seguridad) de su base, llamado dump o archivo SQL, obtenido mientras se salva la base base. (Consulte la guía sobre copias de seguridad en OVH o la documentación de su software si ha hecho usted mismo la copia de seguridad). 2. Los códigos de acceso a su base de datos - las habrá recibido por email en el momento de la creación de la base de datos o del alojamiento. Si ha perdido los códigos de acceso puede consultar nuestra guía de recuperación de contraseñas. Puede igualmente ser necesario, añadir esta linea al principio de su archivo de copia de seguridad (*.SQL):
use nombre_de_la_base; Donde "nombre_de_la_base" corresponde al nombre de la base dentro de la cual guardará todos los datos.
Condideraciones previas Si está importando un archivo de copia de seguridad semanal o diaria, asegúrese que la línea use nombre_de_la_base en el archivo SQL contiene el nombre original de la base de datos y no el nombre de la base semanal o diaria. Consulte las guías sobre las copias de seguridad y las exportación de las bases de datos para más información. Si está importando una base de datos muy extensa, puede ser necesario dividir la operación en varias etapas. Esto le evitará que el OkillerD anule la acción por ser demasiado pesada. Consulte las guías sobre OkillerD para más información. Al realizar la copia de seguridad o dump, puede ser necesario indicar qué versión de MySQL estamos usando. Recuerde que en OVH, las bases de datos generalmente usan MySQL 4.0 en el alojamiento compartido. Consulte su espacio Manager para saber qué versión usa su base de datos y cambiar de versión, si lo desea y es posible.
Mediante phpMyadmin Conéctese a su phpMyadmin bien a través del enlace enviado a su correo, bien a través de su espacio manager. Introduzca el nombre del usuario (nombre de la base de datos) y la contraseña. Seleccione el servidor de su base de datos y pulse Aceptar. A continuación diríjase a la opción Ventana de consulta (abajo a la izquierda) y seleccione la pestaña Importar archivo. Introduzca el fichero .SQL que desea importar y pulse Aceptar.
Página 80 de 95
Mediante script Una vez que tiene los datos descritos mas arriba, puede editar el script, del cual el código es el siguiente:
ATENCIÓN /!\ En los siguientes scripts, reemplace nombre_de_la_base.sql por el nombre de su archivo, servidor_sql por el nombre del servidor en el que esta instalado su base, nombre_de_la_base por el nombre de su base de datos y contraseña por la contraseña asociada a su base Script en PHP (importbase.php) :
<? echo "Su base esta siendo restaurada......."; system("cat nombre_de_la_base.sql | mysql --host=servidor_sql --user=nombre_de_la_base --password=contraseña nombre_de_la_base"); echo "Fin. Su base está emplazada en su alojamiento."; ?>
Otro modo de hacerlo mucho más sencilla es la siguiente. Partamos de que tenemos el fichero de respaldo basededatos.sql (fichero de texto) construido con phpMyAdmin en nuestro servidor local. Arrancamos el phpMyAdmin remoto: http://herramientas.educa.madrid.org/admin_dinamicas Si aprece en la pantalla principal la opción de importar ya está, si no, hay que irse al marco de la izquierda y hacer clic sobre el icono de SQL y allí aparece importar fichero de texto. Basta con elegir el fichero de texto basededatos.sql y esperar.
WARNING session_start() Todas las ayudas en Google apuntan a que hay espacios o algo antes y después de las etiquetas <? ó ?> Para Windows no es preciso tanta exactitud pero se conoce que para los servidores Linux sí. Lo solucioné quitando todo el código que pudiera enviar cabeceras. Dejé sólo el fichero comenzando por <? …… ?> Un problema común es que aunque el fichero comience sin espacios, dentro tenga un include que implique otra cabecera. No puede haber más de una cabecera por página y eso provoca el que el servidor nos prevenga de que ya se incluyó una cabecera en tal página que aparentemente no estamos viendo pero si cargado. El otro tipo de error tiene que ver con que en session.save_path=”/tmp” será válido para Linux pero para Windows debe ser: session.save_path=”C:/tmp”, es decir con la ruta completa.
Página 81 de 95
Listar directorios y subdirectorios con PHP http://www.desarrolloweb.com/articulos/listar-directorios-subdirectorios-php.html En PHP existen muchas funciones para el manejo del sistema de archivos del servidor. Con su ayuda se pueden hacer fácilmente todo tipo de acciones sobre la estructura de ficheros y directorios del servidor. Hemos visto ya interesantes ejemplos sobre estas funciones en nuestro Manual de gestión de ficheros con PHP. En este taller veremos una manera de hacer un listado de los directorios que cuelgan de una carpeta dada. La función que vamos a realizar recibe una ruta y simplemente hace un listado de los directorios que cuelgan de esa ruta. A su vez, esos directorios pueden tener otros subdirectorios dentro y estos a su vez otros, en la típica estructura de árbol. El script debe recorrer todos los subdirectorios del árbol y listarlos. Para realizar esto, lo más habitual es hacer una función recursiva, que es una función que se llama a si misma para hacer todo el trabajo. En nuestro caso, como se decía, vamos a utilizar unas cuantas funciones de PHP para facilitarnos la tarea. Son las siguientes: is_dir() que recibe una ruta y devuelve un boleano. True si es un directorio y flase si no lo es. opendir() que recibe la ruta de un directorio y genera un gestor de directorio, que utilizaremos luego para extraer los subdirectorios. readdir() recibe un gestor de directorio devuelto por opendir() y sirve para leer todo el contenido de un directorio, tanto archivos como subdirectorios. Nosotros lo utilizaremos para obtener cada uno de los subdirectorios que contiene una ruta. En la primera llamada devuelve el primer archivo o subdirectorio, en la siguiente devuelve en segundo. Es decir, cuando se vuelve a llamar devuelve siempre el siguiente fichero y continúa hasta que se acaban, devolviendo false cuando no queda ninguno. closedir() recibe un gestor de directorio y lo cierra. Ahora veamos la función, que está comentada. function listar_directorios_ruta($ruta){ // abrir un directorio y listarlo recursivo if (is_dir($ruta)) { if ($dh = opendir($ruta)) { while (($file = readdir($dh)) !== false) { //esta línea la utilizaríamos si queremos listar todo lo que hay en el directorio //mostraría tanto archivos como directorios //echo "<br>Nombre de archivo: $file : Es un: " . filetype($ruta . $file); if (is_dir($ruta . $file) && $file!="." && $file!=".."){ //solo si el archivo es un directorio, distinto que "." y ".." echo "<br>Directorio: $ruta$file"; listar_directorios_ruta($ruta . $file . "/"); } } closedir($dh); } }else echo "<br>No es ruta valida"; } La función recibe una ruta. Por ejemplo, si queremos que liste los directorios de la carpeta donde está el archivo la llamaríamos con:
Página 82 de 95
listar_directorios_ruta("./"); Lo primero que se hace es comprobar si la ruta recibida es un directorio. if (is_dir($ruta)) { Si lo es realizaremos las acciones, pero si no lo es, mostraremos un mensaje diciendo que no es una ruta válida. En el siguiente if extraemos el gestor de directorio y lo guardamos en una variable $dh if ($dh = opendir($ruta)) Con un bucle while recorreremos cada elemento de ese directorio. while (($file = readdir($dh)) !== false) Dentro del bucle hacemos un if para saber si el elemento es un directorio if (is_dir($ruta . $file) && $file!="." && $file!="..") En caso que sea un directorio, simplemente escribimos en la página. Además, tenemos que ver si ese directorio contiene a su vez otros directorios. Para eso llamamos a la función de nuevo pasándole ese nuevo directorio. Así la función se llama a si misma para mostrar todo el árbol de carpetas. Por último se cierra el gestor de directorio abierto previamente. closedir($dh);
Funciones de gestión de directorios
Funciones de gestión de directorios Función Descripción Sintaxis
opendir Abre un directorio situado en $path y le asigna un identificador $dir $dir = opendir($path)
readdir Lee un elemento del directorio $dir abierto previamente con opendir y desplaza el
puntero al elemento siguiente readdir($dir)
rmdir Elimina el directorio $dir rmdir($dir)
mkdir Crea un directorio situado en $path con los derechos de acceso $derechos (entero) mkdir($path, $derechos)
rewinddir Vuelve el puntero de lectura del directorio $dir al primer elemento rewinddir($dir)
closedir Cierra el directorio $dir abierto previamente con opendir closedir($dir)
La forma de tratar con estas funciones es la similar a la que ya hemos visto para le lectura
secuencial de archivos. Podemos distinguir tres etapas elementales:
• Apertura del directorio por medio de la función opendir asignándole al mismo tiempo un identificador
• Realización de las tareas necesarias en relación con ese directorio
Página 83 de 95
¿Cómo habilitar y deshabilitar botones desde php?
Otro modo es recurrir a javascript. Supongamos que tenemos un formulario html en el que hay un botón que queremos desactivar en un determinado evento sobre el formulario. Si todo ocurre en el cliente el lenguaje apropiado es javascript, no php. El ejemplo supone que al hacer clic sobre el botón “busqueda” (name="busqueda") del formulario datos (name="datos"), desactiva el botón de nombre “borrar” (name="borrar" ) <script language="javascript"> function busca(exp) {datos.borrar.disabled="true"; //…………….. resto de la funcion; } <form action="actualizar_insertar.php" method="post" onSubmit="return validacion(datos)" name="datos" id="datos"> <div style="background-color:#FFCCFF; border-color:#000000; border-style:solid; border-width:1px; width:80%" > <input name="expediente" type="text" size="4" maxlength="4" s> <input name="busqueda" type="button" onClick="javascript:busca(expediente)" value="PULSAR PARA BUSCAR POR EXPEDIENTE"> </div> <div style="background-color:#FFCCFF; border-color:#000000; border-style:solid; border-width:1px; width:80%" > <input type='reset' value='Deshacer'> <input type='button' value='Nuevo Expediente' onClick="nuevo()"> <input type='button' name="borrar" id="borrar" value='Eliminar Expediente' onClick="eliminar(datos)"> </div> </form>
¿Cómo transferir información entre páginas? Desde código php: if (($usuario=="0000") && ($contrasena="1r")) {header ("Location:matriculasadmin.php?usuario=$usuario&contrasena=$contrasena");} Else // de paso enviamos una variable php al marco principal desde javascript.
Página 84 de 95
this.parent.document.location.href="matriculasadmin.php?expediente=" + <? echo $expediente ?>; Con get (nos comunicamos con filtro.php, enviandole varias variables al hacer click sobre el valor de un campo de una base de datos) echo "<a href='filtro.php?pag=$pag&orden=$campoorden&tipoordenacion=$tipoordenacion'>".strtoupper(mysql_field_name($resnuevo,$i))."</a>"; Mediante eventos de javascript <script language="javascript"> function envia(listadetipo,listadeestudio) {location.href="matriculaalumno.php?estudio=" + listadeestudio.value + "&tipo=" + listadetipo.value +""; } function validacion(t) {txtmascara=t.cbomascara.value; if (txtmascara==' ') {alert("Debe introducir un estudio y después seleccionar una máscara"); return false;} else return true; } // fin de la funcion. </script> ………………………….. echo "<select name='cboestudio' size='1' onChange='envia(cbotipo,cboestudio)'>"; echo "<form action='actualizar_insertar_academicos.php' method='POST' style=' background-color:#C6FBFF; border-color:#000000; border-style:solid; width:90%' name='academicos' id='academicos' onSubmit='return validacion(academicos)'>";
¿Algunos campo de texto sólo muestran hasta el primer espacio en blanco, cómo lo soluciono? <input type=”text” value=’<? echo $cadena ?>’……> muestra la cadena completa. <input type=”text” value=\’$cadena\’……> muestra hasta el primer espacio.
Página 85 de 95
¿Cómo evitar el pantallazo molesto de la regeneración de un formulario cuando al hacer clic sobre un control tengo que solicitarle a php que regenere la página? De paso como cargo una lista desplegable conforme a los valores de otra?. La técnica a aplicar es añadir a la página en cuestión un marco oculto (<iframe>)
Es decir la página que en principio se regenera, que suele ser un formulario de introducción de datos, tiene adosado un marco sin borde ni dimensiones con la propiedad scr=””. Los eventos en el cliente los controla javaescript, pero si necesitamos ir a una base de datos para rellenar otro campo del formulario, esto lo hace php. Supongamos el caso de que al hacer clic sobre una lista desplegable se debe rellenar otra lista desplegable con una colección de opciones (options) que se deben extraer de una base de datos. Si nos salimos del formulario html para ir al script en el servidor y regeneramos el fomulario con los datos descargado se produce una regeneración de la pantalla bastante molesta. La solución está en que al hacer clic sobre la primera lista (evento onChange) cargamos en el <iframe>, en la propiedad src el script que se encarga de buscar en la base de datos la colección de datos. Como el iframe está oculto, hasta hora no hemos notado nada, sólo un tiempo muerto: el precisado para abrir la base de datos y que el servidor nos devuelva la información que precisemos. De paso el script cargado en src, que no olvidemos está en un marco de la principal y que ya tiene la información que precismos, mediante script de cliente (ya estamos en el cliente) modifica la lista desplegable de ejemplo o modifica las variables o controles html que deseemos. El usuario verá actualizada su lista desplegable y no habrá notado nada en el va y viene al <iframe> Veamos un ejemplo concreto. El siguiente código corresponde a un segmento de la página principal que espera que hagamos clic sobre la lista desplegable cboestudio para rellenar la lista desplegable cbomascara con los datos que obtendremos con la función javascript envia() <script language=”javascript”> function envia(listadeestudio) {modificado_academicos="true"; m=document.getElementById("cbomascara").length; for (j=0;j<m;j++) {document.getElementById("cbomascara").remove("j");} document.getElementById("marcooculto").src="hayamascara.php?estudio=" + listadeestudio.value; } </script> <form action="actualizar_insertar.php" method="post" onSubmit="return validacion(datos)" name="datos" id="datos"> <! - - Cargamos la lista desplegable “cboestudio” --> <? echo "<select name='cboestudio' size='1' onChange='envia(cboestudio)'>"; include("conexionpre.php"); $sqlcbo="SELECT Cod_est, Orden FROM estudios ORDER BY Orden;"; If ($res=send_sql($db,$sqlcbo)) {$numf=mysql_num_rows($res); for ($f=0;$f<$numf;$f++) {$fila=mysql_fetch_array($res); //cargo cada fila en orden $est=$fila['Cod_est'];$ord=$fila['Orden']; if ($est==$valor) {echo "<option selected value='$est'>".$est."</option>";}
Página 86 de 95
else {echo "<option value='$est'>". $est."</option>";} } } echo "</select>"; // ********** llenamos la lista “cbomascara” echo "<select name='cbomascara' style='width:70px' size='1' onChange='javascript:cambio_mascara()'>"; //.. resto de instrucciones que rellenarían la segunda lista desplegable echo "</select>"; …….. resto del formulario ?> </form> <! - -…… y el marco oculto con src esperando ser rellenado - -> <IFRAME name="marcooculto" id="marcooculto" src="" style="width:0%; height:0%; border-width:0px; border-style:solid "></iframe> La función envia se encarga en un principio de vaciar la lista cbomascara m=document.getElementById("cbomascara").length; for (j=0;j<m;j++) {document.getElementById("cbomascara").remove("j");} Para así evitar que se añadan nuevas <option value=…..</option> a las primitivas que pudiera haber cargadas. A continuación llamamos al script que trabajará en el marco oculto, en segundo plano, sin que nos enteremos y que se encarga, mediante un script de javascript de llamar al marco principal: “parent” y cargar en la lista cbomascara cada uno de las opciones que andabamos buscando. document.getElementById("marcooculto").src="hayamascara.php?estudio=" + listadeestudio.value; hayamascara.php <? include("conexionpre.php"); include("funcionesadmin.php"); $estudio=$_GET['estudio']; ?> </head> <body> <? $sqlcbo="SELECT Mascara, Cod_Est FROM mascaras WHERE Cod_est='$estudio' ORDER BY Mascara"; If ($res=send_sql($db,$sqlcbo)) {$numf=mysql_num_rows($res); for ($f=0;$f<$numf;$f++) {$fila=mysql_fetch_array($res); //cargo cada fila en orden $mas=$fila['Mascara']; ?> <script language="javascript"> var oOption = document.createElement("OPTION"); this.parent.document.getElementById("cbomascara").options.add(oOption); oOption.innerText ="<? echo $mas ?>"; oOption.Value ="<? echo $mas ?>"; </script> <? } ?>
Página 87 de 95
¿Cómo ocultar/mostrar una capa html en función de un valor de una variable php?. Primero en html hay que declarar un div con su identificación y su style: <div align='center' id="cabseg" style="visibility:visible">2ª OPTA</div> Y cuando se precise intercalar un script de javascript que llame al estilo de la capa y le cambie su visibilidad: <? if ($estudio!="4º ESO") {?> <script language="javascript"> cabseg.style.visibility="hidden"; opt2_2.style.visibility="hidden"; opt2_3.style.visibility="hidden"; </script> <? } else { ?> <script language="javascript"> cabseg.style.visibility="visible"; opt2_2.style.visibility="visible"; opt2_3.style.visibility="visible"; </script> <? } ?>
¿Cómo utilizar una variable php dentro de un javascript? Supongamos que queremos mostrar un varible php $variablephp en un alert() <script language=”javascript”> Var variablejs=”<? echo $variablephp ?>” //imprescindibles las comillas. alert(variablejs); // tambien valdría alert(“<? echo $variablephp ?>”); </script> Otro ejemplo <? function cambio_mascara(cbomascara,estudio) { // alert("has cambiado de máscara"+ document.getElementById("cbomascara").value+document.getElementById("cbomascara").length); // datos.txtmascara.value=(datos.cbomascara.options[datos.cbomascara.selectedIndex].text); modificado_academicos="true"; alert(cbomascara.value); alert(estudio); } // tengo que dejar php y abri javascript ?> <script language="javascript"> sstudio="<? echo $estudio ?>"; //convierto la variable php $studio en variable js estudio alert(estudio); </script> <? echo "<select name='cbomascara' id='cbomascara' style='width:70px' size='1' onChange='cambio_mascara(cbomascara,estudio1)'>";
Página 88 de 95
¿Cómo conseguir interrelacionar claves externas con más de un campo?
<? // creaciones.php include("conexionpre.php"); include("funcionespre.php"); $sql="ALTER TABLE con_sueltas ADD FOREIGN KEY (cod_est, cod_suelta) REFERENCES asi_sueltas (cod_est, cod_suelta) ON UPDATE CASCADE ON DELETE CASCADE"; If ($res=send_sql($db,$sql)) { echo "Consulta: <br> $sql"; }?> (cod_est +cod_suelta) debe ser indice en con_sueltas así como clave principal en asi_sueltas. El resultado es este, que de otra manera no deja completarse por faltar siempre un indice.
¿Cómo catenar campos desde un Select….as? Sencillo: Select concat(campo1,campo2, ….. campon) as campoconcatenado from…..
¿Cómo conseguir eliminar campos de una lista desplegable o añadirlos mediante una matriz intermedia o como trasladar de una lista a otra? Una muy buena ayuda está en http://www.mredkj.com/tutorials/tutorial004.html no obviar los enlaces de los diferentes ejemplos más o menos avanzados. Todos son muy útiles.
Usos de try….catch(ex) Un ejemplo lo podemos entresacar de los siguientes scripts. Para IE se comporta de modo diferente, un modo de evitar el error y solucionar el problema es el uso de este atrapa errores.
Página 89 de 95
<script language="javascript"> var oOption = document.createElement('option'); oOption.text = '<? echo $sue ?>'; oOption.value ='<? echo $cod_sue ?>'; var elSel = parent.document.getElementById("cbonomatriculadas"); try {elSel.add(oOption, null); } // exploradores estandard no va en IE catch(ex) {elSel.add(oOption);} // sólo IE. </script> function cambio_mascara(cbomascara,usuario)
{modificado_academicos="true"; alert(document.getElementById("cbomascara").value); alert(usuario); if (cbomascara.value=="_SOLO") {m=document.getElementById("cbonomatriculadas").length; for (j=0;j<m;j++) {document.getElementById("cbonomatriculadas").remove("j");} n=document.getElementById("cbomatriculadas").length; for (j=0;j<n;j++) {document.getElementById("cbomatriculadas").remove("j");} } document.getElementById("marcooculto").src="rellenasueltas.php?mas=" + cbomascara.value + "&usr=" +usuario; }
Id versus name en los formularios Si se va a pasar el nombre de un campo de un formulario mediante un evento:onClick, onSubmit, etc a una función javascript debe utilizarse name. Si se va a utilizar el campo mediante getElementById(“identificado”) debe utilizarse Id. Lo mejor es añadir siempre los dos.
¿Cómo llamar desde un controlador de evento a varias funciones javascript seguidas? echo "N.I.F.:<input type='text' name='dni' id='dni' size='10' maxlength='10' value='$dni' onChange='javascript:cambia_a_may(dni);validadni(dni)'><br>"; El anterior ejemplo toma un campo de texto ‘dni’, lo pasa a mayúsculas y valida si la letra es una letra válida para el nif.
Página 90 de 95
¿Se puede hacer interactuar codigo php con JavaScript y html en la misma página.php? Sí. He aquí un ejemplo de cómo al hacer clic sobre un cuadro de lista de un formulario html vacío, forzamos a una función JavaScript a llenar dicho cuadro de lista llamando a un script php que abre una base de datos SQLite (para trabajar con MySql basta cambiar el prefijo sqlite_ por mysql_ en todas las funciones) y lo rellena. Busqueda.php <? include('conexion.php'); include('func.php'); ?> <script language="javascript"> function llenatematicas() { <? $sqlcbo="SELECT Tematica FROM TEMATICAS ORDER BY Tematica;"; If ($res=send_sql($db,$sqlcbo)) {$numf=sqlite_num_rows($res); for ($f=0;$f<$numf;$f++) {$fila=sqlite_fetch_array($res); //cargo cada fila en orden $mas=$fila['Tematica']; ?> var oOption = document.createElement('option'); oOption.text = '<? echo $mas ?>'; oOption.value ='<? echo $mas ?>'; var elSel =document.getElementById("TEMA"); try {elSel.add(oOption, null);} // standards compliant; doesn't work in IE catch(ex) {elSel.add(oOption);} // IE only <? } // fin del for } // fin del if ?> }// fin de la función tematica; </script> <html> <head> <body><font size="0">(c) Vicente Ordóñez Díaz</font> <FORM ACTION="filtro.php" METHOD="POST" id="consulta"> ……… <select name='TEMA' size='1' id='TEMA' style='width:215' onFocus="javascript:llenatematicas()"> ……….. </form> </body></html>
Página 91 de 95
¿Es difícil trabajar con SQlite? SQlite es una extensión de PHP 5 y superior que sólo precisa de asegurarse que en php.ini los renglones siguientes están descomentados y en este orden. Si falta alguún rengón basta con escribirlo. Eso sí, asegurarse de que en la carpeta ext están las librerías .dll correspondientes. extension=php_pdo.dll extension=php_sqlite.dll Suele venir por defecto en PHP 5. Basta con ejecutar phpinfo() desde una página php y observar si figura el apartado de Sqlite
Por cierto educamadrid todavía anda con la versión PHP 4.7 en Enero de 2009. y por supuesto no va. Si la base de datos no es muy grande (< 2 Gb) y no es muy visitada y no necesita de identificarse para visitarla SQLite es un remedio muy bueno entre manejar un fichero de datos y un motor como MySql.
¿Puedo pasar fácilmente de Access a SQLite en Window? Sí Basta conocer las técnicas de ODBC. Existe un ODBC para SQlite: “sqliteodbc.exe” para Windows Que debe instalarse. http://www.patthoyts.tk/sqlite3odbc.html Una vez instalado la técnica es la siguiente. Partamos de una base de datos de Access (biblioteca.mdb) con varias tablas depuradas y un sitio creado en nuestro servidor local (BiblioSQLite).
Página 92 de 95
Es importante fijarse en los tipos de datos de las tablas: Los enteros que sean enteros no dobles, las fechas que tengan el formato apropiado (mejor pasarlas a texto), etc… para evitar desbordamientos y problemas de trasvase de información del ODBC Pensando en consultas elementales que podamos hacer a un fichero de biblioteca como
Preparemos una tabla en la base de datos de ACCESS que denominaremos UNIVERSAL y que contenga la información requerida en el formulario anterior. Dicha tabla será la que nos sirva de ejemplo para pasara a SQLite. 1. Creamos la base de datos SQLite “bibliosqlite.db” en nuestro sitio BiblioSQlite con la página: 01_crearbasededatos.php <html> <head> <title>Creación de bases de datos sqlite</title> <? // creamos una conexión la base de datos(le introducimos el nombre del archivo donde se almacena) $db = sqlite_open("bibliosqlite.db"); // se cierra la conexión a la base de datos sqlite_close($db); ?> </head> <body> Creada la base de datos especificada hecho </body> </html>
2. Creamos el DSN de usuario apropiado
Desde Herramientas Administrativas/Orígenes de Datos ODBC
Página 93 de 95
observarás si has ejecutado correctamente el sqliteodbc.exe pues tendrás tres controladores relacionados con SQLite
Agreguemos un nuevo DSN de usuario basado en el controlador SQLite ODBC driver con el nombre que deseemos y enlazándola con la base de datos que queramos: bibliosqlite.db
Página 94 de 95
3. Exportemos de Access a SQLite Abramos Access, busquemos la tabla que queramos exportar: UNIVERSAL. Con el ratón encima del nombre de la tabla pulsemos el menú contextual (boton derecho) y elijamos exportar. Se nos pedirá el tipo de archivo:
Base de datos ODBC() (la última opción) Continuamos aceptando hasta que lleguemos a Seleccionar el origen de datos. En Origen de datos del Equipo elegimos es DSN que construimos en el apartado anterior y ya está. 4. Comprobemos la estructura de nuestra base de datos exportada. 02_Estrutura.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Información de estructura</title> <meta http-equiv="Content-type" content="text/html;charset=ISO-8859-1" /> <style type="text/css"> * { font-family: monospace } </style> </head> <body> <h1>Información de estructura</h1> <?php try { // Intentamos la apertura con el API orientada a objetos $bddLibros = new SQLiteDatabase('bibliosqlite.db'); // si llegamos aquí es que no se ha producido una excepción // y por tanto se ha abierto sin problemas echo '<p>Apertura con <b>SQLiteDatabase</b> satisfactoria</p>'; } catch(Exception $e) { // capturar la posible excepción echo "<p>Fallo en la apertura con <b>SQLiteDatabase</b> $e</p>"; exit; } // Obtenemos de la tabla de sistema la lista // de nombres de tablas existentes en la base // de datos $Tablas = $bddLibros->arrayQuery( "SELECT name FROM SQLITE_MASTER WHERE ". "type='table'"); // Por cada tabla foreach($Tablas as $Tabla) { // mostramos su nombre echo "<h3>Tabla : ${Tabla['name']}</h3>";
Página 95 de 95
// Recuperamos la matriz con los nombres y // tipos de columnas $Tipos = $bddLibros->fetchColumnTypes( $Tabla['name']); // mostrando esa información foreach($Tipos as $Nombre => $Tipo) echo "Columna <b>$Nombre</b> es de tipo ". "<b>$Tipo</b><br />"; } ?> </body> </html> 4. Veamos nuestra tabla exportada como ha quedado. 03_mostrartabla.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Ejemplo de utilización de funciones sqlite</title> <? // creamos una conexión la base de datos(le introducimos el nombre del archive donde se almacena) $db = sqlite_open("bibliosqlite.db"); // ejecución de consulta de selección $result = sqlite_query($db, "SELECT * FROM UNIVERSAL "); // muestra de los resultados con un bucle while ($row = sqlite_fetch_array($result)) { // echo "ID --> ".$row["id"]." Nombre --> ". $row["nombre"]."<br>"; print_r($row);echo "<br><br>"; } // se sierra la conexión a la base de datos sqlite_close($db); ?> </head> <body> </body> </html>