Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]<?= ASCsrf::getTokenName() ?> powoduje błąd Warning: Cannot modify header information - headers already sent...
Forum PHP.pl > Forum > Przedszkole
Klycior
Siemka.

Korzystam z systemu formularzy w którym wykorzystuje ukryte pole którym jest <?= ASCsrf::getTokenName() ?>
Problem jest w tym, że zapis
  1. <?=
powoduje błąd kiedy chcę zrobić przekierowanie za pomocą:
  1. header("Location: nowy.php");

Błąd to tak zwane
  1. Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\projekt\new\nowy.php:78) in


Problem jest gdy zamienię
  1. <?=
na
  1. <?php
to zawsze mam błąd Invalid CSRF token.


Bawię się na localu - nie sprawdzałem na zewnętrznym serwerze.
Pomoże ktoś ? Dzięki wink.gif
trueblue
Token powinien być umieszczony jako wartość pola typu hidden, a nie ot tak, wiszący w kodzie HTML.
Wiesz co robi <?= ? Sprawdź. Dodatkowo lektura: https://www.google.com/search?q=Cannot+modi...lready+sent+php
A wiesz dlaczego <?php nie wyrzuca tego błędu? Będziesz wiedział jak się dowiesz co robi <?=
Klycior
1. Token tak mam umieszczony.
2. Dzięki - przynajmniej wiem o fajnym skrócie wink.gif A z lekturą się wczoraj zapoznałem i próbowałem z jej pomocą rozwiązać problem.

Sytuacja wygląda tak:


Błąd mam gdy:

  1. <form action="" method="post">
  2. <span class="contact100-form-title">
  3. Witaj <?php echo $kto; ?>
  4. <h3><br/>A więc zaczynajmy !</h3>
  5. <div class="bar"><div class="percent">
  6. <span style="width: 100%;"></span>
  7. </div></div>
  8. </span>
  9.  
  10. <div class="wrap-input100 validate-input bg1" ">
  11. <span class="label-input100">Imie </span>
  12. <input class="input100" type="text" name="imie" placeholder="Wpisz swoje imie">
  13. </div>
  14.  
  15. <div class="wrap-input100 validate-input bg1" ">
  16. <span class="label-input100">Nazwisko:</span>
  17. <input class="input100" type="text" name="nazwisko" placeholder="Wpisz swoje nazwisko">
  18. </div>
  19. <input type="hidden" name="<?php echo ASCsrf::getTokenName(); ?>" value="<?php echo ASCsrf::getToken(); ?>">
  20. <div class="wrap-input100 validate-input bg1" ">
  21. <span class="label-input100">Imie partnera:</span>
  22. <input class="input100" type="text" name="imie2" placeholder="Wpisz imie swojego partnera">
  23. </div>
  24.  
  25. <div class="wrap-input100 validate-input bg1" ">
  26. <span class="label-input100">Nazwisko partnera:</span>
  27. <input class="input100" type="text" name="nazwisko2" placeholder="Wpisz nazwisko swojego partnera">
  28. </div>
  29. <div class="container-contact100-form-btn">
  30. <button class="contact100-form-btn" name="submit">
  31. <span>
  32. Przejdź dalej
  33. </span>
  34. </button>
  35. </div>
  36. </form>
  37. <?php header("Location: nowy.php"); ?>


Gdy jednak wrzucę przekierowanie przed form a tj:

  1. <div class="container-contact100-form-btn">
  2. <button class="contact100-form-btn" name="submit">
  3. <span>
  4. Przejdź dalej
  5. </span>
  6. </button>
  7. </div><?php header("Location: nowy.php"); ?>
  8. </form>


Wszystko śmiga. Czemu tak się dzieje ?
(To co wyżej widnieje z przekierowaniem to tylko przetestowanie od którego momentu wyświetla się błąd - docelowo przekierowanie jest użyte w innej części kodu ale w tym samym pliku)
Mogę użyć z js document.location lecz wolałbym znać powód takich komunikatów = znaleźć błąd w moim kodzie.

Dzięki
trueblue
Najpierw robisz przekierowanie, dopiero potem wysyłasz dane do przeglądarki (kod HTML).
Jak ma sens umieszczenie przekierowania w środku formularza?
Klycior
Napisałem wyżej, że przekierowanie jest w innej części skryptu a od momentu gdzie jest wklejone na przykładach wyżej wywala błąd.

Dokładnie znajduje się ono w:
  1. else{
  2. $imie = mysql_real_escape_string( $_POST['imie']);
  3. $nazwisko = mysql_real_escape_string( $_POST['nazwisko']);
  4. $imie2 = mysql_real_escape_string( $_POST['imie2']);
  5. $nazwisko2 = mysql_real_escape_string( $_POST['nazwisko2']);
  6. mysql_query("UPDATE users SET
  7. imiekobieta='$imie',
  8. imiemeskie='$imie2',
  9. nazwiskokobieta='$nazwisko',
  10. postep='2',
  11. nazwiskofacet='$nazwisko2' WHERE login='$kto';")
  12. or die('Błąd zapytania');
  13. echo "<script type='text/javascript'> document.location = 'nowy.php'; </script>";


trueblue
Tu pokazujesz przekierowanie w JavaScript, a nie w PHP.

"Warning: Cannot modify header information - headers already sent by" oznacza, że nie możesz wysłać przed przekierowaniem w PHP jakichkolwiek danych.
Klycior
Tak tu jest z JS gdyż do czasu rozwiązania problemu skorzystałem z tej metody.
Przebuduję to co mam od nowa i zrobię inne rozwiązanie przekierowanie ale w php i zobaczymy co będzie wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.