Sei sulla pagina 1di 39

Tutorial de PHP y MySQL

Profesor Javier Andrs G.


I.E.S. THDER
Versin 2.0

1.

2.

3.

4.

Sintaxis en PHP
o

Mi primer script

Variables y Operadores

Sentencias de Control

Las Tablas

Las Funciones

Include() y require()

Tiempo y fecha

Formularios
o

Los Formularios

Uploads de archivos desde un formulario

Comenzando con MySQL


o

Funciones PHP de acceso a MySQL

Conectar a MySQL desde PHP

Creacin de una Base de Datos en MySQL

Mostrar los datos de una consulta

Operaciones con registros


o

Aadir registros

Modificar registros

Borrar registros

1/39

1. 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
echo $myvar;
?>
</body>
</html>
Una vez escrito esto lo salvamos en un fichero con la extensin php (la nueva
versin de PHP, la 4, utiliza la extensin php), y lo colocamos en nuestro servidor,
http://localhost/test.php. Ahora si ponemos esta URL en nuestro navegador
veremos una lnea con el texto "Hola. Este es mi primer script en PHP".
Lo primero que apreciamos en el script son sus delimitadores. En la primera
lnea 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 lneas que se encuentre entre estos delimitadores deben acabar en punto y
coma, excepto las sentencias de control (if, swicht, while, etc.).
Como en toda programacin, es importante poner muchos comentarios, para lo
cual si queremos comentar una sola lnea tenemos que poner al principio de la lnea
//, si lo que queremos es comentar varias utilizaremos los delimitadores /* - */.
Para que el servidor envi texto utilizaremos la instruccin echo, aunque tambin
podemos utilizar printf de uso similar al del C o Perl.
Finalmente, vemos que la palabra myvar comienza con el signo dlar ($).
Este smbolo le indica a PHP que es una variable. Nosotros le hemos asignado un
texto a esta variable, pero tambin pueden contener nmeros o tablas (arrays). Es
importante recordar que todas las variables comienzan con el signo dlar.
Tambin habris observado que el texto que le asignamos a la variable termina con
\n, esto no se imprime sirve para indicarle al navegador una nueva lnea.

2/39

Variables y operadores
Variables:
Como vimos antes todas la variables deben precedidas por signo dlar ($), y
le asignamos contenido con el signo igual (=). Con las variables, PHP distingue
entre maysculas y minsculas, por lo que no es lo mismo $myvar que $Myvar,
stas son dos variables totalmente distintas.
<html>
<body>
<?php
$myvar = "SEVILLA \n";
$Myvar = "MADRID \n";
//Esto imprimir SEVILLA
echo $myvar;
//Esto imprimir MADRID
ECHO $Myvar;
?>
</body>
</html>
Como veis he utilizado dos formas de escribir echo, en maysculas y en
minsculas, para indicaros que PHP no las distingue a la hora de usar funciones o
sentencias del lenguaje.
El uso de la barra invertida, como en \n, no es obligatorio, pero ayuda a la
depuracin del cdigo que enviamos al navegador, adems del \n existen otros
usos:
\" Carcter dobles comillas
\\ Carcter barra invertida
\n Nueva lnea
\r Retorno de carro
\t Tabulador horizontal

Constantes:
Las constantes son similares a las variables, con la salvedad de que no llevan el
signo dlar delante, y slo la podemos asignar una vez. Para definir una constantes
usaremos la funcin define como sigue:
<html>
<body>
<?php
define ("CONSTANTE", "Hola Mundo");
printf (CONSTANTE);
?>

3/39

</body>
</html>
PHP crea diversas constantes al arrancar, como PHP_VERSION que contiene la
versin de PHP, TRUE que le asigna 1 o FALSE que le asigna 0.

Operadores Aritmticos:
$a + $b
$a - $b
$a * $b
$a / $b
$a % $b
$a++
$a--

Suma
Resta
Multiplicacin
Divisin
Resto de la divisin de $a por $b
Incrementa en 1 a $a
Resta 1 a $a

Operadores de Cadenas:
El nico operador de cadenas que existen es el de concatenacin, el punto.
Pero no os asustis, PHP dispone de toda una batera de funciones que os
permitirn trabajar cmodamente con las cadenas.
$a = "Hola ";
$b = $a . "Mundo";

// Un espacio blanco detrs de la a


// Ahora $b contiene "Hola Mundo"

En este punto hay que hacer una distincin, la interpretacin que hace PHP
de las simples y dobles comillas. En el segundo caso PHP interpretar el contenido
de la cadena.

$a = "Mundo";
echo = 'Hola $a'; //Esto escribir "Hola $a"
echo = "Hola $a"; //Esto escribir "Hola Mundo
Operadores de Comparacin:
$a
$a
$a
$a
$a
$a

< $b $a menor que $b


> $b $a mayor que $b
<= $b $a menor o igual que $b
>= $b $a mayor o igual que $b
== $b $a igual que $b
!= $b $a distinto que $b

Operadores Lgicos:
$a AND $b
$a && $b
$a OR $b
$a !! $b
$a XOR $b
!$a

Verdadero si ambos son verdadero


Verdadero si ambos son verdadero
Verdadero si alguno de los dos es verdadero
Verdadero si alguno de los dos es verdadero
Verdadero si slo uno de los dos es verdadero
Verdadero si $a es falso, y recprocamente

4/39

Operadores de Asignacin:
$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 Multiplic a $a por $b y lo asigna a $a
$a /= $b Divide $a por $b y lo asigna a $a
$a .= $b Aade la cadena $b a la cadena $a

Sentencias de control
Las sentencias de control permiten ejecutar bloque de cdigos dependiendo
de unas condiciones. Para PHP el 0 es equivalente a Falso y cualquier otro nmero
es Verdadero.

IF...ELSE
La sentencia IF...ELSE permite ejecutar un bloque de instrucciones si la
condicin es Verdadera y otro bloque de instrucciones si sta es Falsa. Es
importante tener en cuenta que la condicin que evaluemos ha de estar encerrada
entre parntesis (esto es aplicable a todas las sentencias de control).
if (condicin) {
Este bloque se ejecuta si la condicin es VERDADERA
} else {
Este boque se ejecuta si la condicin es FALSA
}
Existe una forma sencilla de usar la sentencia IF cuando no tenemos que usar el
ELSE y solo tenemos que ejecutar una lnea de cdigo.
if ($a > 4) echo "$a es mayor que 4";
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 lgicos.
<?php
if ($nombre == ""){
echo "T no tienes nombre";
} elseif (($nombre=="eva") OR ($nombre=="Eva")) {
echo "Tu nombre es EVA";
} else {
echo "Tu nombre es " . $nombre;
}

5/39

