Foros del Web » Programando para Internet » PHP »

¿que hago mal?

Estas en el tema de ¿que hago mal? en el foro de PHP en Foros del Web. tengo un archivo de texto asi: habitaciones.txt: 0011-1 0012-0 0013-0 0014-1 0015-1 0016-0 0017-0 0018-0 0019-1 0020-0 ___________________ para que se ubiquen mas o menos ...
  #1 (permalink)  
Antiguo 20/09/2008, 14:32
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 7 meses
Puntos: 3
¿que hago mal?

tengo un archivo de texto asi:

habitaciones.txt:

0011-1
0012-0
0013-0
0014-1
0015-1
0016-0
0017-0
0018-0
0019-1
0020-0

___________________

para que se ubiquen mas o menos 00XX es la habitacion y -X es su estado (ocupado o no)

y tengo un archivo php asi:

estado.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. $ph = $_POST['habitacion']; //aca se obiente 00XX
  4. $pe = $_POST['estado']; //aca se obtiene -X
  5. $p = "$ph$pe";
  6.  
  7. $ar = "habitaciones.txt";
  8. $fil = file($ar);
  9. $count = count($fil);
  10. $ary = array("-0", "-1");
  11.  
  12. for ($i=0;$i<$count;$i++)
  13. {
  14. $hab = trim(str_replace($ary, "",$fil[$i]));
  15. $es = substr($fil[$i], 4);
  16. $habits1 = "$hab$es";
  17.  
  18. if($habits1 == $p)
  19. {
  20. $habits = "$habits1";
  21. }
  22.  
  23.  
  24. }
  25.  
  26. echo $habits;
  27.  
  28. ?>

el problem es que $habtis no me da un valor

Última edición por AlvaroX; 20/09/2008 a las 15:16
  #2 (permalink)  
Antiguo 20/09/2008, 14:47
 
Fecha de Ingreso: septiembre-2008
Mensajes: 211
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: ¿que hago mal?

Prueba de poner: $ary = array("0", "1");
  #3 (permalink)  
Antiguo 20/09/2008, 15:15
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: ¿que hago mal?

Cita:
Iniciado por mesoriginal Ver Mensaje
Prueba de poner: $ary = array("0", "1");
no se puede porque $habits1 y $p no quedarian =
  #4 (permalink)  
Antiguo 20/09/2008, 15:24
 
Fecha de Ingreso: diciembre-2007
Ubicación: C:\Escritorio\Frente al Pc
Mensajes: 47
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: ¿que hago mal?

quitale las comillas a $habits1
  #5 (permalink)  
Antiguo 20/09/2008, 15:26
 
Fecha de Ingreso: diciembre-2007
Ubicación: C:\Escritorio\Frente al Pc
Mensajes: 47
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: ¿que hago mal?

