Dar un valor inicial a un radio button si no tiene valor (jQuery+PHP)

Esta es una ampliación de este otro post reciente.

Si tenemos este trozo de formulario:

<input type="radio" name="tipo_cliente" id="tipo_cliente_defecto" value="2" <?=$valor_inicial==2?'checked':'';?>/> Particular
<input type="radio" name="tipo_cliente" value="3" <?=$valor_inicial==3?'checked':'';?>"/> Aut&oacute;nomo
<input type="radio" name="tipo_cliente" value="1" <?=$valor_inicial==1?'checked':'';?>"/> Empresa

En el que dependiendo del valor de la variable $valor_incial (variable PHP) se escoge una opción u otra.

En ocasiones puede que esa variable no tenga valor (porque sea la primera vez que se rellena el formulario por ejemplo). Podemos solucionarlo dándole el valor inicial en PHP o podemos hacerlo con jQuery:

$(document).ready(function() {
	if(!$("input[name=tipo_cliente]:checked").val()) {
		$("#tipo_cliente_defecto").prop('checked', 'checked');
	}	
});

Claro está, para que funcione la opción que queremos por defecto debe tener la id tipo_cliente_defecto.

Servidor Web + PHP + MySQL + PHPMyAdmin en Android

Hoy he encontrado una joyita que quiero compartir con vosotros. Si le tenéis tanta aversión a Java como yo (¿por qué? … manías) tengo una buena noticia. Podéis desarrollar aplicaciones web para Android que funcionan sin conexión a Internet gracias a KSWEB, un servidor web que incluye PHP y MySQL.

Lo estoy probando y, por ahora, me está sorprendiendo gratamente. Se puede instalar gratis pero la licencia expira en cinco días. Cuesta unos tres euros pero si cumple lo que promete los vale. Os mantendré informados.

 KSWeb - Servidor web + PHP + MySQL en Android

Enlace a la web del autor: http://kslabs.ru/

Función en PHP para calcular si un DNI o un NIE son válidos

He aquí un clásico por el que todos habremos tenido que pasar alguna vez. Acabo de rescatarlo del armario del olvido y lo he modificado para que compruebe también si es un NIE válido (documento de identidad para extranjeros). Espero que a alguien le sirva de ayuda:

function comprobar_documento_identificacion($dni) {
	if(strlen($dni)<9) {
		return "DNI demasiado corto.";
	}
 
	$dni = strtoupper($dni);
 
	$letra = substr($dni, -1, 1);
	$numero = substr($dni, 0, 8);
 
	// Si es un NIE hay que cambiar la primera letra por 0, 1 ó 2 dependiendo de si es X, Y o Z.
	$numero = str_replace(array('X', 'Y', 'Z'), array(0, 1, 2), $numero);	
 
	$modulo = $numero % 23;
	$letras_validas = "TRWAGMYFPDXBNJZSQVHLCKE";
	$letra_correcta = substr($letras_validas, $modulo, 1);
 
	if($letra_correcta!=$letra) {
		return "Letra incorrecta, la letra deber&iacute;a ser la $letra_correcta.";
	}
	else {
		return "OK";
	}
}

Función PHP para dar formato a un número de teléfono

Hoy os dejo una sencilla función que nos formatea un número de teléfono para que quede más “leíble”. Lo primero que hace es eliminar espacios y guiones (puedes eliminar otros caracteres añadiéndolos al array) y luego agrupa los dígitos de 3 en 3. Por ejemplo:

94 444 4888 -> 944 444 888
944444888 -> 944 444 888
+3494 444 4888 -> +34 944 444 888

Esto se consigue con este sencillo código:

function telefono($numero) {
	$numero = str_replace(array(" ", "-"), array(""), $numero);
	$comienzo = strlen($numero);
	$resultado = '';
	while($comienzo>=0) {
		$resultado = substr($numero, $comienzo, 3) . " " . $resultado;
		$comienzo -= 3;
	}
	return $resultado;
}

El Rincón del PHP – Web dedicada a la programación en PHP

Siguiendo con nuestros contínuos lanzamientos 🙂 hace un par de días pusimos en marcha la nueva web del Rincón del PHP.

La idea de la web es ser un punto en el que poder encontrar información sobre PHP, cursos y un foro donde podamos conocernos, compartir ideas y exponer dudas.

Entra en el Rincón del PHP, los foros están nuevecitos ¿te animas a estrenarlos?

Code Igniter: llamar a un controlador desde consola o desde otro fichero.php

