Foros del Web » Programando para Internet » PHP »

gran problema!!

Estas en el tema de gran problema!! en el foro de PHP en Foros del Web. Hola amigos!.Estoy creando una aplicación para hacer un muro como el de face (por ejemplo) y estoy en un bache. Con los comentarios he creado ...
  #1 (permalink)  
Antiguo 24/09/2010, 12:19
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
gran problema!!

Hola amigos!.Estoy creando una aplicación para hacer un muro como el de face (por ejemplo) y estoy en un bache. Con los comentarios he creado un array para ordenarlos en orden ascendiente, pero ni los ordena ni muestra sólo el mensaje. El código:

index.php
Código PHP:
<form name="form1" action="procesa.php" method="post">
<input type="text" name="mensaje" />
<input type="submit" value="envía!" />
</form><br /><br />
<?php
$archivo 
'usuarios/'.$_SESSION['k_username'].'.txt';
$id1 fopen($archivo'r');//leemos el archivo del muro
$id fread($id1filesize($archivo));//lo asignamos a una variable
$archivo = array($id);//lo metemos en un array
krsort($archivo);//ordenamos el array
foreach($archivo as $key => $mensaje);//recorremos el array
echo $mensaje.'<br>';  //imprimimos el mensaje
?>
procesa.php:
Código PHP:
<?php require_once('funciones_muro.php'); ?>

<?php 
nuevo
();
?>

<script>
setTimeout("location.href='index.php'", 5000);
</script>
funciones_muro.php:
Código PHP:
<?php

