PHP - variável perde valor

tonebiclas

Power Member
Boas a todos.
Estudo php á pouco tempo e estou a fazer um projecto de iniciativa própria, e estou com um problema...

Antes de mais vou indicar o conteudo dos ficheiros:

index.php disse:
<html>
<body>
<div align=center method=GET>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<form action=chat.php method="POST">
Utilizador : <input type=txt name=user>
<br>
<br>
<input type=submit value="Enviar">
</form>

chat.php disse:
<title>Chat</title>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<div align="center">
<h2>Chat do tomé</h2>

<form action="chat.php" method="POST">
Mensagem:<input type=txt name=mesage><br>
<br>
<input type=submit value="Enviar">
</form>

<?
$user=$_POST["user"];
$mesage=$_POST["mesage"];
?>

</div>
<?
$abrire=fopen("tome.txt","a+");
$escrever=fputs($abrire,"<font color=red><b>$user</b></font> diz: <font color=blue>$mesage</font>\n");
$fechare=fclose($abrire);

$abrire;
$escrever;
$fechare;
?>

<?
if (!$abrir=fopen("tome.txt","r+"))
{
echo "impossovel abrir o ficheiro";
} else {
for($valor>=1;$valor<=500;$valor++)
{
$formula=$valor*1024;
echo @fgets($abrir,$formula);
?><br><?
}
}
fclose($abrir);
?>


O problema é o seguinte:

Abro a página index.php e introduzo um valor na caixa de texto, sou reedireccionado para a página chat.php e a variável $user assume o valor introduzido em index.php com sucesso, mas quando carrego em Enviar (já na página chat.php) o valor de $user perde-se.

tambem pesquizei um pouco sobre variáveis de sessão, mas não consegui utiliza-las...será que alguem me pode ajudar a implementar isso no código ?

Desde já obrigado.
 
as variáveis em PHP não são passadas de ficheiro para ficheiros, a não ser as de sessão.

para as usar, tens que por no inicio de cada ficheiro isto:

Código:
<?php
session_start();
?>

atenção: isto tem que ser mesmo no ínicio do ficheiro. basta um espaço ou uma linha em branco antes da tag <?php e já estraga tudo

depois já podes usar as sessões com a variável $_SESSION como uma variável normal. claro que terás que usar sempre como um array senão apenas podes guardar um valor de cada vez
 
desde já obrigado pela resposta, mas não estou a entender muito bem como empregar isto no código.

isto:

$_SESSION=$_POST["user"];

vai ter o valor daqui:

$user=$_POST["user"];

?
 
$abrire;
$escrever;
$fechare;

isto nao esta la a fazer nada.

$_SESSION['batatas']=$_POST['batatas'].

Nunca passes todo o $_POST para $_SESSION senao alguem mal intencionado consegue subscrever todas as tuas variaveis de sessao.
 
está-me a dar um erro logo quando introduzo um valor no index.php

"Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\tomessenger\tome.php:1) in C:\xampp\htdocs\tomessenger\tome.php on line 2"
 
afinal já não dá esse erro.estava a fazer uma coisa mal.

mas acontece o mesmo.quando carrego em "Enviar" o conteúdo da variável perde-se.

actualmente estou com este código:

index.php

Código:
<?php
session_start();
?>
<html>
<body>
<div align=center method=GET>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<form action=chat.php method="POST">
Utilizador : <input type=txt name=user>
<br>
<br>
<input type=submit value="Enviar">
</form>
chat.php:

Código:
<?php
session_start();
?>
<title>Chat</title>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<div align="center">
<h2>Chat do tomé</h2>

<form action="chat.php" method="POST">
Mensagem:<input type=txt name=mesage><br>
<br>
<input type=submit value="Enviar">
</form>

<?
$user=$_POST["user"];
$mesage=$_POST["mesage"];
$_SESSION["user"]=$_POST["user"];

$tome=$_SESSION["user"];
echo "Utilizador: ";
echo $_SESSION["user"]=$_POST["user"];
?>

</div>
<?
$abrire=fopen("tome.txt","a+");
$escrever=fputs($abrire,"<font color=red><b>$tome</b></font> diz: <font color=blue>$mesage</font>\n");
$fechare=fclose($abrire);
?>

<?
if (!$abrir=fopen("tome.txt","r+"))
{
echo "impossovel abrir o ficheiro";
} else {
for($valor>=1;$valor<=500;$valor++)
{
$formula=$valor*1024;
echo @fgets($abrir,$formula);
?>
<br>
<?
}
}
fclose($abrir); 
?>

<?
echo $_SESSION["user"];
echo "EM CIMA";
?>
desde já obrigado a todos again!
 
Última edição pelo moderador:
o utilizador preenche o nome no index.php e envia
no chat.php tens $_SESSIO["user"]=$_POST["user"], que vai passar o nome para a sessão.

mas se reparares, quando preencher o formulário da mensagem, volta ao chat.php e vai tentar procurar outra vez o $_POST["user"] só que dessa vez ele não existe, e vai atribuir null, ou seja nada

podes trocar essa parte por exemplo por:


if (isset($_POST["user"])
$_SESSION["user"]=$_POST["user"];

assim só atribui se esse valor existir
 
Back
Topo