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

PHP $_POST undefinied index chociaż wysłanie danych metodą POST zakończyło się sukcesem

VPS Starter Arubacloud
0 głosów
284 wizyt
pytanie zadane 18 stycznia 2017 w JavaScript przez mizeriowy Użytkownik (650 p.)
edycja 18 stycznia 2017 przez mizeriowy

Dlaczego wyrzuca mi tytułowy błąd kiedy chcę użyć danych, które przesłałem?

Wartości, które edytuję to komórki w tabeli.
Póżniej przesysłam dane do pliku update.php, w konsoli pokazuje się status ok, oraz parametry w formacie
value: "nowawartość".

function update() {
    $(".editable").on("dblclick", function() {
        $(this).prop('contenteditable', true);
    } );

    $(".editable").on("blur", function () {
        $(this).prop("contenteditable", false);

        newValue = $(this).text();
        console.log(newValue);
        data = {'value': newValue};

        $.ajax({
            type: "POST",
            url: "update.php",
            data: data
        });

    });
}


 

Czemu to zwraca mi błąd undefinied index?

$a = $_POST['value'];

echo $a;

Próbowałem też kilka prostych przykładowych kodów ze stackoverflow  z gotowymi wartościami i zawsze mam ten błąd.

komentarz 18 stycznia 2017 przez Pietrak Pasjonat (18,850 p.)
wydaje mi się, że powinno być data = {value: newValue};

sprawdź tablicę var_dump($_POST);
komentarz 18 stycznia 2017 przez mizeriowy Użytkownik (650 p.)
zwraca: array (size=0) empty. Nie rozumiem, dlaczego jest pusta?
 

Zmiana na data = {value: newValue}; nic nie zmienia, żadnych błędów, żadnej poprawy.

1 odpowiedź

0 głosów
odpowiedź 18 stycznia 2017 przez Pietrak Pasjonat (18,850 p.)
wybrane 18 stycznia 2017 przez mizeriowy
 
Najlepsza

Jak właściwie to sprawdzasz? Nie widzę nigdzie w kodzie odebrania zapytania. 

Potrzebujesz dodać coś takiego:

        success: function(data) {
            console.log(data);
        },

 

komentarz 18 stycznia 2017 przez mizeriowy Użytkownik (650 p.)
edycja 18 stycznia 2017 przez mizeriowy

Miałem wcześniej success: function () { console.log("success"); }.

Do czego ten parametr data? Ide podpowiada mi tylko, że jest unused.
A sprawdzam w narzędziach programisty w przeglądarce.

Mam coś takiego.

img1
 

img2

1
komentarz 18 stycznia 2017 przez Pietrak Pasjonat (18,850 p.)
A zajrzałeś do dokumentacji? http://api.jquery.com/jquery.ajax/

Oznacz do, że jeżeli zapytanie się powiedzie to odbierz dane i przekaż je jako pierwszy argument funkcji - zmienna data.

Zmienna data przechowuje dane z php, którymi odpowiedział serwer.

Console.log oznacza, że te dane zostaną wypisane w konsoli przeglądarki(f12).
komentarz 18 stycznia 2017 przez mizeriowy Użytkownik (650 p.)
edycja 18 stycznia 2017 przez mizeriowy
Myliłem się. Nie zrozumiałem i nie  przepisałem dokładnie zostawiając stringa w console.log.
1
komentarz 18 stycznia 2017 przez Pietrak Pasjonat (18,850 p.)
To usuń jak nie wykorzystujesz.
komentarz 18 stycznia 2017 przez mizeriowy Użytkownik (650 p.)
Myliłem się, nie zrozumiałem jednak dokładnie. Zwraca mi:

<pre class='xdebug-var-dump' dir='ltr'>
<small>E:\xampp\htdocs\projekt\update.php:4:</small>
<b>array</b> <i>(size=1)</i>
  'value' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'nowawartosc'</font> <i>(length=5)</i>
</pre>

Nie bardzo wiem co z tym zrobić.
1
komentarz 18 stycznia 2017 przez Pietrak Pasjonat (18,850 p.)
Czyli wszystko w porządku. Teraz odebrane dane możesz wstawić gdzie chcesz na stronę za pomocą np. $.html()
komentarz 18 stycznia 2017 przez mizeriowy Użytkownik (650 p.)
Ale ja chciałem odebrać nowe wartości w pliku php i zrobić update bazy danych a nie dam rady bo nie mogę dostać tych wartości, ponieważ $_POST w pliku update.php nadal zawiera tylko pustą tablicę.
1
komentarz 18 stycznia 2017 przez Pietrak Pasjonat (18,850 p.)
Albo ja nie rozumiem, albo ty. Chcesz teraz wejść do pliku update.php i użyć dane, które wysłałeś? Te dane nie będą tam na ciebie czekać. Jaki sens miałby ajax, gdyby można było by zrobić to zwykłym formularzem.

Musisz to zrobić za jednym requestem. Odbierasz dane z ajaxa w postaci tablicy, otwierasz połączenie z bazą danych, wstawiasz wartości do bazy, jeżeli się uda to zwracasz np sukces.
komentarz 18 stycznia 2017 przez mizeriowy Użytkownik (650 p.)
edycja 18 stycznia 2017 przez mizeriowy

Chciałem to zrobić tak jak podczas wysyłania formularza, z którego wartości przesyłałem do pliku .php, przygotowywałem wyrażenia  zapisywałem do bazy danych, tak jak jest w drugiej części odpowiedzi. Teraz chcę zrobić to samo tylko z użyciem edytowalnych komórek tabeli zamiast formularza  i podmienić dane w bazie.

Edit. No dobra, chyba coś pojąłem, w pliku create, w którym  wrzucam dane z formularza do bazy dane też nie czekają i nie wypiszę ich tam, a do bazy się wrzucają smiley.  Zaraz coś sprawdzę.

Edit2: Dzięki za naprowadzenie mnie. Problem był wręcz głupi, ale dla mnie nie był taki oczywisty. Zamiast sprawdzać wysłane dane i dziwić się, że nic tam  nie ma bo przecież nic nie czeka, trzeba było wklepać od razu cały kod do updateu bazy i voila. Zamiast tego wolałem przypisywać otrzymane wartości w oddzielnym pliku i sprawdzać czy się wypiszą po jego otwarciu laugh Dzięki.

Podobne pytania

0 głosów
2 odpowiedzi 688 wizyt
0 głosów
2 odpowiedzi 937 wizyt
pytanie zadane 22 lutego 2020 w JavaScript przez Piotr Młynarczyk Początkujący (380 p.)
0 głosów
1 odpowiedź 485 wizyt

92,454 zapytań

141,262 odpowiedzi

319,099 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...