en todo caso observando bien el codigo puedes dejarlo de la siguiente manera:
Código PHP:
#
if($habits1 == $p)
#
{
#
echo $habits1 
#
}
else
{
echo 
"error en el codigo"

  #6 (permalink)  
Antiguo 20/09/2008, 15:29
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: ¿que hago mal?

Cita:
Iniciado por lathix Ver Mensaje
en todo caso observando bien el codigo puedes dejarlo de la siguiente manera:
Código PHP:
#
if($habits1 == $p)
#
{
#
echo $habits1 
#
}
else
{
echo 
"error en el codigo"

para que son los #
  #7 (permalink)  
Antiguo 20/09/2008, 15:30
 
Fecha de Ingreso: diciembre-2007
Ubicación: C:\Escritorio\Frente al Pc
Mensajes: 47
Antigüedad: 16 años, 3 meses
Puntos: 0
para nada se me olvido borrarlos :P xD

Cita:
Iniciado por lathix Ver Mensaje
en todo caso observando bien el codigo puedes dejarlo de la siguiente manera:
Código PHP:
if($habits1 == $p)
{
echo 
$habits1 
}
else
{
echo 
"error en el codigo";

asi deberia quedar...

Última edición por jam1138; 21/09/2008 a las 00:58
  #8 (permalink)  
Antiguo 20/09/2008, 15:53
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: ¿que hago mal?

Cita:
Iniciado por lathix Ver Mensaje
asi deberia quedar...
aajajaja me devolvio esto en todo caso :S

error en el codigo
error en el codigo
error en el codigo
error en el codigo
error en el codigo
error en el codigo
error en el codigo
error en el codigo
error en el codigo
error en el codigo
  #9 (permalink)  
Antiguo 20/09/2008, 16:00
 
Fecha de Ingreso: diciembre-2007
Ubicación: C:\Escritorio\Frente al Pc
Mensajes: 47
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: ¿que hago mal?

quiza si explicaras mas lo que deseas hacer podria ayudarte mas, que es lo que quieres mostrar y eso.
  #10 (permalink)  
Antiguo 20/09/2008, 18:44
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: ¿que hago mal?

haber lo que quiero es lo siguente:

en un texto que tengo que es este:

habitacion.txt

0011-1
0012-0
0013-0
0014-1
0015-1
0016-0
0017-0
0018-0
0019-1
0020-0

esa lista significa:
que c/linea es una habitacion y su estado (ocupado o desocupado)
00XX <-numero de una habitacion y -X si esta ocupado o no(0 desocupado 1 ocupado)

ya la cosa es por ejemplo en un formulario, poner 0018 en un texto y con un option cambiar el estado de -0 a -1 o viceversa...

espero que entiendas
  #11 (permalink)  
Antiguo 20/09/2008, 19:48
 
Fecha de Ingreso: diciembre-2007
Ubicación: C:\Escritorio\Frente al Pc
Mensajes: 47
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: ¿que hago mal?

creo entonces que debes usar la funcion fopen en modo lectura y escritura y no la veo por ahi xD busca mas en google de escritura y lectura de ficheros en php
  #12 (permalink)  
Antiguo 20/09/2008, 20:02
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: ¿que hago mal?

Hola,

Cita:
Iniciado por AlvaroX Ver Mensaje
Código PHP:
Ver original
  1. <?php
  2. $habits = "No encontrado"
  3. ...
  4. for ($i=0;$i<$count;$i++)
  5. {
  6. $hab = trim(str_replace($ary, "",$fil[$i]));
  7. $es = substr($fil[$i], 4);
  8. $habits1 = "$hab$es";
  9.  
  10. if($habits1 == $p)
  11. ...
  12. ?>
el problem es que $habtis no me da un valor
El problema es que la función "$es = substr($fil[$i], 4);" te va a devolver desde el caracter 4 en adelante. Eso significa que va a incluir los retornos de carro.

Deberías cambiar esta linea :

if($habits1 == $p)

Por esta otra si el archivo "habitaciones.txt"...

...está en formato Unix
if($habits1 == "$p\n")

...está en formato Windows
if($habits1 == "$p\r\n")

...está en formato Mac
if($habits1 == "$p\r")

Y lógicamente los parámetros recibidos en $ph y $pe deben estar en el archivo, para que los encuentre. Así como usar la variable $habits al principio del programa, por lo menos para que no genere un error ... algo como $habits = "No encontrado";

Cita:
Iniciado por AlvaroX Ver Mensaje
haber lo que quiero es lo siguente:

en un texto que tengo que es este:

....

que c/linea es una habitacion y su estado (ocupado o desocupado)
00XX <-numero de una habitacion y -X si esta ocupado o no(0 desocupado 1 ocupado)

ya la cosa es por ejemplo en un formulario, poner 0018 en un texto y con un option cambiar el estado de -0 a -1 o viceversa...

espero que entiendas
Amigo, no sé que tiene que ver el primer programa con este nuevo objetivo. Deberías analizar mejor tu pregunta y postearla de nuevo adecuadamente para obtener una respuesta clara y objetiva.

Saludos,
  #13 (permalink)  
Antiguo 20/09/2008, 20:28
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 7 meses
Puntos: 3
Ayuda

Bueno postie algo y si como decia HackmanC me confundi mucho, ya aclare lo que quiero hacer, parto por dar los datos de mi servidor:

Trabaja con windows xp y tengo PHP Version 5.2.1

ya ahora lo que quiero hacer, que a mi no me resulto:

Primero que todo tengo un archivo de texto, habitacion.txt que tiene este contendido:

0011-0
0012-1
0013-1
0014-0
0015-0
0016-1
0017-0
0018-0
0019-0
0020-1

ahora c/linea de este texto representa una habitacion y su estado(ocupada o desocupado)

asi el orden:

00XX <-- seria la habitacion y -X el estado (-0 desocupado, -1 ocupado).

lo que quiero hacer es poder con un form desde un input text colocar la habitacion, y con un option su estado, y con un archivo php cambiar el estado de la habitacion introducida. eso seria.
  #14 (permalink)  
Antiguo 20/09/2008, 21:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda

simple, con la función file() puedes hacerlo todo como si fuera un arreglo... luego, separas con explode() y bingo!! (es cuestión de pensarle) suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 20/09/2008, 21:33
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Ayuda

Hola,

Creo que esto te podrá dar una idea; tienes que considerar si el archivo tiene retornos de carro formato ANSI vs Linux; así como la codificación de caracteres del archivo XHTML ISO vs UTF-8.

Lo que realiza el código es mostrar las lineas que están en el archivo, que representan las habitaciones en un ComboBox, y dependiendo de la selección, cuando se presiona enviar, lee el archivo completo y lo vuelve a escribir linea a linea, cambiando solamente la que representa la habitación a modificar.

Saludos,

Archivo habitacion.php :

Código:
<?php
$nombre = 'habitaciones.txt';

if (isset($_POST['Submit']) && $_POST['Submit'] == 'Enviar') {
	$archivo = file($nombre); // SLURP
	$cuenta = count($archivo);
	
	$out = fopen($nombre, "w+");
	for ($i = 0; $i < $cuenta; $i++) {
		if ($_POST['habitacion'] == substr($archivo[$i], 0, 4)) {
			fwrite($out, substr($archivo[$i], 0, 4) . '-' . $_POST['estado'] . "\r\n"); // ANSI \\r\\n vs LINUX \\n
		} else {
			fwrite($out, $archivo[$i]);
		}
	}
	fclose($out);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><!-- Windows vs UTF-8 -->
<title>Habitaciones</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="habitacion.php">
  <table border="1" cellpadding="2" cellspacing="2">
    <tr>
      <td><label for="habitacion" accesskey="h">Habitación</label></td>
      <td><select name="habitacion" id="habitacion">
<?php
$archivo = file($nombre);
$cuenta = count($archivo);
for ($i = 0; $i < $cuenta; $i++) {
?>
          <option value="<?php echo substr($archivo[$i], 0, 4); ?>"><?php echo substr($archivo[$i], 0, 4); ?></option>
<?php
}
?>
        </select></td>
    </tr>
    <tr>
      <td><label for="estado" accesskey="e">Estado</label></td>
      <td><select name="estado" id="estado">
          <option value="1">Ocupada</option>
          <option value="0">Desocupada</option>
        </select></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input name="Submit" type="submit" id="Submit" value="Enviar" /></td>
    </tr>
  </table>
</form>
</body>
</html>
ps:

Este es solamente un ejemplo, puesto que puede contener errores, tienes que revisar la seguridad que representa y donde se va a correr el script. Si alguien te manda el estado de habitación 3; que no existe, etc. Normalmente no posteo código a más que sea necesario, pero bueno ... en este caso bueno ... ya está.
  #16 (permalink)  
Antiguo 20/09/2008, 23:50
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Ayuda

muchas gracias :D

Última edición por jam1138; 21/09/2008 a las 00:55 Razón: Por favor no citar mensaje completo si no es necesario.
  #17 (permalink)  
Antiguo 21/09/2008, 00:27
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Respuesta: Ayuda

Disculpa la crítica, pero no veo muy saludable que le resuelvas los ejercicios de estudios a los novatos. Son desafíos que ellos tienen que resolver, no ir a un foro para que alguien le haga la solución.

Estás dando de comer en la boca, no enseñando a pescar.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #18 (permalink)  
Antiguo 21/09/2008, 08:07
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ¿que hago mal?

NOTA: esta mal decir y hacer comparaciones con \r\n ya que, independientemente del SO y la configuracion de auto_detect_line_endings la funcion file() siempre devuelve un arreglo sin caracteres \r\n (suena bobo) pero asi es..... suerte!

PDTA: no le hagan la tarea!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #19 (permalink)  
Antiguo 21/09/2008, 21:44
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: ¿que hago mal?

Hola,

Cita:
Iniciado por enriqueplace Ver Mensaje
Disculpa la crítica, pero no veo muy saludable que le resuelvas los ejercicios de estudios a los novatos. Son desafíos que ellos tienen que resolver, no ir a un foro para que alguien le haga la solución.

Estás dando de comer en la boca, no enseñando a pescar.
No hay problema, eso lo tengo claro. Por eso hice la aclaración en mi mensaje... que era un ejemplo, y que de esa forma, pueda aprender como resolver un problema la próxima vez. A mi criterio era adecuado en este caso.

Normalmente no lo hago, pero la última vez el muchacho paso más de 2 semanas con la misma pregunta, de una función recursiva; que al final creo que no resolvió.

Si lo mando a revisar el manual de php.net, creo que va a aprender menos que mostrándole este ejemplo terminado ("en este caso"). La próxima vez, tendrá que resolverlo el solo; de mi parte.

Cita:
Iniciado por pateketrueke Ver Mensaje
NOTA: esta mal decir y hacer comparaciones con \r\n ya que, independientemente del SO y la configuracion de auto_detect_line_endings la funcion file() siempre devuelve un arreglo sin caracteres \r\n (suena bobo) pero asi es..... suerte!

PDTA: no le hagan la tarea!!
No hay problema, pero es preferible hacer la aclaración; así sabrá por donde revisar. De hecho en mi Windows, por mi configuración me devuelve \r\n o \n dependiendo de como guarde el archivo en Notepad++.

La función file() en Windows XP SP3, PHP5, IIS 5. Devuelve el arreglo con el carácter incluido (\n o \r\n). Así como en Linux Debian etch, php5, Apache 2.

Saludos,

ps:

Comprendo sus puntos de vista, pero creí conveniente mis posts en este asunto.

Última edición por HackmanC; 21/09/2008 a las 22:14 Razón: ps relax + END.
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 12:27.