Más sobre PHP
Francisco José Naranjo Abad
Área de Ingeniería Telemática
Departamento de Automática y Computación
Universidad Pública de Navarra
[email protected]
Laboratorio de Interfaces de Redes
http://www.tlm.unavarra.es/asignaturas/lir
11/19/19
Programa de ejemplo (info.php)
info.php
<?php
session_start();
include("inicio.php");
?>
<html>
<head>
<title>Título</title>
</head>
<body>
<?php
$server = "localhost";
$usuario = "lir_user";
$password = "lir_pass";
$link = mysql_connect($server, $usuario, $password);
mysql_select_db("lir_db", $link);
?>
<?php
$_SESSION['MiDato'] = "Esto quiero guardar";
?>
<form enctype="multipart/form-data" action="info2.php?parametro=valor" method="POST">
Nombre <input type="text" name="nombre" /><br /><br />
<input type="hidden" name="MAX_FILE_SIZE" value="300000" />
Enviar fichero: <input name="imagen" type="file" /><br />
<input type="submit" value="Enviar fichero" />
</form>
</body>
<?php
include("fin.php");
?>
9 Nov
9 Nov
<?php
mysql_close($link);
?>
Más sobre PHP
Más sobre PHP
22/19/19
Destino (info2.php)
info2.php
<?php
session_start();
include("inicio.php");
?>
<pre>
<?php
print "Server: ";
print_r($_SERVER);
print "Get: ";
print_r($_GET);
print "Post: ";
print_r($_POST);
print "Env: ";
print_r($_ENV);
print "Request: ";
print_r($_REQUEST);
print "Session: ";
print_r($_SESSION);
print "Files: ";
print_r($_FILES);
?>
</pre>
<?php
include("fin.php");
?>
Los nombres que son clave en el
array asociativo $_SESSION,
deben tener un nombre válido de
variable. Es decir, no pueden
empezar por número
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
33/19/19
$_SERVER
Server: Array
(
[HTTP_HOST] => localhost
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7
[HTTP_ACCEPT] =>
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
[HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5
[HTTP_ACCEPT_ENCODING] => gzip,deflate
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
[HTTP_KEEP_ALIVE] => 300
[HTTP_CONNECTION] => keep-alive
[HTTP_REFERER] => http://locahost/info.php
[HTTP_COOKIE] => PHPSESSID=26465da5723cccfacc1869072db5a8f7
[CONTENT_TYPE] => multipart/form-data; boundary=---------------------------8767276471703
[CONTENT_LENGTH] => 193310
[PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
[SERVER_SIGNATURE] => Apache/2.0.54 (Unix) DAV/2 PHP/4.4.0 Server at localhost Port 80
[SERVER_SOFTWARE] => Apache/2.0.54 (Unix) DAV/2 PHP/4.4.0
[SERVER_NAME] => localhost
[SERVER_ADDR] => 192.168.2.40
[SERVER_PORT] => 80
[REMOTE_ADDR] => 192.168.2.1
[DOCUMENT_ROOT] => /www
[SERVER_ADMIN] =>
[email protected]
[SCRIPT_FILENAME] => /www/info2.php
[REMOTE_PORT] => 4079
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => POST
[QUERY_STRING] => parametro=valor
[REQUEST_URI] => /info2.php?parametro=valor
[SCRIPT_NAME] => /info2.php
[PHP_SELF] => /info2.php
[PATH_TRANSLATED] => /www/info2.php
[argv] => Array
( [0] => parametro=valor )
[argc] => 1
)
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
44/19/19
$_GET, $_POST, $_ENV
Get: Array
([parametro] => valor )
Post: Array
(
[nombre] => Plano del departamento
[MAX_FILE_SIZE] => 300000
)
Env: Array
(
[HZ] => 100
[TERM] => linux
[SHELL] => /bin/bash
[HUSHLOGIN] => FALSE
[USER] => root
[LD_LIBRARY_PATH] => /programas/apache2/lib:
[PATH] =>
[MAIL] => /var/mail/root
[PWD] => /programas/apache2
[LANG] => es_ES@euro
[HOME] => /root
[SHLVL] => 2
[LOGNAME] => root
[_] => /programas/apache2/bin/httpd
)
9 Nov
9 Nov
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X
11
Más sobre PHP
Más sobre PHP
55/19/19
$_REQUEST, $_SESSION, $FILES
Request: Array
(
[parametro] => valor
[nombre] => Plano del departamento
[MAX_FILE_SIZE] => 300000
[PHPSESSID] => 26465da5723cccfacc1869072db5a8f7
)
Session: Array
(
[MiDato] => Esto quiero guardar
)
Files: Array
(
[imagen] => Array
(
[name] => plano_departamento.gif
[type] => image/gif
[tmp_name] => /tmp/phpx1UEna
[error] => 0
[size] => 192884
)
)
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
66/19/19
Lectura sencilla de MySQL
<?php
session_start();
include(“inicio.php”);
?>
<html><head><title>Uso PHP, MySQL y HTML</title></head>
<body>
<table border=“0”>
<tr><td>ID</td><td>Usuario</td></tr>
<?php
$query = “SELECT * FROM Usuarios”;
$result = mysql_query($query, $link);
while($row = mysql_fetch_array($result))
{
print “<tr><td>”.$row[‘id’].”</td><td>”.$row[‘usuario’].”</td></tr>\n”;
}
?>
</table>
</body>
<?php
include(“fin.php”);
?>
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
77/19/19
Cómo NO hay que completar
valores
<select name=“year”>
<option value=“2005”> 2005 </option>
<option value=“2006”> 2006 </option>
<option value=“2007”> 2007 </option>
... etc ...
<option value=“2014”> 2014 </option>
</select>
</form>
</body>
</html>
<?php include(“fin.php”); ?>
<?php session_start();
include(“inicio.php”); ?>
<html>
<html>
<head>
<title>Ejemplo con selects</title>
</head>
<body>
<form method=“post” action=“info.php”>
<select name=“day”>
<option value=“1”>1</option>
<option value=“2”>2</option>
<option value=“3”>3</option>
... etc ...
<option value=“31”>31</option>
</select>
<select name=“month”>
<option value=“1”>Enero</option>
<option value=“2”>Febrero</option>
<option value=“3”>Marzo</option>
... etc ...
<option value=“12”>Diciembre</option>
</select>
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
88/19/19
Cómo SÍ hay que completar
valores
<?php session_start(); include(“inicio.php”); ?>
<html>
<html>
<head>
<title>Ejemplo con selects</title>
</head>
<body>
<form method=“post” action=“info.php”>
<select name=“day”>
<?php
$meses = array(“Enero”, “Febrero”, “Marzo”,...etc...,”Diciembre”);
for($i=1;$i<=31;$i++)
print “ <option value=\“$i\”>$i</option>\n”;
?>
</select>
<select name=“day”>
<?php
foreach($meses AS $clave => $actual)
print “ <option value=\“”.($clave+1).”\”>$actual</option>\n”;
?>
</select>
<select name=“year”>
<?php
$init_year = strftime(“%Y”);
$end_year = $init_year+10;
for($i=$init_year;$i<$end_year;$i++)
print “ <option value=\“$i\”>$i</option>\n”;
?>
</select>
</form>
</body>
</html>
<?php include(“fin.php”); ?>
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
99/19/19
Cómo ayudarnos de MySQL
● MySQL también puede hacer operaciones, contar
filas, agrupar por elementos...
Compras
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
1010/19/19
Para ver todos los elementos vendidos (sin repetir)
SELECT DISTINCT(elemento) FROM Compras
SELECT elemento FROM Compras GROUP BY elemento
Ver el dinero gastado en cada compra
SELECT id_compra,SUM(valor) FROM Compras GROUP BY id_compra
Número de unidades vendidas de cada elemento
SELECT elemento,COUNT(*) FROM Compras GROUP BY elemento
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
1111/19/19
Mandar mails
● PHP puede utilizar el Mail Transport Agent (MTA)
del sistema para enviar e-mails
● Con la función mail()
bool mail ( string to, string subject, string message
[, string additional_headers [, string
additional_parameters]] )
● Ejemplo:
mail(“
[email protected]”, “Datos del
programa”, “Los datos son:\n\n1\n2\n3\n\n y ya
está”, “From:
[email protected]\r\n”
.”CC:
[email protected]”);
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
1212/19/19
Variables
● Las variables son locales a su “scope”
● Si queremos que “traspasen” estos límites, usar global
● Este comportamiento no se cumple con las “superglobals”
puesto que existen en todo el script: $_GET, $_POST,
$_SERVER, $_SESSION, etc
● Ejemplo:
$a = “DatoA”;
$b = “DatoB”;
function hacer_algo($a)
{
global $b;
global $_GET[‘c’];
return $a.$b.$_GET[‘c’];
}
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
1313/19/19
Includes
Cuando se realiza un include() de un fichero:
● El código en él se ejecuta. Por ejemplo: primer
ejemplo de hoy
● Las funciones en él, no se ejecutan, sólo “se
definen”. Permiten su uso, pero no son ejecutadas
hasta que se llaman
Con las conexiones y demás elementos de patrón
“Singleton”, con require_once() o include_once
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
1414/19/19
Acceso al sistema y ficheros
● Podemos ejecutar comandos del sistema
system(“ls –al /etc/init.d”)
● Trabajar con ficheros y directorios
(http://es.php.net/manual/en/ref.dir.php)
●
●
$dir = "/etc/php5/";
// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
echo "filename: $file : filetype: " . filetype($dir .
$file) . "\n";
}
closedir($dh);
}
}
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
1515/19/19
Clases y objetos
● Siempre que sea posible, usar clases y objetos
● Pese a que PHP4 realiza una implementación
“particular”, funciona y da buenos resultados
● La orientación a objetos siempre permite
escalabilidad y control sobre el programa
● Si no se usan objetos, por lo menos dividir el
programa en partes y trabajar con funciones e
includes
9 Nov
9 Nov
Más sobre PHP
Más sobre PHP
1616/19/19
Clases y objetos
class Vegetable {
var $edible;
var $color;
function Vegetable($edible, $color="green")
{
$this->edible = $edible;
$this->color = $color;
}
class Spinach extends Vegetable {
var $cooked = false;
function is_edible()
{
return $this->edible;
}
function what_color()
{
return $this->color;
}
}
9 Nov
9 Nov
function Spinach()
{
$this->Vegetable(true, "green");
}
function cook_it()
{
$this->cooked = true;
}
function is_cooked()
{
return $this->cooked;
}
Más sobre PHP
}
Más sobre PHP
1717/19/19
Lugares de referencia
Usar el manual... Todo está ahí
Manual de PHP
● http://www.php.net/manual
Comentarios de: Más sobre PHP (0)
No hay comentarios