Problema con PHP que modifica .txt
Hola amigos,
Ando dándole vueltas a este código PHP, el cual quiero utilizar para modificar un archivo .TXT cómodamente sin tener que utilizar el FTP. El logeo funciona perfectamente, pero el cambio de los datos del TXT no surte efecto ¿Alguna sugerencia? GRACIAS!!
<?php // Define el usuario y la contraseña de acceso
$username = "admin";//Aqui el nombre de usuario
$password = "mipassword";// Aqui la contraseña
if ($_POST['txtUsername'] != $username || $_POST['txtPassword'] != $password) {
?><h2>Logueate</h2>
<p>Username:
<br></p>
<p>Password:
<br></p>
<p></p>
<?php }else {
?><p><?php $fichero = "texto.txt";
$texto = $_POST["texto"];
if($texto != ''){
if($fp = fopen($fichero,"w+")){
fwrite($fp,stripslashes($texto));
echo 'Archivo modificado<br><br>';
}
fclose($fp);
}
$fp = fopen($fichero,"r");
$contenido = fread ($fp, filesize ($fichero));
fclose($fp);
echo "</p><form method="POST">
<textarea name="texto">$contenido</textarea><br><input type="Submit" value="Guardar">
</form>";
?>
<?php }
?>
dagi3d
mira bien lo que se supone que hace ese código:
si los valores 'txtUsername' y 'txtPassword' enviados desde el formulario no coinciden con tu usuario y contraseña, se muestra el formulario de acceso, en caso contrario ya muestras el formulario para modificar el archivo.
entonces, la primera vez que entras te pide el usuario y contraseña. los metes y ya te muestra el segundo formulario pero la próxima vez que hagas una petición al mismo script, se va a volver a quedar en la primera condición ya que está intentando recuperar los valores 'txtUsername' y ''txtPassword' y en tu formulario para modificar el archivo no existen tales campos.
La solución sería utilizar sesiones para guardar el estado de si está autenticado o no
elbirretnafn
Hola dagi3d,
Gracias por atenderme.
En el 2º bloque, entiendo que se modifica el contenido del TXT, de hecho, lo he testado y accedo a el 2º formulario donde me lee el contenido del TXT y me permite modificarlo, pero el problema es que la modificiación no se ve reflejada en el archivo TXT. No sé si me he explicado.
Puedes verlo en acción en este link
Gracias por la ayuda que puedas prestarme !
dagi3d
vuelvo a insistir, cuando haces la petición al script mandando los datos de usuario y password, te leera el fichero y te mostrará su contenido y el formulario para que le cambies el valor. pero la próxima petición la harás al mismo script y esta vez sin indicar el usuario y contraseña por lo que se quedará en la primera opción y no modificará el archivo
elbirretnafn
A medias te entiendo... No estoy muy ducho en PHP, por lo que me cuesta bastante desarrollar el código; seré claro ¿Qué le falta a mi script para que funcione? Gracias por la ayuda.
elbirretnafn
help help help...
elbirretnafn
Una ayudita externa me ha dado la solución.
Lo posteo para los que le pueda interesar...
Quitamos eso de usuario y contraseña de mi anterior archivo, y en la cabecera le añado la llamada al archivo login.php cuyo contenido se puede ver más abajo...
<?php require("login.php"); ?><p><?php $fichero = "texto.txt";
$texto = $_POST["texto"];
if($texto != ''){
if($fp = fopen($fichero,"w+")){
fwrite($fp,stripslashes($texto));
echo 'Archivo modificado<br><br>';
}
fclose($fp);
}
$fp = fopen($fichero,"r");
$contenido = fread ($fp, filesize ($fichero));
fclose($fp);
echo "</p><form method="POST">
<textarea name="texto">$contenido</textarea><br><input type="Submit" value="Guardar">
</form>";
?>
<?php ?>
Contenido del archivo "login.php"...
<?php function loginHTTP(){
header('WWW-Authenticate: Basic realm="Introduce los datos :D"');
header('HTTP/1.0 401 Unauthorized');
die('<center>Para tener acceso debe iniciar sesion.<hr size="1">.']Iniciar Sesion');
}
$adminname = 'r00t'; // Usuario
$adminpass = '31337'; // Contraseña
$username = $_SERVER['PHP_AUTH_USER'];
$userpass = $_SERVER['PHP_AUTH_PW'];
if ( $username != $adminname || $userpass != $adminpass ) {
loginHTTP();
die();
}
?>
Tan sólo una cosa; el mensaje que trato de imprimir en mi banner Flash, genera un doble espacio (interlineado) entre las dos líneas de texto de que se compone. Por mucho que lo manipulo desde ese formulario, no logro impedir ese salto de carro.
¿Alguna pista de por qué puede ser? No es del marco de texto dinámico del archivo FLA, porque lo tengo sin espacio interlineal también.
Gracias !!
phatum
no se si este tema vaya aqui, si necesita ser movido, no hay problema, pero si me urge que alguien me heche la mano
les platico.
hay un sitio hecho en flash, dicho sitio, "llama" a unos txt que contienen un listado de productos. hasta ahi todo va d emaravilla
ahora bien, se me ocurrio, que para evitar la necesidad de enseñar al dueño del sitio a subir y bajar archivos por ftp, seria bueno crear unos php que leyeran los txt de su directorio original, y permitieran modificarlo, aqui les pego los codigos.
php modifica.php
- este codigo lo que hace es leer el directorio de "los txt", coge los nombres de los archvios y rellena un <select> con dichos nombres, para depues enviar ese dato al siguiente archivo. esto funciona bien.
<?php
$dir = "textos";
if($directorio=opendir($dir)){
echo '<form action="prueba.php" method="post" name="modificar productos" id="mod">';
echo '<select name="file">';
echo '<b>Selecciona la lista de productos a modificar:</b><br>';
while ($archivo = readdir($directorio)) {
if ($archivo == '.' or $archivo == '..') {
echo "";
}else{
$txt=$archivo;
echo "<option>$txt</option>";
}
}
echo '</select>';
echo '<input type="submit" name="enviar" value="Enviar"></form>';
//echo "<span class='texto_menu_Titulo'>Aplicaciones y Utilerias</span>";
echo "<br><br>";
closedir($directorio);
}else {
echo 'ERROR: No se ha localizado el directorio $dir';
}
?>
archivo prueba.php
- este archivo lo que hace es que recibe el nombre del archivo a modificar, lo abre, rellena un textarea con el contenido, y en teoria deberia guardarlo, pero pues todo va bien, hasta el momento de guardar, no lo hace asi
<?php
$recepcion = $file;
/* con estas lineas compruebo que lo que se recibe, sea la ruta correcta hacia el archivo, puesto que pinta lo que se utilizaria como tal, como ruta*/
echo $recepcion;
echo '<br><br><br>';
/* esta linea se que podria oviarse, pero la puse mas que nada para comprobar que la informacion, de la ruta del archivo, este pasando correctamente, ya que paso la variable a otra y la vuelvo a "pintar" y sigue saliendo lo mismo*/
$fichero = $file;
echo $fichero;
echo '<br><br><br>';
/*
aqui viene lo bueno, el procedimiento si me lee el archivo, me rellena el txt, desde el textarea, puedo modificarlo, pero al momento de guardarlo, no logro recibir el mensaje "Archivo modificado", en cambio, siempre recibo, el de "no se pudo escribir el archivo" */
$texto = $_POST["texto"];
if($texto != ''){
if($fp = fopen($file,"w+")){
fwrite($fp,stripslashes($texto));
echo 'Archivo modificado<br><br>';
}else{
echo ' No se pudo escribir el archivo';}
fclose($fp);
}
$fp = fopen($file,"r");
$contenido = fread ($fp, filesize ($file));
fclose($fp);
echo "<form method='POST'><textarea name='texto'>$contenido</textarea><br><input type='Submit' value='Guardar'></form>";
?>
alguna sugerencia??
sorenly
@phatum ¿Has mirado en los logs del servidor para ver si hay algún error al escribir el archivo? Lo digo por si acaso el servidor web no tiene permisos para crear/modificar el archivo o el directorio en concreto...
phatum
efectivamente mi estimado, ya habia agotado todas esas instancias, pero resulta que todo el problema era el metodo por el que estaba enviando los datos, estaba usando post, en lugar de get, y al hacer click en el boton enviar, estas variables se vaciaban!!!, he aqui el codigo de ambos archivos
archivo_uno.php
<?php
$dir = "../textos";
if($directorio=opendir($dir)){
echo '<form action="mod_prod.php" method="get" name="modificar productos" id="mod">';
echo '<select name="file">';
echo '<b>Selecciona la lista de productos a modificar:</b><br>';
while ($archivo = readdir($directorio)) {
if ($archivo == '.' or $archivo == '..') {
echo "";
}else{
$txt=$archivo;
echo "<option>$txt</option>";
}
}
echo '</select>';
echo '<input type="submit" name="enviar" value="Enviar"></form>';
echo "<br><br>";
closedir($directorio);
}else {
echo 'ERROR: No se ha localizado el directorio $dir';
}
?>
archivos_dos.php
<?php
$recepcion = '../textos/';
$archivo = $_GET["file"];
$fichero = $recepcion.$archivo;
$fp = fopen($fichero,"r");
$contenido = fread ($fp, filesize ($fichero));
fclose($fp);
echo '<form method="POST">';
echo "<textarea name=\"texto\" cols=\"50\" rows=\"5\">$contenido</textarea>";
echo '<input type="Submit" value="Guardar"></form>';
$texto = $_POST["texto"];
echo $texto;
if(empty($texto)){
echo '';
}else{
if($fp = fopen($fichero,"w+")){
fwrite($fp,stripslashes($texto));
echo 'Listado de Productos modificada Exitosamente<br><br>';
fclose($fp);
}else{
echo 'No se pudo escribir en el archivo'; }
}
?>
en ambos casos lo protegi agregando la llamada al archivo psw.php, incluyendo un require...