SWITCH...CASE...DEFAULT
Una alternativa a IF...ELSEIF...ELSE, es la sentencia SWITCH, la cul evala y
compara cada expresin de la sentencia CASE con la expresin que evaluamos, si
llegamos al final de la lista de CASE y encuentra una condicin Verdadera, ejecuta
el cdigo de bloque que haya en DEFAULT. Si encontramos una condicin 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;
case "Martes":
echo "Hoy es Martes";
break;
case "Mircoles":
echo "Hoy es Mircoles";
break;
case "Jueves":
echo "Hoy es Jueves";
break;
case "Viernes":
echo "Hoy es Viernes";
break;
case "Sbado":
echo "Hoy es Sbado";
break;
case "Domingo":
echo "Hoy es Domingo";
break;
default:
echo "Esa cadena no corresponde a ningn da de la semana";
}
?>
WHILE
La sentencia WHILE ejecuta un bloque de cdigo mientras se cumpla una
determinada condicin.
<?php
$num = 1;
while ($num < 5) {
echo $num;

6/39

$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 cdigo y despus se evala la condicin, por lo que el
bloque de cdigo 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 fcilmente por otro WHILE. Sin embargo, el bucle FOR resulta muy til
cuando debemos ejecutar un bloque de cdigo a condicin de que una variable se
encuentre entre un valor mnimo y otro mximo. El bucle FOR tambin se puede
romper mediante la sentencia BREAK.

<?php
for ($num = 1; $num <=5; $num++){
echo $num;
if ($num == 3){

7/39

echo "Aqu nos salimos \n";


break;
}
}
?>

Las tablas
Las tablas (o array en ingls), 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.
En PHP disponemos de dos tipos de tablas. El primero sera el clsico, utilizando
ndices:
<?php
$ciudad[] = "Pars";
$ciudad[] = "Pars";
$ciudad[] = "Roma";
$ciudad[] = "Sevilla";
$ciudad[] = "Londres";
print ("yo vivo en " . $ciudad[2] . "<BR>");
?>
Esta es una forma de asignar elementos a una tabla, pero una forma ms
formal es utilizando la funcin array.

<?php
$ciudad = array("Pars", "Roma", "Sevilla", "Londres");
//contamos el nmero de elementos de la tabla
$numelementos = count($ciudad);
//imprimimos todos los elementos de la tabla
for ($i=0; $i < $numele mentos; $i++)
{
print ("La ciudad $i es $ciudad[$i] <BR>");
}
?>
Sino se especifica, el primer ndice es el cero, pero podemos utilizar el operador
=> para especificar el ndice inicial.

$ciudad = array(1=>"Pars", "Roma", "Sevilla", "Londres");


Un segundo tipo, son las tablas asociativas, en las cules a cada elemento se le
asigna un valor (key) para acceder a l.

8/39

Para entenderlo, que mejor que un ejemplo, supongamos que tenemos una
tabla en al que cada elemento almacena el nmero de visitas a nuestra web por
cada da de la semana.
Utilizando el mtodo clsico de ndices, cada da de la semana se representara
por un entero, 0 para lunes, 1 para martes, etc.

$visitas[0] = 200;
$visitas[1] = 186;
si usamos las tablas asociativas sera
$visitas[lunes] = 200;
$vis itas[martes] = 186;
Ahora bien, recorrer una tabla y mostrar su contenido es sencillo utilizando los
ndices, pero cmo hacerlo en las tablas asociativas?. La manipulacin de las tabas
asociativas se a hace travs de funciones que actan sobre un puntero interno
que indica la posicin. Por defecto, el puntero se sita en el primer elemento
aadido en la tabla, hasta que es movido por una funcin:
current - devuelve el valor del elemento que indica el puntero.
pos - realiza la misma funcin que current.
reset - mueve el puntero al primer elemento de la tabla.
end - mueve el puntero al ltimo elemento de la tabla.
next - mueve el puntero al elemento siguiente.
prev - mueve el puntero al elemento anterior.
count

- devuelve el nmero de elementos de una tabla.

Veamos un ejemplo de las funciones anteriores:


<?php
$semana = array("lunes", "martes", "mircoles", "jueves", "viernes", "sbado",
"domindo");
echo count($semana); //7
//situamos el puntero en el primer elemento
reset($semana);
echo current($semana); //lunes
next($semana);
echo pos($semana); //martes
end($semana)
echo pos($semana); //domingo
prev($semana);
echo current($semana); //sbado
?>
Recorrer una tabla con las funciones anteriores se hace un poco lioso, para ello
se recomienda utilizar la funcin each().

9/39

<?php
$visitas=array("lunes"=>200,"martes"=>186,"mircoles"=>190,"jueves"=>17
5);
reset($visitas);
while (list($clave, $valor) = each($visitas))
{
echo "el da $clave ha tenido $valor visitas<BR>";
}
?>
La funcin each()devuelve el valo r del elemento actual, en este caso, el valor
del elemento actual y su clave, y desplaza el puntero al siguiente, cuando llega al
final devuelve FALSO, y termina el bucle while().
Tablas multidimensionales

Las tablas multidimensionales son simplemente tablas en las cuales cada


elemento es a su vez otra tabla.
<?php
$calendario[] = array (1, "enero", 31);
$calendario[] = array (2, "febrero", 28);
$calendario[] = array (3, "marzo", 31);
$calendario[] = array (4, "abril", 30);
$calendario[] = array (5, "mayo", 31);
while (list($clave, $valor ) = each($calendario)){
{
$cadena = $varlor[1];
$cadena .= " es el mes nmero " . $valor[0];
$cadena .= "y tiene " . $varlor[2] . " das<BR>";
echo $cadena;
}
?>
La funcin list() es ms bien un operador de asignacin, lo que hace es asignar
valores a unas lista de variables. En este caso los valores son extrados de una
tabla por la funcin each().

Las funciones
Muchas veces, cuando trabajamos en el desarrollo de una aplicacin, nos surge
la necesidad de ejecutar un mismo bloque de cdigo en diferentes partes de
nuestra aplicacin. Una Funcin no es ms que un bloque de cdigo al que le
pasamos una serie de parmetros y nos devuelve un valor. Como todos los
lenguajes de programacin, PHP trae una gran cantidad de funciones para nuestro

10/39

uso, pero las funciones ms gran cantidad de funciones para nuestro uso, pero las
funciones ms importantes son las que nosotros creamos.
Para declara una funcin debemos utilizar la instruccin function seguido del
nombre que le vamos a dar, y despus entre parntesis la lista de argumentos
separados por comas, aunque tambin habr funciones que no recojan ningn
argumento.
function nombre_de_funcion (arg_1, arg_2, ..., arg_n)
{
bloque de cdigo
}
Cualquier instruccin vlida de PHP puede aparecer en el cuerpo (lo que antes
hemos llamado bloque de cdigo) de una funcin, incluso otras funciones y
definiciones de clases.
En PHP no podemos redefinir una funcin previamente declarada, y adems en
PHP, las funciones deben definirse siempre antes de que se invoquen, en PHP4 este
requerimiento ya no existe.

La instruccin RETURN

Cuando invocamos una funcin, la ejecucin del programa pasa a ejecutar las
lneas de cdigo que contenga la funcin, y una vez terminado, el programa
contina su ejecucin desde el punto en que fue llamada la funcin.
Existe una manera de terminar la ejecucin de la funcin aunque an haya
cdigo por ejecutar, mediante el u haya cdigo por ejecutar, mediante el uso de la
instruccin return terminamos la ejecucin del cdigo de una funcin y devolvemos
un valor. Podemos tener varios return en nuestra funcin, pero por lo general,
cuantos ms return tengamos menos reutilizable ser nuestra funcin.
<?php
function mayor ($x, $y)
{
if ($x > $y) {
return $x." es mayor que ".$y;
} else {
return $y." es mayor que ".$x;
}
}
?>
Aunque quedara mejor:
<?php
function mayor ($x, $y)
{
$msg = "";
if ($x > $y) {
$msg = $x." es mayor que ".$y;

11/39

} else {
$msg = $y." es mayor que ".$x;
}
return $msg;
}
?>
Con la instruccin return puede devolverse cualquier tipo de valor, incluyendo
tablas y objetos. PHP solo permite a las funciones devolver un valor, y para
solventar este pequeo problema, si queremos que nuestra funcin devuelva varios
tenemos que utilizar una tabla (array).

Parmetros de las funciones

Existen dos formas de pasar los parmetros a una funcin, por valor o por
referencia.
Cuando pasamos una variable por valor a una funcin, ocurra lo que ocurra en
sta en nada modificar el contenido de la variable. Mientras que si lo hacemos por
referencia, cualquier cambio acontecido en la funcin sobre la variable lo har
para siempre.
En PHP, por defecto, las variables se pasan por valor. Para hacerlo por
referencia debemos anteponer un ampersand (&) a la variable.
<?php
function suma ($x, $y)
{
$x = $x + 1;
return $x+$y;
}
$a = 1;
$b = 2;
//parmetros por valor
echo suma ($a, $b);
echo $a;

// imprimir 4

// imprimir 1

//parmetros por referencia


echo suma (&$a, $b);
echo $a;

// imprimir 4

//imprimir 2

?>
Si queremos que un parmetro de una funcin se pase siempre por referencia
debemos anteponer un ampersand (&) al nombre del parmetro en la definicin de
la funcin.
En PHP podemos definir valores por defecto para los parmetroS de una
funcin. Estos valores tienen que ser una expresin constante, y no una variable o
miembro de una clase. Adems cuando usamos parmetros por defectos, stos

12/39

deben estar a la derecha de cualquier parmetro sin valor por defecto, de otra
forma PHP nos devolver un error.
<?php
function suma ($x=1, $y)
{
$x = $x + 1;
return $x+$y;
}
?>
Si ejecutamos esta funcin nos dara error, ya que hemos dado a $x el valor 1
por defecto y la hemos colocado a la izquierda de un parmetro que no tiene valor
por defecto. La forma correcta es:
<?php
function suma ($y, $x=1)
{
$x = $x + 1;
return $x+$y;
}
?>
Cabe destacar que PHP no soporta un nmero variables de parmetros, pero
PHP4 s.
Llegados a este punto, damos un paso atrs y volvemos a las variables, para
distinguir entre variables estticas (static) y globales (global). Las variables
estticas se definen dentro de una funcin, la primera vez que es llamada dicha
funcin la variable se inicializa, guardando su valor para posteriores llamadas.
<?php
function contador ()
{
static $count = 0;
$count = $count + 1;
return $count;
}
echo contador()."<BR>"; // imprimir 1
echo contador()."<BR>"; // imprimir 2
echo contador()."<BR>"; // imprimir 3
?>
Las variables globales, no se pueden declarar dentro de una funcin, lo que
hacemos el llamar a una variable que ya ha sido declarada, tomando el valor que
tenga en ese momento, pudiendo se modificado en la funcin.
<?php
var $a = 1;
function ver_a()

13/39

{
global $a;
echo $a."<BR>"; // imprimir el valor de $a
$a += 1; // sumamos 1 a $a
}
echo ver_a(); // imprimir 1
echo ver_a(); // imprimir 2
$a = 7;
echo ver_a(); // imprimir 7
echo ver_a(); // imprimir 8
?>
Funciones Variable

PHP soporta el concepto de funciones variables, esto es significa que si una


variable tiene unos parntesis aadidos al final, PHP buscar un funcin con el
mismo nombre que el contenido de la variable, e intentar ejecutarla.
<?php
function imprime($texto) {
echo $texto . "\n";
}
function imprimeNegrilla($texto){
echo "<B>$texto</B>\n";
}
$MiFunc = "imprime";
$MiFunc("Hola"); //imprimir Hola
$MiFunc = "imprimeNegrilla";
$MiFunc("Hola"); //imprimir Hola
?>

14/39

Cmo ahorramos lneas de cdigo


Por lo general, todos nuestros script tienen partes de cdigo iguales, las
funciones include() y require() nos van ahorrar muchas de estas lneas de
cdigo. 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 cdigo de se encuentra en el fichero que
llama require().
Como todo esto es un poco lioso, veamos unos ejemplos que nos lo aclarar.
<?php
include ("header.inc");
echo "Hola Mundo";
include ("footer.inc");
?>
Si tenemos en cuenta que el fichero header.inc contiene:
<html>
<body>
y el fichero footer.inc contiene:
</body>
</html>
Nuestro script sera equivalente a:
<html>
<body>
<?php
echo "Hola Mundo";
?>
</body>
</html>
Ahora veamos el script de ejemplo para la funcin require():

<?php
require ("config.inc");
include ("header.inc");
echo $cadena;
include ("footer.inc");
?>

15/39

Donde el fichero config.inc tendra algo como esto:

<?php
$cadena = "Hola Mundo";
?>
Ejemplo de librera sera el siguiente:
Fichero libreramatemtica.php:

<?
function maximo()
{
$numero=func_num_args();
if ($numero)
{
$elemento1=func_get_arg(0);
for($i=1;$i<$numero; $i++)
{
$elemento2=func_get_arg($i);
$elemento1=($elemento1>$elemento2)?$elemento1:$elemento2;
}
}
return $elemento1;
}
?>
Y el fichero PHP que llamara a la librera matemtica sera:
<?
require("libreramatemtica.php");
echo maximo(3,5,8,2,3,4,5,6);
?>

16/39

Tiempo y fecha
time

Devuelve el nmero de segundos transcurridos desde el 1 de Enero de 1970. A esta


forma de expresar fecha y hora se le denomina timestamp.
date(formato, timestamp)

La funcin date devuelve una cte(formato, timestamp)


La frunci date devuelve una cadena formateada segn los cdigo de formato. Si
no le pasamos la variable timestamp nos devuelve la cadena formateada para la
fecha y la hora actual.
Los cdigos de formato para la funcin date son:
CODIGO DESCRIPCIN
a

am o pm

AM o PM

Da del mes con ceros

Abreviatura del da de la semana (ingls)

Nombre del mes (ingls)

Hora en formato 1-12

Hora en formato 0-23

Minutos

Da del mes sin ceros

Dia de la semana

Nmero de mes (1-12)

Abreviatura del mes (ingls)

Segundos

Ao con 2 dgitos

Ao con 4 dgitos

Dia del ao (1-365)

Para ver algunos ejemplos supongamos que ahora es el 7 de abril de 200


Para ver algunos ejemplos supongamos que ahora es el 7 de abril de 2000 a las 14
horas 30 minutos y 22 segundos:

date("d- m-Y") -> 07-04-2000

date("H:i:s") -> 14:30:22

date("Y")

date("YmdHis") - > 20000407143022

date("d/m/y H:i a") - > 07/04/00 14:30 pm

date(d-m-Y H:i, time()) - > el momento actual

-> 2000

mktime(hora, min, seg, mes, dia, ao)

17/39

La funcin mktime devuelve una variable de tipo timestamp a partir de las


coordenadas dadas. La principal utilidad de esta funcin es la de aadir o quitar una
determinada cantidad de fecha u horas a una dada.
<?PHP
function restarDias($numdias, $date) {
list($hora, $min, $seg, $dia, $mes, $anno) = explode( " ", date( "H i s d m
Y"));
$d = $dia - $numdias;
$fecha = date("d- m-Y", mktime($hora, $min, $seg, $mes, $d, $anno));
return $fecha;
}
echo restarDias(5, time())."<BR>";
echo restarDias(10, time())."<BR>";
?>
chekdate (mes, dia, ao)

La funcin chekdate comprueba si una fecha es vlida, si es as devuelve TRUE


y si no lo es FALSE. Una fecha se considera vlida si el ao est entre 1900 y
32767, el mes entre 1 y 12, y el da es menor o igual que nmero de das total del
mes en cuestin.
<?php
if (checkdate(31, 2, 2000)) {
echo "La fecha es correcta";
} else {
echo "La fecha es incorrecta";
}
?>
Para el ejemplo anterior nos dara que la fecha es incorrecta, febrero nunca
tiene un da 31.

18/39

Funciones de Cadena
PHP provee de muchas funciones interesantes para trabajar con cadenas,
veremos solo algunas:
strlen - Devuelve la longitud de una cadena (numero de caracteres)
explode, split - Parte una cadena de acuerdo a un carcter separador, y devuelve
un vector con dichas divisiones.
chop , rtrim- Elimina los espacios finales de una cadena, as como sus saltos de
linea
strpos - Busca una cadena dentro de otra y devuelve su posicin.
str_replace - Reemplaza una cadena por otra.
<?php
$cadena = "hola";
$otracadena = "hola- mundo";
$longitud = str_len($cadena); //devuelve 4
$partes = explode("-",$otracadena); //genera el array $partes con
//$partes[0]="hola" y $partes[1]="mundo";
$chop = chop($cadena."\n"); //agregamos un \n para probar, pero chop lo elimina
$reemplaza = str_replace("- "," ",$otracadena); //$reemplaza contiene Hola Mundo.
//Notese que cambiamos el - por un espacio
?>
Otras funciones de cadenas son:
trim()

La funcin Trim() se usa asi: <? trim(cadena) ?> Su finalidad es eliminar


espacios en las puntas de la cadena. Tambin existe rtrim() y ltrim() para eliminar
solo espacios a la derecha o a la izquierda respectivamente de una cadena pasada
como argumento
Veamos un corto ejemplo:
<?
$var = " hola que tal ";
//mostramos la variable aplicandole la funcion
echo trim($var)
?>
Sale esto... (se eliminaron esos espacios de ms)
hola que tal

19/39

strtolower() y strtoupper()

La sintaxis de estas funciones es similar a las anteriores <? strtolower(cadena) ?> y <?
strtoupper(cadena) ?> Estas funciones convierten todos los caracteres de la cadena a
minsculas o maysculas. Ejemplo:
<?
$var = "EsTAmos APRENdiendo funCIOnes BAsicaS";
//aplicamos las 2 funciones...
echo strtolower($vartxt3),"<BR>",strtoupper($vartxt3);
?>

Sale esto...

estamos aprendiendo funciones basicas


ESTAMOS APRENDIENDO FUNCIONES BASICAS

substr

La sintaxis de esta funcione es <? substr(cadena,n1,n2) ?> Esta funcin


produce una extraccin de subcadenas. n1 es un numero entero, y ser a partir del
cual se comience la extraccin (parmetro obligatorio) n2 es un numero entero, y
en caso de estar, la extraccin se detendr en ese caracter. (parmetro NO
obligatorio) Un ejemplo de esto:
<?
$var = "una cadena comun y corriente";
//aplicamos la funcion, mostramos varios resultados
echo substr($var,5),"<BR>";
echo substr($var,15),"<BR>";
echo substr($var,0),"<BR>";
echo substr($var,5,11),"<BR>";
echo substr($var,-1,-3),"<BR>";
echo substr($var,8,-3),"<BR>";
?>

Sale esto...

adena comun y corriente


n y corriente
una cadena comun y corriente
adena comun
na comun y corrie
Como se ve, se corta la cadena que pasamos a la funcin en el primer
numero, y se comienza la extraccin. Si no hay segundo numero, se produce hasta

20/39

el final de la cadena (3 primeros casos). Si existe el segundo nmero, al llegar a


ese carcter, se detiene la extraccin.

2. Formularios
Los formularios
Los Formularios no forman parte de PHP, sino del lenguaje estndar de
Internet, HTML, pero como stos van a aparecer muchas veces durante el curso,
vamos a dedicar esta algunas lneas a ellos. Lo que viene a continuacin es HTML y
no PHP.
Todo
formulario
comienza
con
la
etiqueta
<FORM
ACTION="lo_que_sea.php" METHOD="post/get">. Con ACTION indicamos el
script que va procesar la informacin que recogemos en el formulario, mie ntras que
METHOD nos indica si el usuario del formulario va ha enviar datos (post) o
recogerlos (get). La etiqueta <FORM> indica el final del formulario.
A partir de la etiqueta <FORM> vienen los campos de entrada de datos que
pueden ser:
Cuadro de texto:

<input type="text" name="nombre" size="20" value="jose">


Cuadro de texto con barras de desplazamiento:

<textarea

rows="5"

name="descripcion"

cols="20">Es

rojo</textarea>

Casilla de verificacin:

<input type="checkbox" name="cambiar" value="ON">


Botn de opcin:

<input type="radio" value="azul" checked name="color">


Men desplegable:

<select size="1&qu class="codigo"><select size="1" name="dia">


<option selected value="lunes">lunes</option>
<option>martes</option>
<option value="miercoles">miercoles</option>
</select>
Boton de comando:

21/39

de

color

<input type="submit" value="enviar" name="enviar">


Campo oculto:

<input type="hidden" name="edad" value="55">


Este ltimo tipo de campo resulta especialmente til cuando que remos pasar
datos ocultos en un formulario.
Como habrs observado todos lo tipos de campo tienen un modificador llamado
name, que no es otro que el nombre de la variable con la cual recogeremos los
datos en el script indicado por el modificador ACTION de la etiqueta FORM, con
value establecemos un valor por defecto.
A continuacin veamos un ejemplo, para lo cual crearemos un formulario en
HTML como el que sigue y lo llamaremos formulario.htm:
<HTML>
<BODY>
<FORM METHOD="post" ACTION="mis_datos.php">
<input type="hidden" name="edad" value="55">
<p>Tu nombre <input type="text" name="nombre" size="30"
value="jose"></p>
<p>Tu sistema favorito
<select size="1" name="sistema">
<option selected value="Linux">Linux</option>
<option value="Unix">Unix</option>
<option value="Macintosh">Macintosh</option>
<option value="Windows">Windows</option>
</select></p>
<p>Te gusta el futbol ? <input type="checkbox" name="futbol"
value="ON"></p>
<p>Cual es tu sexo?</p>
<blockquote>
<p>Hombre<input type="radio" value="hombre" checked
name="sexo"></p>
<p>Mujer <input type="radio" name="sexo" value="mujer"></p>
</blockquote>
<p>Aficiones</p>
<p><textarea rows="5" name="aficiones" cols="28"></textarea></p>
<p><input type="submit" value="Enviar datos" name="enviar">
<input type="reset" value="Restablecer" name="B2"></p>
</FORM>
</BODY>
<HTML>
Y ahora creemos el script PHP llamado desde le formulario mis_datos.php:
<?PHP;

22/39

if ($_POST) {
$nombre=$_POST[nombre];
$sexo=$_POST[sexo] ;
$edad=$_POST[edad] ;
$sistema=$_POST[sistema];
$futbol=$_POST[futbol];
$aficiones=$_POST[aficiones];
echo "Hola <b>" . $nombre . "</b> que tal ests<BR>\n";
echo "Eres " . $sexo . "<BR>\n";
echo "Tienes " . $edad . "<BR>\n";
echo "Tu sistema favorito es " . $sistema . "<BR>\n";
if ($futbol) {
echo "T e gusta el ftbol <BR>\n";
} else {
echo "NO te gusta el ftbol <BR>\n";
}
if ($aficiones != "") {
echo "Tus aficiones son: <BR>\n";
echo nl2br($aficiones);
} else {
echo "NO tienes aficiones <BR>\n";
}
}
echo "<a href='formulario.htm'>VOLVER AL FORMULARIO</a>"
?>
Una vez rellenados los datos del formulario, pulsamos el botn Enviar datos,
con lo que le campo enviar toma lo que su etiqueta value indica, es decir
enviar="Enviar datos". En nuestro script lo primero que evaluamos es que se
haya enviado el formulario, y para ello nada mejor que comprobar que la variable
de sistema $_POST no est vaca.
Tambin podemos fusionar el cdigo de ambos fichero, nos ahorraramos uno.

<HTML>
<BODY>
<? If (!$_POST)
{
?>
<FORM METHOD="post" ACTION=<? Echo $_SERVER[PHP_SELF] ?>>
<input type="hidden" name="edad" value="55">
<p>Tu nombre <input type="text" name ="nombre" size="30"
value="jose"></p>
<p>Tu sistema favorito
<select size="1" name="sistema">

23/39

<option selected value="Linux">Linux</option>


<option value="Unix">Unix</option>
<option value="Macintosh">Macintosh</option>
<option value="Windows">Windows</option>
</select></p>
<p>Te gusta el futbol ? <input type="checkbox" name="futbol"
value="ON"></p>
<p>Cual es tu sexo?</p>
<blockquote>
<p>Hombre<input type="radio" value="hombre" checked
name="sexo"></p>
<p>Mujer <input type="radio" name="sexo" value="mujer"></p>
</blockquote>
<p>Aficiones</p>
<p><textarea rows="5" name="aficiones" cols="28"></textarea></p>
<p><input type="submit" value="Enviar datos" name="enviar">
<input type="reset" value="Restablecer" name="B2"></p>
</FORM>
<?
}
else
{

$nombre=$_POST[nombre];
$sexo=$_POST[sexo] ;
$edad=$_POST[edad] ;
$sistema=$_POST[sistema];
$futbol=$_POST[futbol];
$aficiones=$_POST[aficiones];
echo "Hola <b>" . $nombre . "</b> que tal ests<BR>\n";
echo "Eres " . $sexo . "<BR>\n";
echo "Tienes " . $edad . "<BR>\n";
echo "Tu sistema favorito es " . $sistema . "<BR>\n";
if ($futbol) {
echo "Te gusta el ftbol <BR>\n";
} else {
echo "NO te gusta el ftbol <BR>\n";
}
if ($aficiones != "") {
echo "Tus aficiones son: <BR>\n";
echo nl2br($aficiones);
} else {
echo "NO tienes aficiones <BR>\n";
}

?>

24/39

</BODY>
<HTML>
La variable de entorno $_SERVER[PHP_SELF] , es una variable de entorno
que nos devuelve el nombre del script que estamos ejecutando. Y por ltimo, hacer
notar el uso de la funcin nl2br(),con la cul sustituimos los retornos de carro del
texto, los cules no reconocen los navegadores, por la etiqueta <BR>.

Descarga de archivos

Envo de archivos con el mtodo POST


PHP es capaz de recibir envos de archivo de cualquier navegador que cumpla la norma
RFC-1867 (entre los que se incluyen Netscape Navigator 3 o posterior, Microsoft Internet
Explorer 3 con un parche o posterior sin ste). sta caracterstica permite que los usuarios
enven archivos de texto y binarios. Mediante la autentificacin y funciones de manejo de
archivos de PHP, es posible un control total de quin puede enviar archivos y que se hace
con stos una vez recibidos.
Es importante destacar que PHP tambin soporta el mtodo PUT para envo de archivos
tal y como lo utiliza Netscape Composer y el cliente Amaya de W3C. Consulte Soporte del
mtodo PUT para ms detalles.
Una pgina de envo de archivos se puede crear mediante un formulario parecido a ste:

<form enctype="multipart/form-data" action="_URL_" method="post">


<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
La _URL_ debe tener como destino un script PHP. El input oculto MAX_FILE_SIZE debe
encontrarse antes del input de tipo "file" para indicar el tamao mximo de archivo que se
puede enviar en bytes

Aviso
MAX_FILE_SIZE debe ser consultado por el navegador; aun as es sencillo saltarse este
mximo por lo tanto no se debe presuponer que el navegador siempre lo respetar. En
contrapartida, la configuracin de PHP relativa al tamao mximo no puede ser obviada.
Las variables definidas para los archivos enviados varan en funcin de la versin y
configuracin de PHP que se utilice. Las variables de las que hablamos a continuacin sern
definidas en la pgina destino despus de una recepcin de fichero correcta. El array
$_FILES se inicializar.

25/39

$_FILES contienen la informacin sobre el fichero recibido.


A continuacin se describe el contenido de $_FILES. Se ha tomado el nombre
'userfile' para el fichero recibido tal y como se usaba en el script de ejemplo anterior:

$_FILES['userfile']['name']
El nombre original del fichero en la mquina cliente.

$_FILES['userfile']['type']
El tipo mime del fichero (si el navegador lo proporciona). Un ejemplo podra ser
"image/gif".

$_FILES['userfile']['size']
El tamao en bytes del fichero recibido.

$_FILES['userfile']['tmp_name']
El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo
recibido.
Por defecto, los ficheros sern almacenados en el directorio temporal por defecto del
servidor a no ser que se especifique otra localizacin con la directiva upload_tmp_dir en
php.ini. El directorio temporal por defecto del servidor puede ser modificado cambiando el
valor de la variable de entorno TMPDIR en el contexto en que se ejecuta PHP La
configuracin de las variables de entorno no se puede realizar en PHP a travs de la funcin
putenv(). Esta variable de entorno puede ser utilizada tambin para asegurarnos que otras
operaciones con archivos recibidos estn funcionando correctamente.
Los siguientes ejemplos son validos para versiones de PHP 4 superiores a la 4.0.2. Veanse
las funciones is_uploaded_file() y move_uploaded_file().

<?php
// In PHP 4.1.0 or later, $_FILES should be used instead of
$HTTP_POST_FILES.
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
copy($_FILES['userfile']['tmp_name'],
"/place/to/put/uploaded/file");
} else {
echo "Possible file upload attack. Filename: " .
$_FILES['userfile']['name'];
}
/* ...or... */
move_uploaded_file($_FILES['userfile']['tmp_name'],
"/place/to/put/uploaded/file");
?>
El script PHP que recibe el fichero, debe implementar la lgica necesaria para

determinar que debe ser realizado con el fichero. Se puede utilizar, por ejemplo, la
variable $_FILES['userfile']['size'] para descartar los ficheros demasiado chicos o

26/39

demasiado grandes; por otro lado, se puede usar la variable $_FILES['userfile']['type']


para descartar los que no se ajusten a algn criterio de tipo. Cualquiera que sea la
lgica que utilicemos, se debe borrar o mover el archivo del directorio temporal.
El archivo ser borrado del directorio temporal al final de la peticin si no se
ha movido o renombrado.

3. Comenzando con MySQL


Funciones PHP de acceso a MySQL
mysql_affected_rows

int mysql_affected_rows(int [link_identifier] );


mysql_affected_rows devuelve el nmero de filas afectado en el ltimo SELECT,
UPDATE o DELETE pregunta en el servidor asociado con el identificador de conexin
especificado. Si no se e especifica un identificador de conexin, se asume le de la
ltima conexin abierta.

mysql_close

int mysql_close(int [link_identifier] );


Devuelve: TRUE si se ha cerrado correctamente, FALSE en caso de error.
La funcin mysql_close closes la conexin de la base de datos MySQL asociada al
idenficador de conexin especificado. Si no se e especifica un identificador de
conexin, se asume le de la ltima conexin abierta.

mysql_connect

int mysql_connect(string [hostname] , string [username] , string [password] );


Devuelve: un identificador de conexin, o FALSE en caso de error.
La funcin mysql_connect establece una conexin a un servidor de MySQL.
Todos los argumentos son optativos, y si no se especifican, los valores por defecto
son (' el localhost', nombre del usuario del usuario que posee el proceso del
servidor, la contrasea vaca). La cadena hostname tambin puede incluir un
nmero del puerto, "hostname:port".
En caso de realizar una segunda llamada a mysql_connect con los mismos
argumentos, no se establecer ninguna nueva conexin, sino se devolver el
identificador de conexin de la ya existente.

27/39

La conexin al servidor se cerrar en cuanto la ejecucin del script acabe, a


menos que la cerremos antes con la funcin mysql_close.
mysql_create_db

int mysql_create_db(string database name, int [link_identifier] );


La funcin mysql_create_db intenta crear una nueva base de datos en el
servidor asociado con el identificado de conexin especificado.
mysql_db_query

int mysql_db_query(string database, string query, int link_identifier);


Devuelve: un identificador de conexin, o FALSE en caso de error.
Ejecuta una consulta en una base de datos. Si el identificador no se especifica,
la funcin intenta encontrar una conexin abierta con el servidor.
mysql_drop_db

int mysql_drop_db(string database_name, int [link_identifier] );


Devuelve: TRUE si toda ha ido bien, y FALSE en caso de error.
Elimina una base de datos del servidor asociado al identificador de conexin.

mysql_error

string mysql_error();
Devuelve el texto asociado al error producido en la ltima operacin realizada por la
base de datos.

mysql_fetch_array

array mysql_fetch_array(int result);


Devuelve un array con la informacin correspondiente al resultado de una
consulta especificado por su identificador o 'false' si ya no hay ms filas.
Es una versin extendida de mysql_fetch_row ( ). Adems de almacenar los
datos a travs de ndices numricos del array, tambin lo hace a travs de ndices
asociativos,
utilizando
los
nombres
de
los
campos
como
claves.
Si dos o ms columnas del resultado tienen el mismo nombre de campo, la ltima
es la que tiene preferencia. Para acceder a las dems es necesario utilizar el ndice
numrico o construir un alias para la columna:
select t1.f1 as foo t2.f1 as bar from t1, t2
as foo t2.f1 as bar from t1, t2
Esta funcin no es ms lenta que 'mysql_fetch_row( )'.
Example 1. mysql fetch array

28/39

<?php
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_array($result)) {
echo $row["user_id"];
echo $row["fullname"];
}
mysql_free_result($result);
?>

mysql_insert_id

int mysql_insert_id(void);
Esta funcin devuelve el ID (identificador) generado para los campos
autonumricos (AUTO_INCREMENTED). El ID devuelto es el correspondiente al de
la ltima operacin INSERT.

mysql_list_dbs

int mysql_listdbs(void);
Devuelve un puntero que contiene las bases de datos disponibles para el servidor
actual (msql daemon). Este valor se utiliza con la funcin mysql_dbname( ).

mysql_list_tables

int mysql_list_tables(string database, , int [link_identifier]);


Devuelve un identificar, el cual pasaremos a la funcin mysql_tablename para
extraer el nombre de las tablas de la base de datos especificada.

mysql_query

int mysql_query(string query, int [link_identifier] );


Ejecuta una consulta a la base de datos activa en el servidor asociado al
identificador de conexin. Si no se especifica, se utiliza la ltima conexin abierta,
se utiliza la ltima conexin abierta. Si no hay conexiones abiertas la funcin
intenta establecer una.
Esta funcin devuelve TRUE o FALSE para indicar si las operaciones UPDATE,
INSERT o DELETE han tenido xito. Para la operacin SELECT devuelve un nuevo
identificador de resultado.

mysql_select_db

int mysql_select_db(string database_name, int [link_identifier] );

29/39

Devuelve: true on success, false on error


Establece la base de datos activa en el servidor. Si no se especifica
identificador de conexin se utiliza la ltima conexin abierta. Si no hay conexiones
anexin abierta. Si no hay conexiones activas, la funcin intenta establecer una. A
partir de la llamada a mysql_select_db las llamadas a mysql_query( ) actan sobre
la nueva base de datos activa.

Conectar a MySQL desde PHP


Ya tenemos datos en nuestra Base de Datos (BD), as que con el siguiente
script nos conectaremos a la BD del servidor MySQL para obtener los datos de un
registro.
Conexin a MySQL
<html>
<body>
<?php
$linkp>
<?php
$conexion = mysql_connect("prueba", "a1",a1);
mysql_select_db("base", $conexion);
$res = mysql_query("SELECT * FROM agenda", $link);
$fila=mysql_fetch_array($res,MYSQL_ASSOC); // toma el primer valor devuelto
echo "Nombre: ".$fila["nombre"]."<br>";
echo "Direccin: ".$fila["direccion"]."<br>";
echo "Telfono :". $fila["telefono"]."<br>";
echo "E-Mail :". $fila["email"]."<br>";
?>
</body>
</html>
En la primera lnea del script nos encontramos con la funcin
mysql_connect(), que abre una conexin con el servidor MySQL en el Host
especificado (en este caso la misma mquina en la que est alojada el servidor
MySQL, localhost). Tambin debemos especificar un usuario (nobody, root, etc. ),
y
si
fuera
necesario
un
password
para
el
usuario
indicado
(mysql_connect("localhost", "root", "clave_del_root")). Si la conexin ha
tenido xito, la funcin mysql_connect() devuelve un identificar de dicha
conexin (un nmero) que es almacenado en la variable $conexion, sino ha
tenido xito, devuelve 0 (FALSE).
Con mysql_select_db() PHP le dice al servidor que en la conexin $conexion
nos queremos conectar a la base de datos base. Podramos establecer distintas
conexiones a la BD en diferentes servidores, pero nos conformaremos con una.
La siguiente funcin mysql_query(), es la que hace el trabajo duro, usando el
identificador de la conexin ($conexion), enva una instruccin SQL al servidor

30/39

MySQL para que ste la procese. El resultado de sta operacin es almacenado en


la variable $res.
Finalmente, mysql_fetch_array() es usado para mostrar los valores de los
campos devueltos por la consulta ($res). En este ejemplo mostramos los valores
del registro 0, que es el primer registro 0, que es el primer registro, y mostramos el
valor de los campos especificados.

MySQL

1. Instalando MySQL
Instalar MySQL en su versin para Windows, e ir haciendo pruebas antes de subir
nuestras pginas, es bastante sencillo. En la seccin Programas podis encontrarlo
para bajarlo.
Simplemente haced doble click en el programa de instalacin, responded a las
tpicas preguntas de dnde lo quieres instalar, etc., y ya est.
Ahora hay que ponerlo en marcha. Para ello, siempre debe estar ejecutndose
(estar en segundo plano) el programa mysqld.exe, situado en el subdirectorio bin
del directorio en el que se haya instalado el programa. Con este programa en
marcha, ejecutaremos mysql.exe para ver cmo entrar sentencias SQL, o
directamente podremos probar scripts PHP que conecten con el servidor MySQL.
Como PHP lleva soporte interno para MySQL, nicamente hemos de acordarnos de
tener en memoria el programa mysqld.exe, el resto lo hace l solo, como iremos
viendo en los siguientes captulos.
2. Ejecutando acciones desde MySQL
Una vez instalado y en marcha el programa mysqld.exe, vamos a ver algunas
acciones de ejemplo que podemos realizar bajo el entorno de MySQL. Para ello,
ejecutamos el programa mysql.exe (tambin en el subdirectorio bin), y entraremos,
viendo algo como esto:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.23.24-beta-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer
mysql> _
Un mensaje de bienvenida, y el prompt del sistema, que ha cambiado por mysql>.
Vamos a ver cmo crear una base de datos. La sintaxis ser CREATE DATABASE
NombreBD, por ejemplo:
mysql> CREATE DATABASE Prueba;
Query OK, 1 row affected (0.72 sec)
mysql> _
Con esto, acabamos de crear la base de datos Pruebas, que se habr grabado en el
subdirectorio data del programa, dentro de un directorio llamado como la base de

31/39

datos, es decir, Pruebas. Podemos ver las bases de datos que existen en Mysql, sin
ms que hacer:
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| Prueba |
| mysql |
| test
|
+----------+
3 rows in set (0.55 sec)
mysql> _
Ahora que sabemos qu bases de datos existen (no borris las otras dos, porque
son propias del programa), vamos a elegir una con la que trabajar, escribiendo
esto:
mysql> USE Prueba;
Database changed
mysql> _
Con la base de datos que vamos a usar activa, crearemos una tabla, haciendo esto:
mysql> CREATE TABLE USUARIOS(
-> USUARIO VARCHAR(30) NOT NULL,
-> EMAIL VARCHAR(50) NOT NULL,
-> NOMBRE VARCHAR(20) NOT NULL,
-> APELLIDOS VARCHAR(40) NOT NULL,
-> ICONO INTEGER,
-> PRIMARY KEY(USUARIO));
Query OK, 0 rows affected (0.83 sec)
mysql> _
Por claridad, he escrito cada campo en una lnea. Como an no haba escrito el
punto y coma terminador de sentencia SQL, al darle a ENTER l ha puesto la flecha
-> y la indentacin.
Y ahora que hemos creado la tabla, vamos a borrarla para ello, haremos:
mysql> DROP TABLE USUARIOS;
Query OK, 0 rows affected (0.11 sec)
mysql> _
Llevad cuidado cuando borris una tabla, pues no quedar ni rastro de ella, as que
luego no podris recuperar los datos que hubiera. Hay que estar muy seguro de
que se quiere borrar una tabla para hacerlo.
Y, puestos a borrar, vamos a borrar la base de para lo que haremos:

32/39

mysql> DROP DATABASE Prueba;


Query OK, 0 rows affected (0.11 sec)
mysql> _
Hemos borrado la base de datos entre otras cosas porque era un ejemplo y
tampoco era demasiado til O;-)
Vamos a salir del programa, ejecutando exit.
Ya sabemos crear la base de datos, elegirla de entre unas cuantas, crear tablas...
insertar registros tampoco ser nada complicado, sin embargo, estara bien poder
pensar cmo ser la base de datos, escribir en algn fichero los comandos a
ejecutar, y pasar ese script a MySQL, incluso, con algunas inserciones de registros,
si es necesario. Bien, pues de eso es de lo que vamos a ver ahora un ejemplo.
Con cualquier editor de texto, nos creamos un fichero como este (yo lo he llamado
ScriptEjemplo.sql):
CREATE DATABASE REGISTRO;
USE REGISTRO;
CREATE TABLE USUARIOS(
USUARIO VARCHAR(30) NOT NULL,
EMAIL VARCHAR(50) NOT NULL,
NOMBRE VARCHAR(20) NOT NULL,
APELLIDOS VARCHAR(40) NOT NULL,
ICONO INTEGER,
PRIMARY KEY(USUARIO) );
La extensin no es importante, simplemente ser para recordarnos que ese archivo
contiene comandos SQL, pero a MySQL le dar igual que pongas esa, otra o
ninguna extensin. Lo que le importar es que el fichero exista, y que contenga
comandos escritos correctamente y en el orden correcto (por ejemplo, no se puede
crear una tabla antes de elegir la base de datos).
Lo grabamos donde queramos, y luego ejecutamos:
mysql < UNIDAD:\RUTA\ScriptEjemplo.sql
Si todo ha ido bien, MySQL habr hecho todo lo que estuviera escrito en el fichero.
Si algo ha fallado, dir qu error ha sucedido. Con la base de datos del ejemplo del
script, volvemos a entrar en MySQL. Escribimos USE Registro; para seleccionar esa
base de datos, y vamos a insertar un registro, tal que este (por ejemplo):
mysql> INSERT INTO USUARIOS(USUARIO,EMAIL,NOMBRE,APELLIDOS,ICONO)
-> VALUES(
-> 'MADDY',
-> 'MADDY@MADDY.COM',
-> 'MADDY',
-> 'MADDY',
-> 1);

Query OK, 1 row affected (0.33 sec)

33/39

mysql> _
Si queremos realizar ahora una consulta, ser tan sencillo como escribir lo
siguiente:
mysql> SELECT USUARIO FROM USUARIOS;
+--------- +
| USUARIO |
+--------- +
| MADDY |
+--------- +
1 row in set (0.55 sec)
mysql> _
Por ltimo, vamos a ver una accin que nos resultar til cuando no nos acordemos
de cmo estaba definida una tabla, qu campos tena, de qu tipo, etc., se trata de
SHOW COLUMNS FROM tabla. Lgicamente, para ello debemos tener seleccionada
una base de datos ;-)
mysql> SHOW COLUMNS FROM USUARIOS;
+-----------+-------------+------+----- +---------+-------+--------------------------------+
| Field
| Type
| Null | Key | Default | Extra | Privileges
|
+-----------+-------------+------+----- +---------+-------+--------------------------------+
| USUARIO | varchar(30) |
| PRI |
|
| select,insert,update,references
|
| EMAIL
| varchar(50) |
|
|
|
| select,insert,update,references |
| NOMBRE | varchar(20) |
|
|
|
| select,insert,update,references |
| APELLIDOS | varchar(40) |
|
|
|
| select,insert,update,references |
| ICONO
| int(11)
| YES |
| NULL |
| select,insert,update,references
|
+-----------+-------------+------+----- +---------+-------+--------------------------------+
5 rows in set (0.60 sec)
Y aqu tenemos la informacin que queramos

Mostrar los datos de una consulta


Mostrar los datos de una consulta con paginacin.
Para ello debe existir una base de datos en mysql con los campos Nombre,
Apellidos, Edad, Dni.
<?php
$conexion=mysql_connect("prueba","a1","a1");
mysql_select_db("a1");
$LongitudDePagina=5;
$cadenasql="select * from personas";
$r=mysql_query($cadenasql,$conexion);
$usuarios=mysql_affected_rows($conexion);
$paginas=ceil($usuarios/$LongitudDePagina);
if ($_GET['pagina'])

34/39

{
$pagina=$_GET['pagina'];
}
else
{
$pagina=0;
}
$inicio=$pagina * $LongitudDePagina;
$cadenasql="select * from personas limit $inicio,$LongitudDePagina";
$r=mysql_query($cadenasql,$conexion);
echo "<table border='2'>
<tr><td>Nombre<td>
<td>Apellidos<td>
<td>Edad<td>
<td>DNI<td></tr>";
while ($fila=mysql_fetch_array($r,MYSQL_ASSOC))
{
echo "<tr><td>{$fila['Nombre']}<td>
<td>{$fila['Apellidos']}<td>
<td>{$fila['Edad']}<td>
<td>{$fila['Dni']}<td>
<tr><a href="comentarios.php?<? echo $fila['id_noticia']?>" title ="Ver
comentarios"></a></tr>";
}
for ($i=0;$i<$paginas;$i++)
{
if ($i!=$pagina)
{
echo "<a href='paginacion.php?pagina=$i'>$i</a>";
}
else
{
echo "<b>- $i- </b>";
}
}
?>

35/39

4. Operaciones con registros

Aadir registros
En esta leccin vamos ver como podemos aadir nuevos registros a nuestra
BD. La recogida de datos la vamos a hacer a travs de un interfaz de web. En
primer lugar vamos a crear una pgina web con un simple formulario, con los
campos que deseamos.
Veamos el siguiente ejemplo.
<html>
<!-- creation date: 20/04/2005 -->
<head>
<title>Formulario de insercin de datos en PHP</title>
</head>
<body>
<form action="<?echo $_SERVER['PHPSELF']?>" method="post">
Inserte su nombre:<input type="text" name="Nombre" size=40 maxlength=40>
<br>
Inserte
sus
apellidos:<input
type="text"
name="Apellidos"
size=40
maxlength=40>
<br>
Inserte su edad:<input type="text" name="Edad" size=40 maxlength=40>
<br>
Inserte su DNI:<input type="text" name="DNI" size=40 maxlength=40>
<br>
<input type="submit" value="Introducir datos">
</form>
<? if ($_POST)
{
$nombre=$_POST['Nombre'];
$apellidos=$_POST['Apellidos'];
$edad=$_POST['Edad'];
$DNI=$_POST['DNI'];
$conexion=mysql_connect("prueba","a 1","a1");
mysql_select_db("a 1");
$cadenasql="insert into personas values('$nombre','$apellidos',$edad,$DNI) ";
$r=mysql_query($cadenasql,$conexion);
if ($r)
{
echo "Insercin correcta";
}
else
{
echo "Insercin incorrecta";
}

36/39

}
?>
</body>
</html>

Como se puede ver, se ha creado en el mismo fichero la parte del formulario


con la parte de cdigo de PHP para almacenar los datos del formulario, esta forma
de trabajar da ms integridad.

Modificar registros en MySQL


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 las modificaciones, o ambas cosas
a la vez. Suponemos que las modificaciones las recogemos en un formulario, el
campo que se debe rellenar forzosamente es el DNI ya que se considera clave.
Como en el caso anterior, no se va a detallar el control de errores hasta ese nivel.
<html>
<!-- creation date: 20/04/2005 -->
<head>
<title>Formulario de modificacin de datos en PHP</title>
</head>
<body>
<form action="<?echo $_SERVER['PHPSELF']?>" method="post">
Inserte su nombre:<input type="text" name="Nombre" size=40 maxlength=40>
<br>
Inserte
sus
apellidos:<input
type="text"
name="Apellidos"
size=40
maxlength=40>
<br>
Inserte su edad:<input type="text" name="Edad" size=40 maxlength=40>
<br>
Inserte su DNI:<input type="text" name="DNI" size=40 maxlength=40>
(Obligatorio)
<br>
<input type="submit" value="Actualizar datos">
</form>
<? if($_POST)
{
$nombre=$_POST['Nombre'];
$apellidos=$_POST['Apellidos'];
$edad=$_POST['Edad'];
$DNI=$_POST['DNI'];
$conexion=mysql_connect("prueba","a1","a1");
mysql_select_db("a 1");
$asigna=set dni=$DNI; // CASO SE ESTAR TODOS VACIOS
if (!empty($nombre) || !empty($apellidos) || !empty($edad))
{
$asigna=SET ;

37/39

if (!empty($nombre))
{
$asigna.= nombre=$nombre ;
}
if (!empty($edad))
{
$asigna.= ,edad= $edad ;
}
if (!empty($apellidos))
{
$asigna.= ,apellidos=$apellidos ;
}
}
$cadenasql="update personas
$asigna
where dni= $DNI";

//DETALLE de construir la expresin

$r=mysql_query($cadenasql,$conexion);
if ($r)
{
echo "Actualizacin realizada";
}
else
{
echo "Error bases de datos";
}
}
?>
Nota:

para

saber

si

la

operacin

ha

modificado

algo,

debes

usar

el

mysql_affected_rows

Borrar registros
El proceso de borrar un registro es idntic o al de modificar, solo que en vez
de utilizar UPDATE utilizamos DELETE en la sentencia SQL. Por tanto el script
quedara como sigue.
Borrado registros de BD por el Dni:
<html>
<!-- creation date: 20/04/2005 -->
<head>
<title>Formulario de borrado de datos en PHP</title>
</head>
<body>
<form action="<?echo $_SERVER['PHPSELF']?>" method="post">
DNI a borrar:<input type="text" name="DNI" size=40 maxlength=40>
<br>

38/39

<input type="submit" value="Borra r datos">


</form>
<? if($_POST)
{
$DNI=$_POST['DNI'];
$conexion=mysql_connect("prueba","a1","a1");
mysql_select_db("a 1");
$cadenasql="delete from personas where dni= $DNI";
$r=mysql_query($cadenasql,$conexion);
if ($r)
{
echo "borrado realizada";
}
else
{
echo "Error base de datos";
}
}
?>

39/39

Potrebbero piacerti anche