Si has trabajado con Code Igniter encontrarás este “truquillo” de mucha utilidad. Te permitirá llamar a un controlador desde consola o desde otro fichero PHP. Por ejemplo:

1) Supón que tienes una tarea (en un cron) que tiene que llamar a un controlador de tu aplicación Code Igniter. Supongamos que tienes un controlador que se llama ‘saludar’ y quieres llamar a la función ‘decir_hola’ de ese controlador. No puedes hacer la llamada así:

php /var/www/saludar/decir_hola

ni:

php /var/www/index.php/saludar/decir_hola

(pruébalo)

2) También es posible que necesites recibir parámetros $_GET pero, por ejemplo, no sabes en el orden en el que te los van a enviar.

En ambos casos puedes crear un fichero llamado, por ejemplo, redirigir.php con el contenido siguiente:

<?php
// Recoger parámetros o cualquier otra tarea previa que necesites antes de llamar al controlador
...
// Fin de tareas previas
 
$_SERVER['PATH_INFO']    = 'saludar/decir_hola';
 
require('index.php');
?>

o incluso, podemos pasarle parámetros desde la consola:

<?php
$_SERVER['PATH_INFO']    = $argv[1];
require('index.php');
?>

(Si usas el fichero .htaccess no olvides añadir este fichero redirigir.php para que se pueda ejecutar).

Curso de PHP: Ejercicios de cadenas y funciones

Dado que llevo bastante tiempo impartiendo cursos de PHP en Bilbao ya va siendo hora de poner un poco de orden y actualizar los ejercicios.

Según los vaya poniendo “bonitos” los iré publicando aquí.

En esta primera tanda pondré algunos ejercicios de cadenas y funciones que servirán de repaso a mis alumnos. A ver si se animan algunos a hacerlos, que haciendo el esfuerzo de resolverlos es como se aprende, no mirando cómo los resuelve otro (este es un pequeño tirón de orejas para un par de personas 😀 ).

<?php
/*
 * Para los siguientes ejercicios se deben/pueden usar las siguientes funciones:
 * 
 * - substr($cadena, $comienzo, $longitud);
 * 		Extrae una subcadena de una cadena:
 * 		$cadena - es la cadena de la que queremos sacar una subcadena
 * 		$comienzo - es la posición a partir de la que empezamos a extraer. El primer carácter
 * 		está en la posición 0.
 * 		$longitud - con este parámetro indicamos la longitud de la cadena. Es opcional, si
 * 		no lo ponemos nos cogerá todo desde el comienzo que hemos especificado hasta el final.
 * 
 * - strlen($cadena);
 * 		Cuenta el número de caracteres que tiene la cadena.
 * 
 * - strtoupper($cadena);
 * 		Convierte una cadena en mayúsculas.
 */
 
/*
 * Ejercicio 1:
 * 
 * Escribir una función que convierta la primera letra de una cadena en mayúsculas.
 * 
 */
 
echo '<h1>Ejercicio 1</h1>';
 
function corregir_primera_letra($cadena)
{
 
}
 
echo corregir_primera_letra('gorka'); // --> debe mostrar: Gorka
echo "<br/>";
echo corregir_primera_letra('GORKA'); // --> debe mostrar: GORKA
echo "<br/>";
echo corregir_primera_letra('Gorka'); // --> debe mostrar: Gorka
echo "<br/>";
 
/*
 * Ejercicio 2:
 * 
 * ¿Daría algún error si usamos una cadena de una sola letra? ¿Sabrías por qué?
 * 
 */
 
echo '<h1>Ejercicio 2</h1>';
echo corregir_primera_letra('G');
echo "<br/>";
 
/*
 * Ejercicio 3:
 * 
 * ¿Funcionaría bien la siguiente función? Por el nombre es evidente que no pero
 * ¿por qué? 
 */
 
function corregir_primera_letra_version_mala($cadena)
{
	$letra = substr($cadena, 0, 1);
	$letra = strtoupper($letra);
	$resto = substr($cadena, 1);
	$cadena_corregida = $letra . $cadena;
	return $cadena_corregida;	
}
 
/*
 * Ejercicio 4:
 * 
 * Crear una función que coja una cadena, ponga la primera en mayúsculas y
 * el resto en minúsculas.
 */
 
function corregir_mayusculas($cadena)
{
 
}
 
echo '<h1>Ejercicio 4</h1>';
echo corregir_primera_letra('gorka'); // --> debe mostrar: Gorka
echo "<br/>";
echo corregir_primera_letra('GORKA'); // --> debe mostrar: Gorka
echo "<br/>";
echo corregir_primera_letra('Gorka'); // --> debe mostrar: Gorka
echo "<br/>";
 
