Funkcja header() omijana.

Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
tymek
Początkujący
Początkujący
Posty: 21
Dołączył(a): poniedziałek, 14 kwietnia 2014, 10:19

Funkcja header() omijana.

Post 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)
    {

    ?>
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Funkcja header() omijana.

Post 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.
tymek
Początkujący
Początkujący
Posty: 21
Dołączył(a): poniedziałek, 14 kwietnia 2014, 10:19

Re: Funkcja header() omijana.

Post 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ę.
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Funkcja header() omijana.

Post 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
tymek
Początkujący
Początkujący
Posty: 21
Dołączył(a): poniedziałek, 14 kwietnia 2014, 10:19

Re: Funkcja header() omijana.

Post 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ć : )
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Funkcja header() omijana.

Post 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.
Post Reply