| |||
sistema de noticias Se, que este mensaje ya ha salido anteriormente en este foro, pero me gustaria que algun maestro del PHP me explicara como puedo hacer, con PHP un sistema de noticias utilizando un archivo TXT en vez de una BD. Si alguien es tan amable de explicarmelo paso a paso, puesto que soy un novato muy novato, se lo agradecería muchisisisimo |
| |||
Re: sistema de noticias Veras Yagorat, he comenzado ha hacerlo siguiendo la estructura que me has dicho, pero, no se como hacer la pagina que recoja los datos. Espero no ser muy pesado, pero es que he buscado en algun tutorial pero me he quedao igual, sin resolver esa duda. |
| ||||
Re: sistema de noticias Si los tienes divididos los datos en un text por un | que es el mas comun o un #.. debes explotarlos, osea quitarlos para que solo muestre los datos necesarios: $ficheronoticias = file("noticias.txt"); $largo = sizeof($ficheronoticias); $largo = $largo - 1; for($i=$largo ; $i>-1 ; $i--) { $dato = explode("|", $ficheronoticias[$i]); y haces los arrays: Noticia: $dato[0]<br> Mensaje: $dato[1]<br> y si pusiste mas datos en el txt.. $dato[2],, le pones tablas, les das estilo, bla, bla.. Salu2 |
| ||||
Re: sistema de noticias Buenas, si te refieres al punto 2, la pagina en php que recoja la información del formulario, debe ser una página que recoja las variables del form, es decir, si has usado algo de este estilo para poner el titulo de la noticia: <input SIZE="35" type="text" name="titulo" class="imputbox" maxlength="255"> En la página de recogida tendras el titulo en la variable $titulo Si sigues un poco perdido al respecto puedo seguir ayudandote, explicando cada paso más en concreto, pero no me gustaría poner el código directamente porque así no aprenderias. Un saludo a todos. ![]() |
| ||||
Re: sistema de noticias hola.... si quieres te paso el que yo hice, pero lo hice enfocado a mysql..... mándame un mail y te lo envío. El mío consta del formulario. De la pagina php que procesa los datos del form y los mete en la base de datos. Por último la forma y orden en que quieres que se vean las noticias la decides en el printf que tambien te puedo poner de ejemplo....... hace un mes no se me ocurría como hacerlo y mira, ya lo tengo claro... saludetes <a href="http://www.mildnoise.com/"><img src="http://www.mildnoise.com/images/common/mildnoise5.gif" width="408" height="30" border="0" alt="mildnoise.com"></a> |
| |||
Re: sistema de noticias mandame un email a [email protected]... ahi te paso uno que hice con archivos de texto |
| ||||
Re: sistema de noticias Hola kaiowas !!! Si no es mucha molestia te puedo dejar mi Mail? ;) ::::::::::::::::::::::::::::::::::::::::::::: [ [email protected] ] ::::::::::::::::::::::::::::::::::::::::::::: ... y agradesco por anticipado - saludos ![]() |
| |||
Re: sistema de noticias Hola de nuevo, me he vuelto a atascar ![]() <html> <head> <title>Titulo</title> </head> <body> <form method="POST" action="recoger.php"> <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="800" id="AutoNumber1"> <tr> <td width="50%" height="19">Titulo:</td> <td width="50%" height="19"> <input type="text" name="titulo" size="20"> </td> </tr> <tr> <td width="50%" height="18">Contenido:</td> <td width="50%" height="18"><textarea rows="2" name="contenido" cols="30"></textarea></td> </tr> <tr> <td width="50%" height="19">Autor:</td> <td width="50%" height="19"><input type="text" name="autor" size="20"></td> </tr> <tr> <td width="100%" height="19" colspan="2"> <p align="center"><input type="submit" value="Enviar" name="enviar"><input type="reset" value="Restablecer" name="reset"></td> </tr> </table> </form> </body> </html> Pagina que recoja los datos (codigo de fuente): <? include("noticias.txt") $registro = "$titulo|$contenido|$autor\n"; $abrir = fopen("noticias.txt"); $guardar = fwrite($abrir, $formato); $cerrar = fclose($abrir); echo "La noticia ha sido enviada correctamente,\n" echo "Volver al inicio" ?> Y es aquí donde me he vuelto a quedar, puesto que me sale siempre: Parse error: Parse error: parse error in recoger.php on line 3 o Parse error: parse error in recoger.php on line 8 , y no se que es lo que tengo mal (aunque supongo que todo). |
| |||
Re: sistema de noticias Hola, Lo primero es que aunque te este dando dos numeros de linea distintos, el error puede ser en la misma linea, depende del numero de lineas que tenga noticias.txt La razon de ese error puede ser la falta del punto y coma al final de la sentencia include(), si es que has copiado en el mensaje el codigo tal y como lo tienes en el fichero. Otra cosa,¿porque quieres incluir el fichero noticias.txt con include()? Si tu intencion era verlo en la pagina para hacer pruebas bien, pero si lo que querias era leerlo para luego volverlo a escribir despues de añadir la noticia, te aconsejo que te mires en el manual la funcion file() para leerlo. Ademas, te falta el segundo parametro de la funcion fopen() el modo de apertura del fichero (para leer, para escribir, ...), y en el fwrite() escribes la variable $formato, que no has definido y que creo que querias poner $registro. No te preocupes, la forma de aprender es intentar las cosas, equivocarse y preguntar. Todos hemos pasado por eso. Espero haberte servido de ayuda. Si tienes alguna duda, ya sabes donde encontrarme. Saludos, Josemi |
| ||||
Re: sistema de noticias Buenas ^_CloViS_^, Josemi tiene mucha razon. El include("noticias.txt") no es necesario en este caso, y ademas al no terminar con ; produce un error, lo otros errores son del mismo tipo.... hay que estar ![]() Otro cosa que veo, es esta linea: $registro = "$titulo|$contenido|$autor\n"; Si quieres introducer los datos en el fichero, deberían de tener algún tipo especial de separación, para luego poder recogerlos diferentes, prueba con: $registro = $titulo."[s]".$contenido."[s]".$autor."[s]"; y así logras tener un separador [s], despues es más facil usar la función explode cuando tengas que leer las noticias, <a href='ir.asp?http://www.php.net/manual/es/function.explode.php' target='_blank'>http://www.php.net/manual/es/function.ex...</a> Otra cosa es al abrir el fichero, debes de poner un modo, como r,r+,w+,w,a,a+. En este punto he hecho varias pruebas, y todavía no me gusta el resultado ![]() De momento, sería algo como: 1-. Abrir el fichero en modo lectura r+ y coger las noticias ya escritas. $filename = "noticia.txt"; $file = fopen($filename,"r+"); $contenido = fread ($file, filesize ($filename)); $cerrar = fclose($file); 2-. Juntamos nuestro registro con lo leido, para que esta noticia, se quede la primera en el fichero. $cadena = $registro.$contenido; 3-. Escribimos los datos en el fichero, pero con w+ y así borramos lo anterior. $file = fopen($filename,"w+"); $fp = fwrite($file,$cadena); $cerrar = fclose($file); Despues vendría el fichero para leer y presentar las noticias, tal vez la parte "más dificil", pero ya queda poco ;) ------------------------ Solo se que no se nada. Yagorat - Webmaster sin web |
| |||
Re: sistema de noticias Muvhas gracias a los dos, con vuestras indicaciones he conseguido que me guarde los datos en el txt, he hecho lo siguiente: <? $filename = "noticias.txt"; $registro= $titulo."[s]".$contenido."[s]".$autor."[s]"; $abrir = fopen($filename, "r+"); $guardar = fwrite($abrir, $registro); $cerrar = fclose($abrir); echo "La noticia ha sido enviada correctamente\n"; echo "<a href='form.html'>Volver</a>" ?> Ya solo falta la pagina donde se mostraran las noticias! :) ![]() |
| |||
Re: sistema de noticias Vereis, me he dado cuenta que con el codigo que he puesto antes, el registro no se efectua correctamente: lo primero que envías si, pero cuando en vias un segundo registro te borra el primer dato del primero, ejemplo: Primer registro: titular [s]contenido o contenidos[s]yo mismo[s] Segundo registro: titular2[s]contenido o contenidos2[s]yo mismo2[s]contenido o contenidos[s]yo mismo Donde está titular ? pero después, por los foros vi un mensaje de Yagorat en el que decía creo que lo mismo que digo yo ahora, y a partir de aquí es de donde comienza mi pregunta, ¿que hace la función fread($filename,filesize($filename))? |
| |||
Re: sistema de noticias Otra cosa, he procedido a hacer la pagina donde se muestren las noticias, y he hecho lo siguiente: <? $filename = "noticias.txt"; $registro = $registro = $titulo."[s]".$contenido."[s]".$autor."[s]"; $fp = fopen($filename,"r"); $extraer = explode("[s]",$filename[3]); $cerrar = fclose($fp); echo "<html><head>\n"; echo "<title>Noticias</title></head>\n"; echo "<body topmargin='0' leftmargin='0'>\n"; echo "<div align='left'>\n"; echo "<table border='1' cellpadding='2' cellspacing='0' style='border-collapse: collapse' bordercolor='$borde_tabla_layout' width='780' height='300'>\n"; echo "<tr>\n"; echo "<td width='800'><u>Titulo</u>: $extraer</td>\n"; echo "</tr>\n"; echo "<tr>\n"; echo "<td width='800'><u>contenido</u> :$extraer</td>\n"; echo "<tr>\n"; echo "<td width='800'><u>Por</u>: $extraer</td>\n"; echo "<tr>\n"; echo "</table>\n"; echo "</body></html>" ?> Entonces cuando abres la pagina, que he llamado explode.php, te queda así: titulo: Array contenido: Array Por: Array ¿por que me sale Array ?¿que hago mal? |
| |||
Re: sistema de noticias Hola, Respecto al codigo que usabas para guardar la noticia, cuando decias que te borraba el titular, creo que es por la forma en que guardas las noticias. Mira a ver si el fichero de noticias tenia : titular2[s]contenido o contenidos2[s]yo mismo2titular[s]contenido o contenidos[s]yo mismo[s] es decir, que se te concatena el autor de la segunda noticia con el titular de la primera. Para solucionar esto el registro a grabar tendria que comenzar por el separador:
Código:
Sobre la funcion fread(...), en el codigo de Yagorat se lee todo el contenido del fichero. Los parametros de fread() son el fichero y el numero de bytes a leer, asi que para que lea todo el fichero tienes que averiguar el tamaño del fichero. Hay es donde entra la funcion filesize(). Una vez leido luego lo concatena con la nueva noticia y lo escribe en el fichero.$registro="[s]".$titulo."[s]".$contenido."[s]".$autor."[s]"; Con tu problema en la pagina que muestra las noticias, ahora no tengo tiempo para mirarlo(es que estoy en el curro y no es plan ![]() Hasta luego Josemi |
| ||||
Re: sistema de noticias Buenas, vamos por partes para no liarnos: Para grabar los datos en el fichero noticias.txt y que conserve los datos antiguos, deberiamos leer los datos, unirlos a los datos nuevos, poner el puntero del fichero al principio y grabar los datos. Aquí tienes como sería (gracias a romina) <? $filename = "noticias.txt"; $registro= $titulo."[s]".$contenido."[s]".$autor."[s]"; $abrir=fopen($filename,"r+"); //Abrimos en lectura, con "+" podemos escribir $anterior=fread($abrir,filesize($filename)); // filesize(fichero) nos devuelve el tamaño del fichero $todo = $registro.$anterior; // Juntamos la nueva noticia (primera) con el resto de noticias rewind($abrir); //Nos colocamos al principio del fichero $guardar = fwrite($abrir, $todo); //Y remplazamos todo lo que haya por la nueva noticia mas el resto de noticias (no perdemos nada) $cerrar = fclose($abrir); echo "La noticia ha sido enviada correctamente\n"; echo "<a href='form.html'>Volver</a>" ?> Y ahora seguimos con más... |
| ||||
Re: sistema de noticias Seguimos por partes: 1-. Te aparece Array, porque al usar la funcion "explode" haces que los datos los guarde en un Array, en tu caso en $extraer. Al ser un array debes indicar que elemento del array quieres visualizar (ej. $extraer[2]) sino aparece la palabra array. 2-. La página que muestra la notcia, debe primero recoger los datos en un array, y despues mostrarlos en un formato. En tu código te lias un poco con el paso anterior. Más o menos debería ser así: $num_noticias = 5; // El numero de noticias que recogemos (Porque si llegas a 100 noticias no querras mostrarlas todas, sino las mas recientes) $filename = "noticia.txt"; $file = fopen($filename,"r+"); $contenido = fread ($file, filesize ($filename)); $noticias = explode ("[s]", $contenido, $num_noticias*3+1); ?> <html> <head> <title> Noticias </title> </head> <body> <table> <? $i = 0; while ($i <= $num_noticias*3-1) { echo "<tr>"; echo "<td WIDTH='250' BGCOLOR='blue'>"; echo $noticias[$i]; echo "</td>"; echo "<tr>"; echo "<td WIDTH='250'>"; $i++; echo $noticias[$i]; echo "</td>"; echo "<tr>"; echo "<td WIDTH='250' BGCOLOR='blue'>"; $i++; echo " Autor: $noticias[$i]"; echo "</td>"; $i++; } ?> </table> </body> </html> -------- Prensenta los datos de forma ciclica con el while, así mostramos tantas noticias como queramos con la variable $num_noticias De esta manera recogemos los datos con explode, que sería explode(separador,fuente,limite) separador = [s] fuente = $contenido //Donde estan todas las noticias limite = num_noticias*3+1 Esto último es para recoger un numero de noticias, que multiplicamos por tres ya que tenenmos (titular, cuerpo, autor) y le añadimos 1 ya que el ultimo elemento contiene el resto de las noticias que no nos interesan en este momento. Espero que te sirva para continuar (vaya toston que he soltado ![]() ------------------------ Solo se que no se nada. Yagorat - Webmaster sin web |
| |||
Re: sistema de noticias Vaya, Yagorat se me ha adelantado :( . Y ademas te ha dado una muy buena ![]() ^_CloViS_^ ahora solo te queda aprender de este codigo, adaptarlo a tus necesidades, mejorarlo, en definitiva, entenderlo. Suerte en tu aprendizaje. Josemi Aprendiz de mucho, maestro de poco. |