lunes, 16 de febrero de 2009

Función para crear un XML Request Object válido

function devuelveXMLRequestObject {
xmlhttp=false;
this.requestFile = file;
this.encodeURIString = true;
this.execute = false;
this.AjaxFailedAlert = "Funcionalidades no soportadas.";

if (window.XMLHttpRequest) {

this.xmlhttp = new XMLHttpRequest();
if (this.xmlhttp.overrideMimeType) {
this.xmlhttp.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject) {

//Internet Explorer

try {
this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch (e) {
try {
this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
this.xmlhttp = null;
}
}
if (!this.xmlhttp && typeof XMLHttpRequest!='undefined') {
this.xmlhttp = new XMLHttpRequest();
if (!this.xmlhttp){
this.failed = true;
}
}
}
return this.xmlhttp ;
}

Ejemplo de envío de datos mediante POST en AJAX

A pesar de la carga al servidor que implica, a menudo conviene enviar los parámetros para una operación mediante POST en vez de GET, ya que el GET escribe los parámetros en la url.

Para realizar una Request usando post, también debemos componer la lista de de parámetros como quedaría en la URL:

campo1=valor
$campo2=valor

Por ejemplo:

'campo1='+document.getElementById('campo1').value
+ '&campo2='+document.getElementById('campo2').value

Posteriormente, debemos enviar esos valores mediante la función send del objeto request.

ajax.open ('POST', url, true);
ajax.onreadystatechange=funcion;
ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
ajax.send(valores);

El setRequestHeader es útil en caso de que el Content-Type se quiera cambiar a XML en vez de dejarlo por defecto en el fichero php al que se llame, por razones de prueba.

Sumario de AJAX

Qué constituye el corazón de AJAX y la diferencia con la programación tradicional de páginas web:

1) El usuario visita la página
2) El usuario escribe algo en una caja de texto, pulsa un botón o arrastra algo con el cursor
3) Lo que el usuario haga en el punto 2 provoca que JavaScript envíe una petición al servidor
4) El servidor procesa la petición (usando PHP, por ejemplo), devolviendo algún dato
5) JavaScript recibe la información y la usa para actualizar la página, sin cargarla otra vez

sábado, 14 de febrero de 2009

Palabras reservadas que pueden crear conflicto con PEAR

De momento he encontrado las siguientes:

GROUP
INT

La solución más sencilla es añadir a los campos con ese nombre un guión bajo al final.

Error de sintaxis en MySQL usando PEAR

Con el siguiente código:

function executeCommand( $sql, $args )
{
global $db;

$sth = $db->prepare( $sql );

if (PEAR::isError($sth)) {
die($sth->getMessage());
}

echo "

$sth de la sql $sql

";

$res=& $db->execute( $sth, $args );

if (PEAR::isError($res)) {
die($res->getMessage());
}
print_r($res);
return $res;

}

Si devuelve un error como éste: 'DB Error: syntax error', puede darse el caso de que alguno de los campos de la tabla se llamen igual que una palabra reservada. En mi caso había un campo llamado group, que obviamente entraba en conflicto con la palabra reservada GROUP. Es bueno tenerlo en cuenta cuando parece que las cosas no van sin motivo alguno.

Referencia al último ID creado por una consulta INSERT en MySQL

last_insert_id[ ]

Con paréntesis, que en caso contrario molesta a los scripts del blog.

viernes, 13 de febrero de 2009

Tabulación simple con CSS

|span style='margin-left:20px;'>

Sustituir la barra vertical del comienzo por < .

lunes, 9 de febrero de 2009

Convertir archivo de texto plano a string y guardarlo en memoria

// set file to read

$filename = "mindspace.txt";


// read file into string

$data = file_get_contents($filename) or die("Could not read file!");

Funciones para seleccionar datos usando PHP y MySQL

Estas funciones facilitan la extracción de datos de una base de datos MySQL usando PHP.

function conectar(){

//Conecta y devuelve la variable conexión.


$conn = mysql_connect("localhost", tu_usuario, tu_password);
mysql_select_db(tu_db);

return $conn;

}

function escribeSelectSQL($campos,$tablas,$condicion){


$consulta="SELECT ";

//añado tantos campos como me haya enviado.

$limiteCampos=count($campos);
$limiteTablas=count($tablas);

for($contador=1;$contador<=$limiteCampos;$contador+=1){

$consulta=$consulta . $campos[$contador-1];

if ($contador<$limiteCampos){

//todavía quedan campos, así que habrá que añadir una coma.

$consulta=$consulta . ", ";


}else{


//añado un espacio, por si acaso.

$consulta=$consulta . " ";

}


} //fin del for para los campos.

$consulta=$consulta . " FROM ";


for($contador=1;$contador<=$limiteTablas;$contador+=1){

$consulta=$consulta . $tablas[$contador-1];

if ($contador<$limiteTablas){

//todavía quedan campos, así que habrá que añadir una coma.

$consulta=$consulta . ", ";


}else{


//añado un espacio, por si acaso.

$consulta=$consulta . " ";

}


} //fin del for para las tablas.

//Queda añadir la cláusula WHERE y la condición.

$consulta=$consulta . " WHERE " . $condicion;

//echo ("

DEBUG: la consulta formada es $consulta.

");

$sql = mysql_query($consulta);

return $sql;

}


function devuelveRegistros($sql){

//pasada una SQL válida de selección, devolvemos los registros.


return mysql_fetch_array($sql);



}

function cierraConexion($conn){


mysql_close($conn);


}

Clase y números aleatorios en PHP

Digamos que queremos crear una clase en php para un juego de rol y pretendemos que sus abilidades se generen automáticamente, pudiendo valer de 8 a 18.

class cBeing{

var $IdBeing;
var $Nombre;
var $Apellidos;
var $Str;
var $Con;
var $Int;
var $Wis;
var $Cha;

function cBeing(){

//Constructor por defecto de Being.

$this->Str=12;
$this->Con=12;
$this->Int=12;
$this->Wis=12;
$this->Cha=12;



}

function rollAbilities(){

//Función que genera valores aleatorios para las cuatro abilidades principales.

$this->Str=devuelveAleatorio18();
$this->Con=devuelveAleatorio18();
$this->Int=devuelveAleatorio18();
$this->Wis=devuelveAleatorio18();
$this->Cha=devuelveAleatorio18();


}

function devuelveAleatorio18(){



$random = mt_rand(8,18);

return $random;
}

}