• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

array() w $_POST

Mały hosting, OGROMNE możliwości
+1 głos
625 wizyt
pytanie zadane 30 września 2022 w PHP przez nanautzin Obywatel (1,510 p.)
Stworzyłem array() z obiektami mojej klasy, mam problem z wysłaniem jej przez $_POST
Przed wysłaniem printuje całą tablicę funkcją var_dump(); i wydruk wygląda ok, ale po przesłaniu przez formularz po użyciu funkcji var_dump();  printuje mi tylko: string(5) "Array".
komentarz 30 września 2022 przez VBService Ekspert (256,580 p.)
Pokaż, proszę kod.
komentarz 1 października 2022 przez nanautzin Obywatel (1,510 p.)
   var_dump($generate_data);
        echo '<tr><form method="post">
            <input type="hidden" name="all_data" value="'.$generate_data.'"/>
            <input type="hidden" name="test_test" value="'.$arrayz.'"/>
            <input type="hidden" name="dupa" value="****"/>
            <input type="submit" name="generate_raport_to_pdf" class="button" value = "Generuj"/>
        </form></tr>';
        echo '<tr><form method="post"><input type="submit" name="cancel_generate_raport_to_pdf" class="button" value = "Powrót"/></form></tr>';

To jest formularz przez który wysyłam
$generate_data to ta tablica o której mowa, przed formularzem ma wszystkie dane które wygenerowałem i wygląda dokładnie tak jak ma wyglądać

 

if(isset($_POST['generate_raport_to_pdf'])) {
            testFun();
        }

tu warunek wywołujący funkcje

 

    function testFun() {
        echo'</br>_________________________TEST______________________________</br>';
        $data = $_POST['all_data'];
        $xx = $_POST['dupa'];
        $test = $_POST['test_test'];
        print_r($test);
        var_dump($xx);
        var_dump($data);
        var_dump($test);
        echo'</br>_________________________TEST 2_____________________________</br>';
        foreach ( $data as $dat ) {
            echo $dat->getDoB[1].'</br>';
            var_dump($dat);
        }
    }

to jest funkcja testowa (chciałem przed napisaniem właściwej sprawdzić czy wszystko działa) i nie działa.

 

komentarz 1 października 2022 przez Krzychu1 Użytkownik (580 p.)

@nanautzin, Folmularz nie ustalonej wartości "action", która powinna przekierować do pliku php.

1
komentarz 1 października 2022 przez VBService Ekspert (256,580 p.)

@Krz458; jeżeli nie ma ustalonej wartości dla atrybutu action to atrybut ten przyjmuje nazwę pliku, za pomocą którego "wyświetliliśmy" obecny formularz (podobna sytuacja jest z method - wartość domyślna GET).

 

index.php

<?php

  echo '<p>POST</p>';
  var_dump($_POST);
  echo '<p>GET</p>';
  var_dump($_GET);

?>
<form> 
  <input type="submit" name="formularz-bez-atrybutow" value="Wyślij" /> 
</form>

 

index.php

<?php
 
  echo '<p>POST</p>';
  var_dump($_POST);
  echo '<p>GET</p>';
  var_dump($_GET);
 
?>
<form method="post"> 
  <input type="submit" name="formularz-bez-atrybutow" value="Wyślij" /> 
</form>

 

3 odpowiedzi

+1 głos
odpowiedź 1 października 2022 przez Nudzi mi się Gaduła (4,460 p.)
wybrane 1 października 2022 przez nanautzin
 
Najlepsza
Przy budowie formularza konwertujesz array na string dlatego dostajesz po przesłaniu string(5) "Array". Możesz zmienić $generate_data na json i wtedy tekst dodać do formularza.

