Alters

Empezando de 0


Aquí empieza mi blog personal,

no espero muchas visitas, pero espero que los que paséis por aquí recibáis la ayuda que buscáis.

En este espacio intentaré tratar todos los temas que pueda del ámbito de la informática. Como habréis supuesto, soy informático, y como todos, muchas veces me tropiezo con problemas "imposibles". Es con estos problemas con los que mejor me  lo paso, ya que soy cabezón a más no poder, y casi siempre me sale alguna solución, aunque muchas veces es poco elegante...

Así, intentaré hacer aportes varios sobre programación varia. La verdad es que la programación para mí, más que un trabajo es un hobby, por lo que me siento afortunado trabajando en éste ámbito.

He programado (no siempre a nivel profesional) en varios lenguajes de programación, y de diferentes generaciones: desde asm (ensamblador), c, cobol, pascal, php, vb.net, java, abap...

Ahora mismo estoy metido con temas de php, javascript, ajax, java, c, cobol y un motor de mysql.

En estas primeras entradas me gustaría mostraros una "pseudo-capa" que he creado, y las futuras ampliaciones que tengo pensadas.

Esta "pseudo-capa" (le llamaré bridge, puente, conector intermedio, IDA - Internal Data Adapter...) permite una comunicación entre la aplicación (php, java...) y el servidor (mySql en este caso, pero no le veo demasiada dificultad para adaptarla a otros motores).

Empezaré dejando los pasos que seguiré (cada uno en una entrada, para hacerlo más fluido):

 - Primeros pasos
   · Conectando una aplicación a mySql
     * php -> mySql
     * java -> mySql
   · Lanzar peticiones a mySql
   · Recuperar los datos

 - Generalizar: funciones y objetos
   · Crear las funciones
   · Crear los objetos

 - Abstracción de conceptos
    · Clases auxiliares
    · Tablas auxiliares

  - Conectar todo

Para no dejar mi primera entrada sin nada más que palabras, dejaré una "pequeña" función que alguna vez he usado en el tema web. Es útil si eres escéptico y no te fías de las funciones predefinidas (como yo...)


function scapeAll($key){
        $keys_get = array_keys($key);
        $array = array();
 $cont = 0;

 foreach ($keys_get as $key_get){
  $array[$cont++] = $this->scape($key[$key_get]);
 }

 return $array;
}

public function scape($txt){
 $words = $wb->getString(3, 0); //obtiene un array con todos los tokens de mysql
 $tokens = $wb->getString(3, 1); /*obtiene un array con caracteres "delicados": ( /*,  */,  --,  \0 , \',  \b,  \n,  \r,  \t,  \Z,  \,  %,  _,  ~,  ;,  !,  #,  ",  <,  > )*/

 $html = $wb->getString(3, 2); /*obtiene un array con la representación de los caracteres de arriba ( &#47&#42, &#42&#47, &#45&#45, &#92&#48, &#39, &#92&#98, &#92&#110, &#92&#114, &#92&#116, &#92&#90, &#92, &#37, &#95, &#126, &#59, &#33, &#35, &#34, &#60, &#62 )*/

 if(is_array($txt)){
  return $this->scapeAll($txt);
 }

 $txtArr = explode(" ", $txt);

 for($i=0;$i<count($txtArr);$i++){
  for($j=0;$j<count($words);$j++){
   if($words[$j] == strtoupper($txtArr[$i])){
    $txtArr[$i] = $this->sqlScape($txtArr[$i]);
    continue;
   }
  }

  for($j=0;$j<count($tokens);$j++){
   $n = 1;
   $car = $html[$j];

   if($j<9){
    $n = 2;
   }

   while(!(strrpos($txtArr[$i], $tokens[$j]) === false)){
    if($tokens[$j] == '#'){
     if(substr($txtArr[$i],((strrpos($txtArr[$i], $tokens[$j]))-1), 1) != '&'){
      $txtArr[$i] = substr($txtArr[$i], 0, strrpos($txtArr[$i], tokens[$j])).$car.substr($txtArr[$i], ((strrpos($txtArr[$i], $tokens[$j]))+$n));
     }else{
      break;
     }
    }else{
     $txtArr[$i] = substr($txtArr[$i], 0, strrpos($txtArr[$i], $tokens[$j])).$car.substr($txtArr[$i], ((strrpos($txtArr[$i], $tokens[$j]))+$n));
    }
   }
  }
 }

 return implode(" ", $txtArr);
}

function sqlScape($txt){
 $vals = array("A", "E", "I", "O", "U", "a", "e", "i", "o", "u");
 $reva = array('&#65', '&#69', '&#73', '&#79', '&#85', '&#97', '&#101', '&#105', '&#111', '&#117');

 for($i=0;$i<count($vals);$i++){
  while(!(strrpos($txt, $vals[$i]) === false)){
   $txt = substr($txt, 0, strrpos($txt, $vals[$i])).$reva[$i].substr($txt, ((strrpos($txt, $vals[$i]))+1));
  }
 }

 return $txt;
}

El tema de la variable "$wb" ya lo explicaré más adelante, pero simplemente sirve para enviar arrays con ciertos valores.

Se puede llamar, desde php (por ejemplo) a "scape" o "scapeAll" para escapar las cadenas y evitar, entre otras cosas, inyección de código.

Entonces, se podría hacer algo así:

$email = scape($_GET['email']);
$pass = scape($_GET['pass']);

o, también:

$getScape = scapeAll($_GET); //$getScape[0] = $email, $getScape[1] = $pass.

Quizás no es un código 100% óptimo, pero en mi defensa diré que tiene casi un año... y lo tengo pendiente de revisar y mejorar :-p

Intentaré publicar entradas cuando me sea posible.

Hasta otra!