Strona 1 z 1

Funkcja header() omijana.

Napisane: poniedziałek, 14 kwietnia 2014, 10:43
przez tymek
Witam,

Stworzyłem ala taki chat, który działa tak, mam formularz

Code: Zaznacz cały

<form action="tablica.php" method="post"> <!--nazwa strony na której znajduje się formularz-->

<input class="inputt" type="text" name="tresc" style="width:600px;"/>

<input class="button" type="submit" name="submit" value="Wyślij"/>

</form>
Z którego odbieram jedną zmienną czyli treść, następnie ją wysyłam do tabeli.

Code: Zaznacz cały

  $wiadomosc=$_POST[tresc];

 // Jeżeli komentarz jest pusty
  if (empty($_POST['tresc']) ) {
    $komunikat .= '<p>Napisz komentarz.</p>';
  } else {
    $koment = stripslashes($_POST['tresc']);
  }
	
	


  if (!isset($komunikat)) {
   	$zapytanie = @mysql_query("INSERT INTO `tablica` SET wiadomosci='" . $wiadomosc. "', avatar='" . $avatar . "' ,  login='" . $login . "' ");

      header ("Location:  http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
      exit();
   
  }
Tu zaczyna się cały problem, ponieważ funkcja header ( ) jakże potrzebna do odświeżenia automatycznego strony, jest omijana ;/.
Cały proces wykonuje się w porządku bo komentarz który później pobieram pokazuje się, z tym problemem że muszę jakby od nowa włączyć stronę. Rozumiem że ta funkcja się
nie uruchamia jeżeli coś wysłaliśmy wcześniej do wyszukiwarki, tylko nie bardzo wiem jak dalej to ugryźć.

Dodam ze strona ma zapisane zmienne sesyjne, a na początku mam takie warunki

Code: Zaznacz cały

<?php
session_start();

 if ($_SESSION['zalogowany'] = 1 && (time() - $_SESSION['time'] > 120))
            {
                $_SESSION['zalogowany'] = 0;
                session_destroy();
                $login= 	$_SESSION['login'];
								include('connect.php');

										 $ins = @mysql_query("UPDATE `cms`.`users` SET  sesja = 0  WHERE login = '$login' " );
									
						header("Location:logowanie.php");
            } 

  if ($_SESSION['zalogowany']=1)
    {

    ?>

Re: Funkcja header() omijana.

Napisane: poniedziałek, 14 kwietnia 2014, 10:56
przez Morfidon
Na razie nie sprawdzałem całego kodu i idei, ale od razu zwróciłem uwagę na taki błąd:
$wiadomosc=$_POST[tresc];
tresc to etykieta, nie można jej podać bez cudzysłowi prawidłowo powinno być to zapisane tak:
$wiadomosc=$_POST['tresc'];
sprawdź czy to nie było problemem i włącz w php.ini debugowanie, bo to by zostało wychwycone przed debugger.

Czat jednak nie powinno się robić poprzez odświeżanie strony, treść powinno zaktualizować się z pomocą np. AJAX, pokazuję jak zrobić chat krok po kroku w kursie AJAX.

Re: Funkcja header() omijana.

Napisane: poniedziałek, 14 kwietnia 2014, 11:41
przez tymek
Nie miałem styczności z tym AJAX. Widzę że to kolejny kurs, który zakupię. W każdym bądź razie zależy mi by to działało ;(.Chodzi mi po prostu o to żeby użytkownika po kliknięciu wyślij w formularzu przekierowało z powrotem na tą samą stronę, tak by zobaczył swój komentarz, to wszystko. Obecnie brak tego rodzi dwa problemy,

1) po odświeżeniu wyśle tą samą wiadomość jeszcze raz,
2) żeby użytkownik zobaczył komentarz musi jakby wejść jeszcze raz na tą stronę.

Re: Funkcja header() omijana.

Napisane: poniedziałek, 14 kwietnia 2014, 14:25
przez Morfidon
Po załadowaniu strony php przestaje już działać, jeśli chcesz odświeżyć stronę to po prostu wyślij go na tą samą stronę na której się znajduje.

Tu trzeba skorzystać z JavaScript + AJAX.

Ewentualnie możesz pobawić się w wyświetlanie zawartości strony w ramce i ją odświeżać co powiedzmy 5 sekund z pomocą header:

Code: Zaznacz cały

$page = $_SERVER['PHP_SELF'];
$sec = "10";
header("Refresh: $sec; url=$page");
lub też z pomocą JavaScript. location.reload();
Pozdrawiam

Re: Funkcja header() omijana.

Napisane: poniedziałek, 14 kwietnia 2014, 14:48
przez tymek
No właśnie rozwiązałem problem : ). Jak już pisałem funkcja header( ) nie działała (blokowała się). Przeczytałem w dokumentacji że aby użyć header(); wyszukiwarka nie może nic wcześniej ( czyli w kodzie "wypluć"). Dlatego przestawiłem odpowiednio odbierane zmienne, oraz funkcję header i wszystko zaczęło śmigać : )
Co do sugestii chatu, bardzo dziękuje na pewno postaram się ją wykorzystać : )

Re: Funkcja header() omijana.

Napisane: wtorek, 15 kwietnia 2014, 12:45
przez Morfidon
Tu niestety nie miałem jak tego sprawdzić, bo wtedy trzeba posiadać cały kod przed oczami, ale rzeczywiście jest tak jak mówisz, header musi być zawsze przed jakimkolwiek tekstem wysłanym na wyjście.