Foros del Web » Programando para Internet » PHP »

Borrar/modificar determinada linea de un archivo

Estas en el tema de Borrar/modificar determinada linea de un archivo en el foro de PHP en Foros del Web. Hola a todos. A ver si consigo explicarme con claridad. El objetivo es realizar algo similar a un sistema de usuarios pero sin usar ninguna ...
  #1 (permalink)  
Antiguo 10/05/2007, 15:50
 
Fecha de Ingreso: mayo-2007
Mensajes: 6
Antigüedad: 17 años
Puntos: 0
Borrar/modificar determinada linea de un archivo

Hola a todos.
A ver si consigo explicarme con claridad.
El objetivo es realizar algo similar a un sistema de usuarios pero sin usar ninguna base de datos.
Tengo los usuarios, con sus respectivas contraseñas y nivel de acceso en un fichero llamado "usuarios.dat" los cuales se meten por un formulario ( nivel por defecto 1). Asi dentro del archivo nos encontramos con:

gelin#%#4be3a1b4b06f2fe9e47c8f24b7164def#%#gelin#% #Nivel:1

Ahora llega el asunto que me trae desde hace varios dias por la calle de la amargura :)
El objetivo es suponiendo que he entrado como administrador, poder modificar el nivel de acceso de un nick que escriba y se encuentre en el archivo asi como tambien poder borrarlo.
Les muestro el codigo:

- Aqui el administrador ingresaria el nick

formbaja.php

<html>
<head>
<link rel="stylesheet" type="text/css" href="./style2.css"/>
</head>

<body>
<table border="0" cellspacing="3" cellpadding="3" width="60%"></table>
<div id="contenido">
<form method="post" action="modificar.php">
<table border="0" cellpadding="1" cellspacing="3">
<tr>

<h2 align="left">Baja Usuarios</h2>
</tr>
<tr>
<td class="Texto" align="right">Nick: </td>
<td class="Texto"><input type="text" name="nick" value="" size="10" class="Boton" maxlength="10"></td>
</tr>
<tr>
<td align="right" class="Texto"><input type="submit" name="enviar" value="Aceptar"
class="Boton"></td>
<td align="left" class="Texto"><input type="reset" name="borrar" value="Borrar"
class="Boton"></td>
</tr>
</table>
</form>


<?
$archivo = file("usuarios.dat"); //creamos el array con las lineas del archivo
echo "<div align=\"left\">";

$lineas = count($archivo); //contamos los elementos del array, es decir el total de lineas
echo "<b>Lista de usuarios registrados: </b><br>";
for($i=0; $i < $lineas; $i++){
$linea= explode("#%#", $archivo[$i]);
$m = $i + 1;
echo "$m. $linea[0]</br>";
}
echo "</div";

?>

</div>
</body>
</html>

- Aqui seria donde procesa:

baja.php

<?


include("config.php");
include("funciones.php");

// si entramos por el formulario de logeo
if (isset($_POST['nick']) && isset($_POST['clave'])) {

$nick = stripslashes($_POST['nick']);
// encriptamos la clave
$clave = md5($_POST['clave']);

// recogemos en un array las lineas del archivo de usuarios
$info = file($fusuarios);

// validamos el nick
if (validar($info, $nick, 0) < 0) {
header("Location: falloregistro.php?num=0");
exit;
}

// si el nick ha sido validado correctamente pasamos a la clave y recogemos
// el identificador del usuario en id (sera la posicion que ocupe en el fichero
if (($id = validar($info, $clave, 1)) < 0) {
header("Location: falloregistro.php?num=1");
exit;
}

//PARA BORRAR USUARIOS

$lineas = count($archivo); //total de lineas

for($i=0; $i < $lineas; $i++) //Recorremos todo el fichero
{

$busqueda= stristr($archivo[$i], $nick); //si encontramos el nick
if
{
$busqueda == $nick

$m = $i + 1;

else

}
echo "</div";
//////////////////////////////////////////////
header("Location: miembros.php");
exit;

} else {
// si entramos directamente a la pagina le redireccionamos al index
header("Location: index.php");
exit;
}

?>


Eso es todo lo que he podido hacer, creo (espero) que solo me falta un par de lineas.

Alguna idea,sugerencia?

Muchas gracias de antemano a todos y perdon por el ladrillo ;)
  #2 (permalink)  
Antiguo 10/05/2007, 15:54
 
Fecha de Ingreso: mayo-2007
Mensajes: 6
Antigüedad: 17 años
Puntos: 0
Re: Borrar/modificar determinada linea de un archivo

Revisando lo que he escrito, he pegado el formulario que no debia ya que este lo envia a modificar en vez de baja pero no os preocupeis por eso ;).


Un saludo, gracias
  #3 (permalink)  
Antiguo 10/05/2007, 20:30
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 4 meses
Puntos: 17
Re: Borrar/modificar determinada linea de un archivo

Bueno , creo que puedes organizar los datos de tu archivo de mejor forma asi
Código:
id|nombre|passwd|directorio|nivel
Entonces solo parseas el codigo segun el | (esta mas que decir que no debe haber un nombre ni pawwd ni directorio con el caracter |, lo puedes reemplazar por un letra eso).

Ahora para modificar una determinada linea de un Archivo, lo que tienes que hacer es leer el archivo linea por linea (e ir salvando la linea en un array o en otro archivo) hasta encontrar la linea que queremos modificar, creamos el nuevo string con los datos a modificar, y escribir esa linea en el array o en el nuevo fichero (si la quieres eliminar te la saltas) .. asi sucesivamente .. hasta terminar luego borras el archivo y renombras al nuevo por el antiguo.

Lo otro seria utilizar un fichero XML , y trabajar con la libreria DOM para XML (tanto para leer, como escribir, updatear)

Saludos
  #4 (permalink)  
Antiguo 11/05/2007, 09:46
 
Fecha de Ingreso: mayo-2007
Mensajes: 6
Antigüedad: 17 años
Puntos: 0
Re: Borrar/modificar determinada linea de un archivo

Gracias por responder.

He intentado hacer el codigo para borrar una determinada linea.


$archivo = file("usuarios.dat"); //creamos el array con las lineas del archivo
$lineas = count($archivo); //contamos los elementos del array, es decir el total de lineas
for($i=0; $lineas; $i++) // para recorrer todas las lineas
{
if ( ereg($nick, $archivo))
{
$name = "usuarios.dat";
$line = i;
$file = file($name);

$file[$line] = "";

$file = implode("", $file);

$o = fopen ($name, "w+");
fwrite ($o, $file);
$fclose($o);
}
}

El objetivo seria eliminar la linea donde este el nick que me han dado por un formulario. No se si la funcion ereg se usara como yo lo he hecho.

Gracias, un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:40.