Angular - PHP - problem POST

0

Witam, mam pewien otóż mam następującą funkcję w Angular:

regulationsUser(regulation: any,uzytkownik_id:number,returnHtml:string): Observable<any> {
  return this.http.post(`${this.baseUrl}/authorization/insertRegulations.php`,{regulation,uzytkownik_id,returnHtml})
  .pipe(map((res) => {
    if( res['error'] == false)
    return res['message']
    else throw new Error(res['message'])
  }),
  catchError(this.handleError));
}

przesyłam POST do PHP odbierając go w następujący sposób :

$_POST = json_decode(file_get_contents('php://input'),true);
$uzytkownik_id = $_POST['uzytkownik_id'] ?? NULL;
$regulation = $_POST['regulation'] ?? NULL;
$returnHtml = $_POST['returnHtml'] ?? NULL;

I teraz tak jak testuje sobie na komputerze lokalnie to wszystko działa natomiast gdy kompiluje i wrzucam na serwer to z POST otrzymuje null. Czy ktoś jest mi wstanie pomóc bo już nie mam pojęcia o co chodzi?

1

cors?

0

Cors? to znaczy?
Zauważyłem że problem musi być ze zmienną returnHtml:string, bo gdy ją usunąłem to wszystko się przysyła normalnie.
To jest bardzo długa zmienna bo mam w niej zrzut widoku html i tam jest mnóstwo znaków czy to może być problem?

0

czy twój front stoi na osobnej domenie/subdomenie w stosunku do backendu? Jesli tak potrzebujesz ustawić odpowiednie nagłówki tak by nie były blokowane. Czy są blokowane możesz sprawdzi w narzędziach programisty -> sieć i tam zobaczyć czy leci tylko OPTION czy OPTION a po nim POST. Jeśli leci tylko option to masz blokade.

0

Nie wszystko jest na jednym serwerze i na jednej domenie.

0

A czy mogą być blokowane jakieś duże wartości/zmienne przez serwer?

0

No to musisz ogarnąć corsa. Backend stoi na apache?

0

Tak tak, a wszystko jest na home.pl

0
<IfModule mod_rewrite.c>

    # cors
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Headers "Content-Type, Accept, Authorization, X-Requested-With, Application"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, PUT, DELETE"
    Header always set Access-Control-Max-Age "7200"

    # Force to request 200 for options
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule .* / [R=200,L]

</IfModule>

Dorzuć do htaccess gdzieś przed innymi przekierowaniami

1
  • Jeśli jest problem z cors to dostałbyś w konsoli przeglądarki stosowny komunikat
  • $_POST nie jest od tego - użyj zwykłej zmiennej np $data
  • O ile używasz chrome to sprawdź w zakładce network co zwraca serwer w headers po wykonaniu tego zapytania, a w celu debugu możesz dodać var_dump(json_decode(file_get_contents('php://input'),true)) i sprawdzić w preview, czy dane zostały odebrane przez serwer
0

Dorzuciłem to co pisał mr_jaro, podrzucam screen z zakładki network w Chrome
title,
dodałem var_dump(json_decode(file_get_contents('php://input'),true)) i niestety w podglądzie nadal zwraca NULL

Tutaj musi być jakiś problem ze zmienną returnHtml bo jak jej nie przysyłam to jest wszystko dobrze, mogą być jakieś ograniczenia na serwerze co do wielkości zmiennej?

0

pokaż pełny nagłówek requestu option

0

title

0

Ktoś ma jakiś pomysł co do mojego problemu?

0

zrób sobie logi w php sprawdzając co się dzieje czy się kod w ogóle wykonuje i co zwraca. Najlepiej było by zdalne debugowanie ale wątpię że na tym etapie sobie z tym poradzisz.

0

Z logów otrzymuje następujące info podczas przesyłania:

[23-Mar-2020 10:58:11 Europe/Warsaw] PHP Warning:  Unknown: Unable to create temporary file, Check permissions in temporary files directory. in Unknown on line 0
[23-Mar-2020 10:58:11 Europe/Warsaw] PHP Warning:  Unknown: POST data can't be buffered; all data discarded in Unknown on line 0
0

Tu powinieneś znaleźć odpowiedź: https://stackoverflow.com/questions/18395163

A tak swoją drogą - szczerze wątpię, że dobrze zaprojektowałeś api przesyłając całego diva do serwera i aż się boję zapytać co jest na "returnHtml" i po co :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1