/*
 * Ejercicio 5:
 * 
 * Escribir una función que cuente el número de 'a' minúsculas que hay en una frase.
 * (usar for en lugar de foreach)
 */
 
function contar_letra_a($cadena)
{
 
}
 
echo '<h1>Ejercicio 5</h1>';
echo contar_letra_a('gorka'); // --> debe mostrar: 1
echo "<br/>";
echo contar_letra_a('La bala mata la vaca'); // --> debe mostrar: 8
echo "<br/>";
echo contar_letra_a('El oso osó asir a la osa'); // --> debe mostrar: 4
echo "<br/>";
 
/*
 * Ejercicio 6: (este es para nota)
 * 
 * Escribir una función que cuente el número de mayúsculas de una cadena.
 * 
 */
 
function contar_mayusculas($cadena)
{
 
}
 
echo '<h1>Ejercicio 6</h1>';
echo contar_mayusculas('gorka'); // --> debe mostrar: 0
echo "<br/>";
echo contar_mayusculas('La bala mata la vaca'); // --> debe mostrar: 1
echo "<br/>";
 
/*
 * Ejercicio 7: (este es para nota)
 * 
 * Si usamos una cadena como la que viene a continuación ¿contará bien? ¿por qué?
 * ¿cómo corregirías la función? (pista: problemas con la letra 'Ñ')
 * 
 */
echo '<h1>Ejercicio 7</h1>';
echo contar_mayusculas('El Ñoño Niñato Ñoñeaba sin parar');
echo "<br/>";
 
function contar_mayusculas_corregida($cadena)
{
 
}
 
echo contar_mayusculas_corregida('El Ñoño Niñato Ñoñeaba sin parar');
echo "<br/>";
?>

Aptana Studio en Ubuntu

Después de un tiempo usando Eclipse para los proyectos de Python he decidido buscarme otra opción para mis proyectos basados en PHP (que no son pocos). Desde hace unos años vengo usando el Quanta Plus, que cumplía a la perfección con lo que necesitaba. Sin embargo echo de menos algunas cosillas que puedo usar cuando desarrollo con Python en Eclipse.

Así que me he decidio a instalar algunos de los plugins para PHP que tiene Eclipse (entre otros el PDT). Creo que todos ellos me han dado problemas y, cuando estaba a punto de desistir, he recordado a Aptana Studio, que puede funcionar él solito o como un plugin de Eclipse. Me lo he descargado y, para variar, ha habido problemas. Después de investigar un poco he encontrado la solución aquí:

http://forums.aptana.com/viewtopic.php?t=7147

Parece que el problema tiene que ver con Xulrunner, la versión que instala Ubuntu por defecto, la 1.9.0.3 no es compatible con Aptana (en el post explican cómo solucionarlo).

Dado que lo que me interesaba era desarrollar con PHP me he instalado también el plugin para PHP (es muy sencillo, basta ir a la pestaña “My Aptana” y pinchar en Plugins, y finalmente en el “Get it” que está justo bajo “Aptana PHP”.

Entre otras cosas (como el tener un panel con el listado de todas las funciones y objetos que tienes en el fichero que estás editando) hay una que me gusta especialmenete; se trata de la sincronización. Esta sincronización te permite definir y subir/bajar ficheros al/del servidor, lo que acelera enromemente el trabajo.

Os recomiendo que lo probéis.

Función PHP que añade un carácter al final si no existe

Hoy os propongo esta pequeña función que a mí me ahorra muchos disgustos. Se trata de una función que toma una cadena, comprueba si tiene el carácter ‘/’ al final y lo añade si no lo tiene.

Por ejemplo:

poner_barra_final("/home/gorka"); ---> "/home/gorka/"
poner_barra_final("/home/gorka/"); ---> "/home/gorka/"

De esta forma me aseguro que todas las carpetas tienen una barra al final y no tengo que preocuparme de si ya tienen la dichosa barra o no. Así me evito cosas como:

/home/gorka//

que en algunas situaciones ha sido fuente de errores.

La función:

function poner_barra_final($texto)
{
	if ((strrpos($texto, '/')+1)!=strlen($texto))
		$texto .= '/';
	return $texto;
}

Explicación:

La función strrpos (con dos ‘r’) devuelve la posición de la última aparición de ‘/’.

strlen cuenta el número de caracteres de la cadena.

Si no coinciden ambos valores (sumando uno al primer valor) quiere decir que el último carácter no es una ‘/’ así que la añado.