Jeżeli $generate_data nie jest za duże lepiej zapisać to do sesji lub odczytywać z bazy w momencie generowania raportu.
komentarz 1 października 2022 przez nanautzin Obywatel (1,510 p.)
Dzięki, to prawdopodobnie będzie najlepsze rozwiązanie, chce przesłać dość sporo danych przez formularz.
Twoja odpowiedz sporo mi rozjaśniła.
komentarz 1 października 2022 przez Wiciorny Ekspert (283,260 p.)

@Nudzi mi się,  konwersja i tak zachodzi automatycznie ze wzgledu na serializacje jaką robi metoda POST,  domyślnie nie ustala ona typu dlatego, że formularze traktuje jako Content-Type: x-www-form-urlencoded Ten format w ogóle nie określa żadnych typów, wszystko jest ciągiem jako string. 
PHP nie będzie i nie może magicznie przebuforować typów żadną z tych wartości.

Dlatego właśnie jak polecasz jeśli ktoś chce określony typ, musi wymusić serializacje np poprzez JSON.

komentarz 1 października 2022 przez Nudzi mi się Gaduła (4,460 p.)

php przy łączeniu stringów wszystko konwertuje na stringa. Dla tego formularza w htmlu pojawi się:

<form method="post">
         <input type="hidden" name="all_data" value="Array">
         <input type="hidden" name="test_test" value="Array">
         <input type="hidden" name="dupa" value="****">
         <input type="submit" name="generate_raport_to_pdf" class="button" value="Generuj">
</form>

Serializacja przy wykonaniu posta nie zachodzi bo na poziomie formularza zostało wstawione Array zamiast zawartości tablicy.

Chyba że miałeś coś innego na myśli to proszę o jakiś przykład.

komentarz 2 października 2022 przez nanautzin Obywatel (1,510 p.)
A masz jakiś sposób na przesłanie tego jako JSON w całości, bo odczytuje mi to do pierwszego znaku " i traktuje to jako część składni HTML
1
komentarz 3 października 2022 przez Nudzi mi się Gaduła (4,460 p.)

można użyć htmlspecialchars.

<input type="hidden" name="all_data" value="' . htmlspecialchars(json_encode($generate_data)) . '"/>

 

komentarz 10 października 2022 przez nanautzin Obywatel (1,510 p.)
Dzięki
+1 głos
odpowiedź 1 października 2022 przez overcq Pasjonat (22,630 p.)

Jeśli wygenerować część formularza jak poniżej, to u mnie działa.

foreach( $generate_data as $key => $value )
{   echo '<input type="hidden" name="all_data['. $key .']" value="'. $value .'"/>';
}

 

komentarz 1 października 2022 przez nanautzin Obywatel (1,510 p.)
Dzięki za odpowiedź, w moim przypadku raczej się nie sprawdzi, chce przesłać sporą ilość danych
+1 głos
odpowiedź 1 października 2022 przez VBService Ekspert (256,580 p.)
edycja 3 października 2022 przez VBService

@Nudzi mi się;


 zapisać to do sesji lub odczytywać z bazy w momencie generowania raportu.

dla informacji dodam, że można jeszcze użyć np. serializeunserialize

prosty przykład

<?php
 
  $file_name = 'array.dat';
  $generate_data = [ 2,4,6,8 ];

  var_dump($generate_data);

  echo '<p>Uzycie serialize i unserialize</p>';
  file_put_contents($file_name, serialize($generate_data));
  var_dump(unserialize(file_get_contents($file_name)));

?>

 

Podobne pytania

0 głosów
1 odpowiedź 215 wizyt
pytanie zadane 10 marca 2017 w PHP przez KamilGG Użytkownik (690 p.)
0 głosów
1 odpowiedź 310 wizyt
pytanie zadane 23 sierpnia 2019 w PHP przez Marcin90 Użytkownik (500 p.)
0 głosów
1 odpowiedź 354 wizyt
pytanie zadane 8 czerwca 2018 w PHP przez lapacz.kornel Mądrala (6,930 p.)

93,715 zapytań

142,629 odpowiedzi

323,260 komentarzy

63,257 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...