function nuevo() {


$archivo 'usuarios/'$_SESSION['k_username'].'.txt';//leemos el archivo que ordenará los comentarios
$contador 0;

$fp fopen($archivo,"r");
$contador fgets($fp26);
fclose($fp);

++
$contador;//incrementamos el numero de comentarios

$fp fopen($archivo,"w+");
fwrite($fp$contador26);
fclose($fp);

date_default_timezone_set('Europe/Madrid');//seleccionamos la zona horaria
$mensaje $_POST['mensaje'];//ponemos el mensaje en una variable
$user '3nr1c';//ponemos el usuario en otra variable
$fecha date('j/m/Y \a \l\a\s G:i');//creamos una fecha y hora
//j->día; m->mes; Y->año; G->hora; i->minutos
$numero fopen($archivo,'r');
$num fread($numerofilesize($archivo));//conseguimos el valor del archivo
fclose($numero);

$archivo 'usuarios/'$_SESSION['k_username'].'.txt';
$cadena "'".$num."' => '".$user." escribió el ".$fecha.":<br>".$mensaje."',";//cadena a escribir archivo

if ($mensaje=='') {//si el mensaje da nulo imprimimos un error

echo 'Tienes que introducir algun mensaje!!';

}else{
//sino, escribimos

$id fopen($archivo'a+');
fwrite($id$cadena);

fclose($id);//cerramos el archivo

echo 'Comentario introducido correctamente. En breve serás redirigido a la página anterior';

}

?>
Pero el index .php imprime:

Código:
'1' => 'user1 escribió el 24/09/2010 a las 20:09:
hola','2' => 'user1 escribió el 24/09/2010 a las 20:12:
hola',
(user es un usuario de prueba)

Dónde está el error en el código???
  #2 (permalink)  
Antiguo 24/09/2010, 12:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: gran problema!!

tu problema esta en pensar que de esa forma podría guardar un array, cosa que es completamente errada....
Código PHP:
$archivo = array($id);//lo metemos en un array 
osea, si... lo estas metiendo en un array, pero solo la representación como string y no se interpreta como array...

de modo que hacer lo siguiente esta mal también:
Código PHP:
$cadena "'".$num."' => '".$user." escribió el ".$fecha.":<br>".$mensaje."',";//cadena a escribir archivo 
y es verdad, esa es solo una cadena... en ningún momento es un array, y solo por tu mente pasa de que podría "crear" un array con esa información, lo cual es falso...

sin embargo podrías usar var_export() para guardar la representación en código de tu array, quedando el archivo algo así...
Código PHP:
<?php return array('hola mundo');
y en PHP, para que sea cargado como array no debes leerlo como archivo... debes cargarlo como código, esto se hace usando include
Código PHP:
$foo = include 'archivo.php';
print_r($foo); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/09/2010, 13:44
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: gran problema!!

Hola de nuevo y gracias por la ayuda. He usado lo que me has dicho y me informé en php.net, pero después de cambiar estas líneas:

Código PHP:
$archivo 'usuarios/'.$_SESSION['k_username'].'.txt';
$id1 fopen($archivo'r');//leemos el archivo del muro
$id fread($id1filesize($archivo));//lo asignamos a una variable
$archivo = array($id); 
por estas:

Código PHP:
$archivo 'usuarios/'.$_SESSION['k_username'].'.txt';
$foo = include($archivo);
$id print_r($foo);  
$archivo = array($foo); 
no solo no lee el archivo como un array, sino que además añade '11' al final del echo.

Qué solución podría haber? Gracias de antemano
  #4 (permalink)  
Antiguo 24/09/2010, 13:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: gran problema!!

me imagino que el formato de tus archivos de texto ahora es el correcto, ¿cierto?

entonces esto es lo que anda mal:
Código PHP:
$foo = include($archivo);
$id print_r($foo);  // no es necesario
$archivo = array($foo);  // no es necesario

$archivo $foo// OK 
finalmente, si el formato del archivo es correcto el array debe quedar cargado ya en $foo, que bien puede ser el nombre que desees...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 24/09/2010, 14:25
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: gran problema!!

Dos cosas respecto a esto:

1.- poniendo el código

Código PHP:
$foo = include($archivo); 
$archivo $foo
me imprime este error:


Warning: krsort() expects parameter 1 to be array, integer given in C:\xampp\htdocs\user\user\muro\index.php on line 8

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\user\user\muro\index.php on line 9

2.- ¿Cómo debo formatear el string que se introduce en el archivo de comentarios para que el array funcione como tal?
  #6 (permalink)  
Antiguo 24/09/2010, 14:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: gran problema!!

eso te lo comente en un inicio:
Código PHP:
<?php return array('hola mundo');
el formato debe ser ese, osea un archivo que devuelve un array, y fácilmente puedes crearlo usando var_export()
Código PHP:
$datos = array('candy' => 'bar''does' => 'nothing');
file_put_contents($archivo'<' '?php return ' var_export($datosTRUE) . ';'); 
si respetas dichas normas no veo problema alguno!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 25/09/2010, 06:58
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: gran problema!!

Muchísimas gracias, me ha funcionado a la perfección!!
  #8 (permalink)  
Antiguo 25/09/2010, 07:41
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: gran problema!!

A pues no, estaba revisando que todo me funcionase bien y no, porque si ya hay mensajes tengo que escribir de otra forma:

Código PHP:
<?php ............
$fp fopen("usuarios/".$_SESSION['k_username'].".txt","r");
$leer_linea fgets($fp); 
} else if(!
$leer_linea == '<?php'){

.......

$datos = array($num => $user.' escribió el '.$fecha.':<br>'.$mensaje);

$id fopen($archivo'a+');
fwrite($id'<' '?php return ' var_export($datosTRUE) . ';');

}else{.......

$datos $num => $user.' escribió el '.$fecha.':<br>'.$mensaje;


$id fopen($archivo'a+');
fseek($id,-2);
fwrite($idvar_export($datosTRUE) . ',');

.............
}}
?>
Y cuando intento escribir un segundo mensaje, imprime:


Parse error
: syntax error, unexpected T_DOUBLE_ARROW in C:\xampp\htdocs\user\user\muro\funciones_muro.php on line 73
(la línea 73 es donde hay la variable $datos = $num => $user.' escribió el '.$fecha.':<br>'.$mensaje;)


Cómo puedo solucionarlo??
  #9 (permalink)  
Antiguo 25/09/2010, 08:05
Avatar de lisandro Arg  
Fecha de Ingreso: octubre-2003
Ubicación: Cordoba, Argentina
Mensajes: 945
Antigüedad: 20 años, 6 meses
Puntos: 24
Respuesta: gran problema!!

pusiste => pero eso no es un array(), mas arriba hay uno igual bien hecho
  #10 (permalink)  
Antiguo 25/09/2010, 08:13
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: gran problema!!

Vale, ahora sí... muchas gracias

Etiquetas: Ninguno
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 18:05.