La funcion file() de PHP, extrae los datos de un archivo (cualquiera) y lo trata como un arreglo, basado en el identificadores de linea \r y/o \n
En algunas ocasiones esto no se da asi, y se debe a la falta de configuracion en el php.ini, en concreto: auto_detect_line_endings = On
Una ves entendido esto, simplemente se debe cargar el archivo siempre que lo utilizemos. Siendo no necesario el uso de ciclos para cargar el archivo dentro de un arreglo.
¿Como crear una tabla?
Esto no parece gran ciencia, solo es crear un archivo "ejemplo.dat" y pensar en el como si fuera una tabla.
Una linea es una fila, y tenemos que determinar un separador para las columnas... pueden ser varios caracteres, una secuencia o solo uno, etc.
En los ejemplos usaremos el caracter de tabulacion \t por lo tanto, ningun dato deberia contener tal caracter... y por eso deberemos escaparlo o eliminarlo.
¿Como inserto un dato?
Sabiendo que es un dato nuevo, se agregara al final del archivo en una fila nueva.
- $datos es la linea o fila, formateada y escapada previamente.
Código PHP:
// digamos que usamos 4 columnas
// -----------------------------------
// ID | Nick | Email | Pass
$datos = "13\tpateketrueke\[email protected]\txihmetecuhtli";
// hay que notar el uso de comillas dobles para confirmar el uso de tabulaciones \t
Código PHP:
$tmp = fopen($archivo, 'a'); // modo 'append'
// escribimos agregando el caracter de linea nueva al final...
// deberia bastar, si la configuracion de auto-detectar-fin-de-linea esta ON
fwrite($tmp, "$datos\n");
fclose($tmp); // cerramos
Bueno, hacer una seleccion es muy simple... por linea o por dato (aun podria ser mas complejo)
Hagamoslo por dato, nosotros usaremos algo sencillo: comparacion por ID
Considerando el formato de nuestra "tabla" y la posicion de la columna de ID, y obviamente que ID es un numero entero seria asi...
- $id es el dato a comparar, ya sea obtenido por GET/POST etc.
- $datos es el arreglo que almacenara la seleccion
Código PHP:
$tabla = file($archivo); // cargamos tabla
// iteramos la tabla en busqueda de...
foreach ($tabla as $linea => $datos)
{
$datos = explode("\t", $datos); // separamos
// ID en este caso es el indice cero
if ($datos[0] === $id)
{
// OK, salimos y $datos seran conservados despues del ciclo...
break;
}
}
// aqui, nuestro codigo con $datos
Bueno, ya seleccionamos nuestros datos y modificamos algunos de ello, vamos a actualizarlos.
- $nuevos_datos es $datos pero... modificado
Cita:
.... esto es igual a seleccionar un dato... ya que al hacerlo, estaremos en la linea adecuada para el "actualizaje"Eje-je muchachito, eje-je
Entonces, ¿repito lo que hice al seleccionar el dato y luego?
- Ahora, no uses break y justamente reemplaza $tabla[$linea] con $nuevos_datos
Tiene que ser asi, ya que estas sobre-escribiendo el indice real de la tabla real... y no la variable volatil dentro del ciclo.
- Guarda igual que cuando insertaste un dato, pero ahora en el modo "w+" ya que re-escribiras todo el contenido del archivo y no solo la linea modificada.
¿Como elimino un dato?
Igual que con el proceso de actualizado, primero seleccionas o mas bien... te ubicas en la linea adecuada y simplemente usas la funcion unset() con $tabla[$linea]
- Ahora, vuelve a usar break... al final deberas re-escribir el archivo completo, recuerda abrir el archivo en modo "w+"
- Cuando escribas en el archivo, ya sabes que debes usar join('', $tabla) para unir los datos, siendo conservados los caracteres de salto de linea.
- En el momento de re-escribir todo el archivo, en varios casos... no deberas usar el caracter de salto de linea final, solo cuando se agreguen mas datos al archivo.
RECOMENDACIONES:
- Creo que para este nivel, ya se deben usar bien ciclos y arreglos... funciones
- A mi punto de vista todo esto debe ser agrupado en funciones, para que sea mas facil el trabajo...
- La verdad tampoco es un metodo muy fiable, sobre todo si usas muchos datos... ya sean columnas o filas, mas de 400 creo seria un rollo (pero no estoy seguro)
Gracias.