| |
PHP - Scripts
1º.- recogeremos los datos del formulario mediante method=POST.
<?php
$to = "rafaclemente@wanadoo.es";
$subject = "Solicitud de información";
$from = $_POST['email'];
$from_header = "From: $from";
$getNombre = $_POST['NombreRazonSocial'];
$getContactar = $_POST['PersonaDeContacto'];
$getDni = $_POST['DNI'];
$getDireccion = $_POST['Direccion'];
$getCodPostal = $_POST['CodigoPostal'];
$getPoblacion = $_POST['Poblacion'];
$getProvincia = $_POST['Provincia'];
$getFax = $_POST['fax'];
$getTelefonos = $_POST['telefonos'];
$getComent = $_POST['Comentarios'];
$contents = " MIs datos son... Nombre: $getNombre
|| contactar con: $getContactar || DNI: $getDni || Dirección: $getDireccion,
$getCodPostal - $getPoblacion ($getProvincia) || Telefonos: $getTelefonos
, Fax: $getFax e_mail: $from || otros datos: $getComent";
2º.- condición de evaluación de datos del formulario.
if(($getNombre =='') or ($getDireccion == '')
or ($getPoblacion == '') or ($getTelefonos == '')){
echo " Los campos nombre, dirección, población
o telefono son obligatorios, cumplimentelos correctamente y vuelva
a enviar sus datos
}else{
3º.- este es el código que envia el email
mail($to, $subject, $contents, $from_header);
echo "Sus datos han sido enviados con exito.";
}
?>
Por ejemplo enviar imagenes a la carpeta img de nuestro
sitio web.
1º.- crear el archvio config.php
<?php
$path = "../img"; //la carpeta donde
se enviaran los archivos
$size_limit = "yes"; //establece limite
de tamaño en yes.
$limit_size = "2000000"; //el máximo
de tamaño de las imagenes en bytes
$limit_ext = "yes"; //establece filtro
para extensiones de archivo en yes.
$ext_count = "3"; //número total de extensiones
en el array.
$extensions = array(".gif", ".jpg", ".avi");
//tipo de extensiones de los archivos a subir.
?>
2º creamos el código que sube las imagenes e introduce un
enlace en una base de datos imgs.
<?php
include "config.php";
include "../conn.php"; //archivo de conexión
con la base de datos.
print('<table border="1" cellpadding="0" cellspacing="0"
bordercolor="#FFFFFF" width="450">
<tr>
<td bgcolor="#999999" height="25" align="center">
<font size="2"><b>ENVIAR ARCHIVO</b></font></td>
</tr>');
$getIdp = $_GET['Idp']; //identificador
para añadir a la base de datos.
$getIdc = $_GET['Idc'];
print("<tr><td align='center' bgcolor='#FFFFC4'>
<br>
<form method='POST' action='upload.php' enctype='multipart/form-data'>
<input type=file name=file size=30>
<input name='getIdpiso' type='hidden' size='4' value='$getIdp'>
<input name='getIdclte' type='hidden' size='4' value='$getIdc'><br>
<br>
<button name='submit' type='submit'> Enviar archivo</button>
</form></td></tr>
<tr> <td> </td></tr></table>");
include "config.php";
include "../conn.php";
$getIdpiso = $_POST['getIdpiso'];
$getIdclte = $_POST['getIdclte'];
$result = "<font size=\"3\">EL
ARCHIVO HA SIDO ENVIADO</font>";
if ($file_name == "") {
$result = "<font size=\"3\">ningún archivo
seleccionado</font>";
}else{
if(file_exists("$path/$getIdpiso$file_name")) {
$result = "<font size=\"4\">EL ARCHIVO YA EXISTE</font>";
} else {
if (($size_limit == "yes") && ($limit_size <
$file_size)) {
$result = "<font size=\"3\">EL ARCHIVO ES DEMASIADO
GRANDE</font>";
} else {
$ext = strrchr($file_name,'.');
if (($limit_ext == "yes") && (!in_array($ext,$extensions)))
{
$result = "<font size=\"3\">EL ARCHIVO NO TIENE
LA EXTENSION CORRECTA</font>";
}else{
copy($file, "$path/$getIdpiso$file_name") or $result = "<font
size=\"2\">no se puede copiar el archivo</font>";
$baseDat = ("INSERT INTO imgs (Idpiso,
Idclte, enlace) VALUES ('$getIdpiso','$getIdclte','$file_name')");
//anexa a la base de datos.
mysql_query($baseDat, $con) or die (mysql_error());
}
}
}
}
printf('<table border="1" cellpadding="0"
cellspacing="0" width="450" bordercolor="#FFFFFF">
<tr><td bgcolor="#999999" height="25"
align="center">
<font size="4" color="#FFFFFF"><b>resultado</b></font></td></tr>
<tr><td bgcolor="#818EA0" align="center">');
echo "<font size=\"4\" color=\"#FFFFFF\">$result
</font>";
printf('</td>
</tr><tr><td bgcolor="#999999" height="25"></td>
</tr></table>');
?>
En este script, 1º.- crearemos una consulta que seleccione los
datos de la población, la provincia o el tipo de vivienda,
por ejemplo en una base de datos de pisos. Para ello creamos un formulario
y añadimos casillas de selección.
<form action="BuscarPisos.php"
method="post" name="buscar" id="buscar"
target="ventbuscar">
e introducimos el código php.
<select name="tipo" size="4"
id="tipo">
<?php
include("conn.php");
$seltip = "SELECT tipo FROM pisos GROUP BY tipo ORDER BY tipo";
$ressel = mysql_query($seltip) or die(mysql_error());
if(mysql_num_rows($ressel)>0){
while($fila = mysql_fetch_array($ressel)){
printf("<option>%s</option>",$fila[0]); //opciones
del tipo de control select de un formulario
}
}
?>
</select> </td>
<td width="12%" align="left" valign="top"><strong><font
color="#000033">Poblacion:</font></strong><br>
<select name="poblacion" size="4" id="poblacion">
<?php
include("conn.php");
$selpob = "SELECT poblacion FROM pisos GROUP BY poblacion ORDER
BY poblacion";
$ressel = mysql_query($selpob) or die(mysql_error());
if(mysql_num_rows($ressel)>0){
while($fila = mysql_fetch_array($ressel)){
printf("<option>%s</option>",$fila[0]);
}
}
?>
</select> </td>
<td width="13%" align="left"
valign="top"><strong><font color="#000033">Provincia:<br>
</font></strong> <select name="provincia"
size="4" id="provincia">
<?php
include("conn.php");
$selpro = "SELECT provincia FROM pisos GROUP BY provincia ORDER
BY provincia";
$ressel = mysql_query($selpro) or die(mysql_error());
if(mysql_num_rows($ressel)>0){
while($fila = mysql_fetch_array($ressel)){
printf("<option>%s</option>",$fila[0]);
}
}
?>
</select></td>
<td width="19%" align="left" valign="top"><br>
<input type="submit" name="Submit" value="BUSCAR">
<br><br>
<input name="reset" type="reset"
value="Nueva Busqueda"> </td>
</tr></form>
- Con esto conseguimos que siempre que se cree un nuevo registro en
la base de datos, si por ejemplo la provincia es nueva, aparezca automáticamente
en la casilla de selección para la búsqueda.
2º.- realizamos en un archivo separado con extensión
php el código que realiza la busqueda.
<?PHP
include("conn.php");
//recogemso mediante POST, los datos del formulario.
$recTipo = $_POST['tipo'];
$recPob = $_POST['poblacion'];
$recPro = $_POST['provincia'];
//confeccionamos el filtro
if($recTipo != ''){
$filtroTipo = "tipo='$recTipo'";
}else{ $filtroTipo = "'tipo LIKE '%'";}
if($recPob != ''){
$filtroPob = "and poblacion='$recPob'";
}else{ $filtroPob ="''";}
if($recPro != ''){
$filtroPro = "and provincia='$recPro'";
}else{ $filtroPro ="''";}
$filtro = "$filtroSit $filtroTipo $filtroPob $filtroPro";
if($filtro != ''){ //realizamos la consulta
$reg = "SELECT * FROM pisos WHERE $filtro
ORDER BY provincia";
$verreg = mysql_query($reg) or die(mysql_error());
if(mysql_num_rows($verreg)>0){
while($fila = mysql_fetch_array($verreg)){
//e imprimos los datos en una tabla
printf('<table width="800" border="1"
cellspacing="0" cellpadding="2" bordercolor="#FFFFFF">
<tr align="center" valign="middle" bgcolor="#804040">
<td width="30"><strong><font color="#FFFFFF"
size="2" face="Times New Roman, Times, serif">ID</font></strong></td>
<td width="105"><strong><font color="#FFFFFF"
size="2" face="Times New Roman, Times, serif">PROVINCIA</font></strong></td>
<td width="123"><strong><font color="#FFFFFF"
size="2" face="Times New Roman, Times, serif">POBLACION</font></strong></td>
<td width="63"><strong><font color="#FFFFFF"
size="2" face="Times New Roman, Times, serif">SIT</font></strong></td>
<td width="89"><strong><font color="#FFFFFF"
size="2" face="Times New Roman, Times, serif">TIPO</font></strong></td>
<td width="202"><strong><font color="#FFFFFF"
size="2" face="Times New Roman, Times, serif">DIRECCION</font></strong></td>
<td width="33"><strong><font color="#FFFFFF"
size="2" face="Times New Roman, Times, serif">m2</font></strong></td>
<td width="43"><strong><font color="#FFFFFF"
size="2" face="Times New Roman, Times, serif">Nº
hab.</font></strong></td>
<td width="76"><strong><font color="#FFFFFF"
size="2" face="Times New Roman, Times, serif">PRECIO
€</font></strong></td>
</tr><tr bgcolor="#FFFFBF">
<td><font color="#000033" size="2" face="Times
New Roman, Times, serif">%s</font></td>
<td><font color="#000033" size="2" face="Times
New Roman, Times, serif">%s</font></td>
<td><font color="#000033" size="2" face="Times
New Roman, Times, serif">%s</font></td>
<td><font color="#000033" size="2" face="Times
New Roman, Times, serif">%s</font></td>
<td><font color="#000033" size="2" face="Times
New Roman, Times, serif">%s</font></td>
<td><font color="#000033" size="2" face="Times
New Roman, Times, serif">%s, nº %s %s %s pta.- %s</font></td>
<td><font color="#000033" size="2" face="Times
New Roman, Times, serif">%s</font></td>
<td><font color="#000033" size="2" face="Times
New Roman, Times, serif">%s</font></td>
<td><font color="#000033" size="2" face="Times
New Roman, Times, serif">%s</font></td>
</tr><tr bgcolor="#FFFFBF">
<td colspan="3"><font color="#000033"
size="2"><strong>referencia:</strong> %s-%s</font></td>',
$fila[0],$fila[11],$fila[10],$fila[13],$fila[3],$fila[4],$fila[5],$fila[6],$fila[7],$fila[8],$fila[12],
$fila[18],$fila[21],$fila[1],$fila[2]);
printf("<td colspan='6'>
<a href='fichaPiso.php?Idp=$fila[0]' target='_blank'>Ver FICHA</a></td></tr></table><hr>");
}
}else{ echo "<br><font color='#FF0000'><strong>NO
SE HAN OBTENIDO RESULTADOS</strong></font> <br>
<font color='#000033'>verifique que no ha sido un error o intentelo
con otros
datos.</font> ";}
mysql_free_result($verreg);
mysql_close($con);
}
?>
Con number_format()
Sintaxis:
number_format(numero, decimales, separador_decimal, separador_miles)
Ejemplo:
$numero = 12345.2534
$number = number_format($numero, 2); // $number = 12345.25$number = number_format($numero, 0); // $number = 12345
$number = number_format($numero, 2, ".", ","); // $number = 12,345.25
$number = number_format($numero, 4, ",", "."); // $number = 12.345,2534
Una alternativa a esta función es utilizar printf. Podemos redondear a 2 decimales así:
<?php
printf("%.2f",1.1254784125417);
?>
time
Devuelve el numero de segundos transcurridos desde el 1 de Enero de 1970. A esta forma de expresar fecha y hora se le denomina tmestamp.
date(formato, timestamp)
La funció date devuelve una cte(formato, timestamp)
La funció date devuelve una cadena formateada según los código de formato. Si no le pasamos la variable timestamp nos devuelve la cadena formateada para la fecha y la hora actual.
Los códigos de formato para la función date son:
| CODIGO |
DESCRIPCIÓN |
a |
am o pm |
A |
AM o PM |
d |
Día del mes con ceros |
D |
Abreviatura del día de la semana (inglés) |
F |
Nombre del mes (inglés) |
h |
Hora en formato 1-12 |
H |
Hora en formato 0-23 |
i |
Minutos |
j |
Día del mes sin ceros |
l |
Dia de la semana |
m |
Número de mes (1-12) |
M |
Abreviatura del mes (inglés) |
s |
Segundos |
y |
Año con 2 dígitos |
Y |
Año con 4 dígitos |
z |
Dia del año (1-365) |
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") -> 2000
- 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
mktime(hora, min, seg, mes, dia, año)
La funcion mktime devuelve una variable de tipo timestamp a partir de las coordenadas dadas. La principal utilidad de esta funcion es la de añadir o quitar una determinada cantidad de fecha u horas a una dada.
<?PHP
function restarDias($numdias, $date) {
if (isset($date)) {
$date = time();
}
list($hora, $min, $seg, $dia, $mes, $anno) = explodest($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)."<BR>";
echo restarDias(10)."<BR>";
?>
chekdate (mes, dia, año)
La función chekdate comprueba si una fecha es válida, si es así devuelve TRUE y si no lo es FALSE. Una fecha se considera válida si el año está entre 1900 y 32767, el mes entre 1 y 12, y el dia es menor o igual que número de días total del mes en cuestión.
<?PHP
if (checkdate(31, 2, 2000)) {
echo "La fecha es correcta";
} else {
echo "La fecha es incorrecta";
}
?>
Para el ejemplo anterior nos daría que la fecha es incorrecta, febrero nunca tiene un día 31.
Cuando utilizamos la tecnología PHP solemos trabajar con la base de datos MySQL. En estos dos sistemas los formatos de fechas cambian sensiblemente, así que será muy interesante conocer una manera rápida de pasar de un formato de fecha a otro, dependiendo de dónde vamos a utilizar esa fecha. Pues, si trabajamos con MySQL deberemos expresar la fecha de una manera distinta a la que lo haríamos a la hora de mostrarla en la página para que la entienda fácilmente un lector hispano.
En muchos casos, debemos vérnoslas entre dos tipos de formatos distintos, aunque podría ser peor. Por ejemplo, si la página estuviese en varios idiomas, sería importante escribir correctamente las fechas en cada uno de los idiomas.
Dejando temas relacionados con el idioma aparte -concentrándonos tan sólo en el Español-, en nuestras páginas programadas en PHP y con base de datos MySQL, tendremos que trabajar con dos formatos. Por un lado tenemos las fechas en castellano, que tienen el formato dd/mm/aaaa y por otro lado tenemos el formato de MySQL, que tiene la sintaxis aaaa-mm-dd.
Lo más cómodo, tal como vemos nosotros este problema, es crear un par de funciones que conviertan las fechas de un formato a otro. Habrá una función que convertirá la fecha de MySQL a Castellano y otra que lo convierta de Castellano a MySQL.
//Convierte fecha de mysql a normal
function cambiaf_a_normal($fecha){
ereg( "([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})", $fecha, $mifecha);
$lafecha=$mifecha[3]."/".$mifecha[2]."/".$mifecha[1];
return $lafecha;
}
//Convierte fecha de normal a mysql
function cambiaf_ a_mysql($fecha){
ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fecha, $mifecha);
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
return $lafecha;
}
Las funciones utilizan expresiones regulares que no hemos visto todavía, así que no vamos a tratar de explicar cómo funcionan, sino que explicaremos cómo utilizarlas.
Mostrar en la página una fecha en castellano
Si tenemos una fecha en formato MySQL y deseamos colocarla en una página haremos algo como sigue.
Suponemos que la fecha está extrayéndose a través de una consulta a la base de datos y la tenemos en una variable llamada $fila->fecha. Además, colocamos la fecha en un campo de formulario.
<input type="text" name="fecha" value="<?echo cambiaf_a_normal($fila->fecha);?>">
Colocar en la base de datos una fecha en formato MySQL
Cuando el usuario nos manda una fecha, por ejemplo, a través de un formulario con un campo como el que acabamos de ver, lógicamente, escribirá la fecha en castellano. Pero nosotros deseamos guardarla en una base de datos en un formato distinto, así que habremos de convertirla.
Suponemos que tenemos la fecha en una variable llamada $fecha y que está en formato castellano. Además, queremos colocarla en una sentencia SQL que deseamos ejecutar en la base de datos para insertar un registro que contiene, entre otros datos, la fecha que el usuario ha escrito.
mysql_query ("insert into documento (titulo_documento, fecha_documento, cuerpo_documento) values ('$titulo_documento', '" . cambiaf_a_mysql($fecha) . "', '$cuerpo_documento')");
- Números con determinados decimales:
La forma mas sencilla de convertir el número 2.34567 en 2.34 es mediante la función de php number_format().
Su funcionamiento es bien sencillo:
<?
$numero = 2.45968790;
$numero = number_format($numero, 2);
?>
Haciendo esto, formatearemos la variable $numero a dos decimales, quedando:
<?
$numero = 2.46;
?>
- Redondeo de Números:
Si lo que queremos es devolver un valor entero redondeado, nuestra función es ceil():
<?
$numero = 4.7;
ceil($numero);
?>
Si imprimimos el resultado nos mostrará 5.
Si lo que queremos es redondear cadenas, ya sea de numeros enteros o decimales, la función adecuada es round().
<?php
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06
?>
- Dar formato a "palabras":
Cuando usamos cadena alfabeticas, muchas veces nos interesa poner una palabra en mayúsculas, capitalizar un texto,...
Para capitalizar la primera letra de cada palabra, utilizaremos la función ucwords().
<?
$cadena = "esta casa es una ruina";
ucwords($cadena);
?>
No devolvería "Esta Casa Es Una Ruina";
Si lo que queremos es que solo la primera palabra de la cadena se ponga en mayúsculas, debemos usar la función ucfirst():
<?
$cadena = "esta casa es una ruina";
ucfirst($cadena);
?>
No devolvería "Esta casa es una ruina";
También podemos poner todo el texto en mayúsculas o minúsculas usando el mismo formato que en los casos anteriores, pero utilizando las funciones:
- strtolower(): Para todo en minúsculas.
- strtoupper(): Para todo en mayúsculas.
Ahora que ya controlamos el tema el formato de cadenas, podemos empezar a darle utilidades, por ejemplo podemos crear una función que capitalize una cadena:
<?
function mayusculas($texto){
$texto = ucwords(strtolower($texto));
return $texto;
}
?>
La función primero pone todo en minúscula, y después capitaliza.
1º.- crearemos los filtros correspondientes
por ejemplo en unos datos de pisos:
$numHab = "dormitorios = $fila[8]";
$limite = 20000;
$rango1 = $fila[10]+$limite;
$rango2 = 0;
$filtroPre = "precio BETWEEN $rango2 AND $rango1";
$filtro = "$numHab and $filtroPre";
2º.- y aplicamos la consulta:
$totalPisos = "SELECT * FROM datos_pisos WHERE $filtro";
$cuenta = mysql_query($totalPisos) or die(mysql_error());
$row = mysql_num_rows($cuenta);
if(($row)>0){
echo " hay $row registros";
}else{ echo " no hay registros ";}
|