*gracias Ángel.
Enlaces:
Severn Cullis en la wikipedia: http://es.wikipedia.org/wiki/Severn_Cullis-Suzuki
Este blog está dedicado a la recolección de información relacionada con las nuevas tecnologías ( tecnoloxía xa), especialmente, con las vinculadas a la informática. La idea es centralizar y compartir la información y cada manual o tutorial que voy recolectando para las clases tanto de administración de sistemas como de explotación de sistemas informáticos de modo que estén disponibles para alumnos y resto de interesados. (IES A Carballeira, Ourense)
Conexión con el servidor de bases de datos
La instrucción OR DIE
Lista de bases de datos existentes
<?
if($c=mysql_pconnect ("localhost","pepe","pepa")){
echo "<h2> Conexión establecida con el servidor</h2><br>";
# recoge en una nueva variable que hemos llamado $p
# un nuevo identificador, $p
$p=mysql_list_dbs($c);
# utilizando ese nuevo identificador podemos extraer el número
$numero=mysql_num_rows($p);
echo "Hay ",$numero, " bases de datos en el servidor<br>" ;
#este bucle (desde cero hasta el número
# nos irá listando los nombres correspondientes a esos numeros de orden
for ($i=0;$i<$numero;$i++) {
echo mysql_db_name($p, $i),"<br>";
}
if(mysql_close($c)){
echo "<h2> Conexión cerrada con exito</h2><br>";
}else{
echo "<h2> No se ha cerrado la conexión</h2>";
};
}else{
echo "<h2> NO HA SIDO POSIBLE ESTABLECER LA CONEXIÓN</h2>";
}
?>
Crear una base de datos
<?
if($conexion=mysql_connect ("localhost","pepe","pepa")){
echo "<h2> Conexión establecida con el servidor</h2><br>";
if(mysql_query("CREATE DATABASE otraBase")){
echo "<h2> Base de datos creada</h2><br>";
}else{
echo "<h2> No ha sido posible crear la base de datos</h2><br>";
};
if(mysql_close($conexion)){
echo "<h2> Conexión cerrada con exito</h2><br>";
echo "El identificador de conexion es:",$conexion;
}else{
echo "<h2> No se ha cerrado la conexión</h2>";
};
}else{
echo "<h2> NO HA SIDO POSIBLE ESTABLECER LA CONEXIÓN</h2>";
}
?>
Borrar una base de datos
<?
if($c=mysql_connect ("localhost","pepe","pepa")){
echo "<h2> Conexión establecida con el servidor</h2><br>";
if(mysql_query ("DROP DATABASE otraBase",$c)){
echo "<h2> Base de datos borrada</h2><br>";
}else{
echo "<h2> No ha sido posible BORRAR la base de datos</h2><br>";
};
if(mysql_close($c)){
echo "<h2> Conexión cerrada con exito</h2><br>";
echo "El identificador de conexion es:",$conexion;
}else{
echo "<h2> No se ha cerrado la conexión</h2>";
};
}else{
echo "<h2> NO HA SIDO POSIBLE ESTABLECER LA CONEXIÓN</h2>";
}
?>
Depurando los procesos de creación y borrado de bases de datos
<?
# introducimos en una variable el nombre de la base de datos a crear
$crear="mispruebas";
#conectamos con el servidor y comprobamos la conexión
if ($conexion=mysql_pconnect ("localhost","pepe","pepa")){
echo "<h2> Conexión establecida con el servidor</h2><br>";
$p=mysql_list_dbs($conexion);
$numero=mysql_num_rows($p);
$comprueba=0;
#comprobamos si existe una base con ese nombre
# si existe hace la variable comprueba igual a 1
# si no existe la variable comprueba sera 0 tal como la hemos
# puesto aquí arriba
for ($i=0;$i<$numero;$i++) {
if ($crear==mysql_db_name($p, $i)){
$comprueba=1;
};
}
#si la base de datos no existe la creamos y escribimos el mensaje de exito
#si existe, avisamos de su existencia y evitamos intentar crearla
# observa que como nombre del la nueva base puede ponerse una variable
if($comprueba==0){
if(mysql_query ("CREATE DATABASE $crear")){
echo "<h2> Base de datos $crear creada</h2><br>";
}else{
echo "<h2> No ha sido posible crear la base de datos $crear</h2><br>";
};
}else{
echo "<h2> La base de datos $crear YA EXISTE</h2><br>";
} ;
# cerramos la conexión con el servidor
if(mysql_close($conexion)){
echo "<h2> Conexión cerrada con exito</h2><br>";
}else{
echo "<h2> No se ha cerrado la conexión</h2>";
};
}else{
echo "<h2> NO HA SIDO POSIBLE ESTABLECER LA CONEXIÓN</h2>";
}
?>
<?
# introducimos en una variable el nombre de la base de datos a borrar
$borrar="mispruebas";
#conectamos con el servidor y comprobamos la conexión
if ($conexion=mysql_connect ("localhost","pepe","pepa")){
echo "<h2> Conexión establecida con el servidor</h2><br>";
$p=mysql_list_dbs($conexion);
$numero=mysql_num_rows($p);
$comprueba=0;
#comprobamos si existe una base con ese nombre
# si existe hace la variable comprueba igual a 1
# si no existe la variable comprueba sera 0 tal como la hemos
# puesto aquí arriba
for ($i=0;$i<$numero;$i++) {
if ($borrar==mysql_db_name($p, $i)){
$comprueba=1;
};
}
#si la base de datos existe la borramos y escribimos el mensaje de exito
#si no existe, avisamos de su inexistencia y evitamos intentar borrarlas
# observa que como nombre del la nueva base puede ponerse una variable
# AHORA BORRAREMOS SOLO EN EL CASO DE QUE EXISTA
# que significa que $comprueba es igual a 1
if($comprueba==1){
if(mysql_query ("DROP DATABASE $borrar")){
echo "<h2> Base de datos $crear BORRADA</h2><br>";
}else{
echo "<h2> No ha sido posible BORRAR LA BASE de datos $borrar</h2><br>";
};
}else{
echo "<h2> La base de datos $borrar NO EXISTIA</h2><br>";
} ;
# cerramos la conexión con el servidor
if(mysql_close($conexion)){
echo "<h2> Conexión cerrada con exito</h2><br>";
}else{
echo "<h2> No se ha cerrado la conexión</h2>";
};
}else{
echo "<h2> NO HA SIDO POSIBLE ESTABLECER LA CONEXIÓN</h2>";
}
?>
Tipos de campos MySQL
CREACIÓN DE LAS BASES DE DATOS NECESARIAS PARA EL CURSO
Crear base de datos EJEMPLOS |
Automatizar la conexión Con nuestros conocimientos sobre PHP ya estamos en condiciones de hacer más cómoda la conexión. Creemos una función que realice de forma automática la conexión con MySQL y guardémosla en nuestro fichero mysql.inc.php <? # estas son las variables anteriores $mysql_server="localhost"; $mysql_login="pepe"; $mysql_pass="pepa"; # creemos una nueva variable $c sin asignarle ningún valor # para que pueda recoger el identificador de conexión # una vez que se haya establecido esta $c; # escribamos la función que hace la conexión # como pretendemos que el valor del identificador # sea usado fuera de la función, para recuperar su valor # pasaremos ese valor por referencia anteponiendo & al # nombre de la variable function conecta1(&$c){ # para usar las variables anteriores en la funcion # hemos de definirlas como globales global $mysql_server, $mysql_login, $mysql_pass; if($c=mysql_connect($mysql_server,$mysql_login,$mysql_pass)){ print "<br>Conexión establecida<br>"; }else{ print "<br>No ha podido realizarse la conexión<br>"; # el exit lo incluimos para que deje de ejecutarse # el script si no se establece la conexión exit(); } } # esta función asignará a $c el valor del identificador # repetimos la misma función con otro nombre # ahora quitaremos el mensaje de conexión establecida # consideraremos que si no hay mensaje se ha establecido # asi quedará limpia nuestra página function conecta2(&$c){ global $mysql_server, $mysql_login, $mysql_pass; if($c=mysql_connect($mysql_server,$mysql_login,$mysql_pass)){ }else{ print "<br>No ha podido realizarse la conexión<br>"; exit(); } } ?> Si sustituyes el contenido de tu mysql.inc.php por el que tienes aquí arriba –puedes eliminar la líneas de comentario al hacerlo– estaremos en disposición de ejecutar scripts como este. En este ejemplo utilizaremos la primera función: Ver código fuente ejemplo153.php y ahora haremos uso de la segunda Ver código fuente Ejecutar ejemplo Tipos de campos en MySQL MySQL tiene habilitados diversos tipos de campos que en una primera aproximación podrían clasificarse en tres grupos:
Campos numéricos MySQL soporta los tipos numéricos exactos(INTEGER, NUMERIC, DECIMAL, y SMALLINT) y los tipos numéricos aproximados (FLOAT, DOUBLE precision y REAL). Los campos que contienen números enteros admiten el parámetro UNSIGNED, que implica que no admita signos, por lo que solo aceptaría enteros positivos. Todos los campos numéricos admiten el parámetro ZEROFILL cuya función es completar el campo con ceros a la izquierda hasta su longitud máxima. Tipos de campos numéricos enteros Estos son los distintos tipos de campos numéricos enteros que admite MySQL. Los parámetros señalados entre corchetes son opcionales.
Números de coma flotante Por la estructura binaria de los microprocesadores y habida cuenta de que algunos números no enteros -sin ir más lejos, el 0.1- requerirían infinitos caracteres binarios para su representación exacta, se hace necesario introducir un redondeo en su tratamiento informático y como consecuencia de ello asumir que se generan errores de medida.Esta circunstancia obligó al tratamiento de los números decimales mediante el llamado Standar de Aritmética de Punto Flotante, un algoritmo definido por la IEEE (Institute of Electrical and Electronics Engineers) que unificó los procesos de representación de números en ordenadores con lo que son uniformemente controlables los errores introducidos. El Standar de Aritmética de Punto Flotante estableció dos niveles de precisión:
|
|
La aplicación MySql
Bases de datos y tablas
¿Cómo empezar con las bases de datos?
Nuestras bases de datos
Servidores activos
Organización de la información
La tabla user
Creación de un fichero INCLUDE
|
¿Qué es un header?
¿Cómo colocar las cabeceras?
• No puede aparecer delante de un header ninguna etiqueta HTML ni ningún contenido de este tipo.
• Ni siquiera se permite que se les anteponga una línea en blanco.
Los diferentes haeder
Otra funciones PDF
Utilización de header En este ejemplo se utilizan algunas header e incluimos como comentarios las utilidades de cada una de ellas <? #esta variable recoge el nombre del fichero a visualizar $fichero="ejemplo132.pdf"; #esta función determina la longitud en bytes del fichero $len = filesize($fichero); /* esta cabecera -válida para HTTP/1.1- ordena al navegador que no permita guardar la página que no permita que se almecene en la caché del cliente*/ header("Cache-Control: no-store, no-cache, must-revalidate"); /* esta otra cabecera -válida para HTTP/1.0 indica al navegador que no guarde la página en la caché del cliente he puesto ambas opciones para cubrir todo el especto probable */ header("Pragma: no-cache"); /* esta cabecera especifica al navegador el contenido que va a recibir que en este caso no sería otra cosa que algo que requiere una aplicacion capaz de interpretar ficheros pdf */ header("Content-type: application/pdf"); /* como la norma de los headers establece que siempre que se conozca el tamaño del contenido enviado se incluya en la cabecera ese contenido, pues... incluimos el tamaño ya que "filesize" nos midió el fichero y guardo esa medida en la variable $len... pero... fue posible utilizar esa función antes de las header porque esa medida no fue mandada a la salida... si hubiéramos escrito antes de los header... algo así como Echo $len; ... la habríamos fastidiado... ya habríamos tenido error en las cabeceras...*/ header("Content-Length: $len"); /* con esta otra header indicamos ls forma de presentación de el contenido del documento... permite dos posibilidades inline (la que he puesto aquí) o attachment (que seria como fichero anexo) fijate que en este "header" he puesto en filename un nombre distinto del que tenía el fichero original... eso no tiene importancia solo será el nombre con el que se guardará en la caché del cliente en el caso de que no hubiéramos incluido la cabecera "no cache" que dicho sea de paso... la he puesto aquí como ejemplo pero que serían absolutamente innecesarias para este ejemplo de visualización del documento */ header("Content-Disposition: inline; filename=felipe.pdf"); /* ya se acabaron las cabeceras del documento aquí le decimos al servidor que lea el fichero y lo envie al navegador del cliente... este ya lo interpretará siguiendo las especificaciones que le hemos incluido las cabeceras....*/ readfile($fichero); ?> Visualización ficheros PDF creados en memoria <? # Creamos el PDF con las nuevas funcionesn> $g = PDF_new(); pdf_open_file($g); # A partir de aquí todo es igual a los ejemplos anteriores pdf_begin_page($g, 595, 842); $imagen1 = pdf_open_jpeg($g, "./images/cruz.jpg"); $h=0.5; $v=0.8; pdf_save($g); $x1 = pdf_get_value($g, "imagewidth", $imagen1); $y1 = pdf_get_value($g, "imageheight", $imagen1); pdf_scale($g,$h,$v); pdf_place_image($g, $imagen1, ((595/$h-$x1)/2), (842/$v-$y1), 1.0); pdf_close_image ($g,$imagen1); pdf_restore($g); pdf_save($g); $imagen2 = pdf_open_gif($g, "./images/cruz.gif"); $ancho=150; $alto=325; $x1 = pdf_get_value($g, "imagewidth", $imagen2); $y1 = pdf_get_value($g, "imageheight", $imagen2); $h=$ancho/$x1; $v=$alto/$y1; pdf_scale($g,$h,$v); pdf_place_image($g, $imagen2, ((595/$h-$x1)/2), 200, 1.0); pdf_close_image ($g,$imagen2); pdf_restore($g); PDF_end_page($g); pdf_close($g); # Después del pdf_close empezamos la lectura del buffer $buffer = PDF_get_buffer($g); /* Esta porción de código es idéntica a la del ejemplo anterior con la única diferencia que ahora medimos la longitud de la cadena buffer en vez de la longitud de un fichero como hacíamos allí */ $len = strlen($buffer); Header("Content-type: application/pdf"); Header("Content-Length: $len"); Header("Content-Disposition: inline; filename=loquesea.pdf"); # Escribimos en el documento que se enviará al cliente # el contenido de la cadena buffer echo $buffer; /* liberamos la memoria que contenía el fichero con lo cual el documento solo aparecerá en el navegador del cliente y en la caché de este (con el nombre loquesea.pdf). Si no queremos que se almacene en la caché sería solo cuestión de incluir las cabeceras no caché del ejemplo anterior */ pdf_delete($g); ?> Una opción alternativa En el caso de que no sea posible utilizar las funciones anteriores por incompatibilidad de versiones PHP o de las propias librerías PDF, se puede recurrir a un truco. Se trata de escribir el fichero PDF en servidor, enviarlo al cliente y, posteriormente, borrarlo. Ello serviría, al menos, para economizar espacio de almacenamiento en el servidor. <? # creo un fichero de la misma forma que # lo hacíamos en ejemplo de páginas anteriores $filename="leocadio.pdf"; $f = fopen($filename, "w"); $g = pdf_open($f); pdf_begin_page($g, 595, 842); /* aqui insertaríamos el código para la generación del pdf. En este caso lo cerramos en blanco */ PDF_end_page($g); pdf_close($g); # cerramos el fichero leocadio.pdf fclose($f); /* ahora insertamos exactemente el codigo del primer ejemplo de esta página. Fijate que pese a haber escrito un montón de código aun estamos a tiempo de insertar las funciones de cabecera ya que NO HE ENVIADO AUN NINGUNA SALIDA AL NAVEGADOR eso sí, no olvides que delante de <? no puede haber ninguna linea en blanco...*/ $len = filesize($filename); header("Content-type: application/pdf"); header("Content-Length: $len"); header("Content-Disposition: inline; filename=felipe.pdf"); readfile($filename); /* ahora que ya he enviado el contenido del fichero pdf al navegador ya puedo borrar el fichero del servidor unlink($filename); /* como habrás observado se trata de una chapuza en tres actos 1º.- Cramos el fichero en el servidor y lo cerramos 2º.- Leemos el contenido del fichero 3º.- Borramos el fichero del servidor */ ?> |