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

Pobieranie wartości z textarea do zmiennej w PHP

VPS Starter Arubacloud
0 głosów
626 wizyt
pytanie zadane 14 kwietnia 2020 w PHP przez jupikajej Początkujący (440 p.)
<form method="post" class="todo-form" id="todoForm">
	<div class="todo-form-row">
		<label class="todo-form-label" for="todoMessage">Podaj treść zadania</label>
		<textarea form="todoForm" class="todo-form-message" name="todoMessage" id="todoMessage"></textarea>
	</div>

	<div class="todo-form-row">
		<input type="submit" class="button todo-form-button" value="Dodaj" />
	</div>
</form>
<?php
	$db = new Mysqli ('localhost', 'root', '', 'baza');
	
	$notatka = $_POST['todoMessage'];
	$user_id = $_SESSION['id'];
	
	$sql = "INSERT INTO notatki (id, user_id, notes) VALUES (NULL, '$user_id', '$notatka')";
	
	$wynik = $db -> query($sql);
?>

Próbując dodać do bazy treść wpisaną w textarea dostaje taki błąd.

Notice: Undefined index: todoMessage in D:\xampp\htdocs\projekty\projekt\notatnik.php on line 45

Ktoś ma jakiś pomysł? 

2 odpowiedzi

+1 głos
odpowiedź 14 kwietnia 2020 przez HaKIM Szeryf (87,590 p.)

Umieść kod PHP w kondycji, która sprawdza czy formularz został wysłany. W poniższym przykładzie sprawdzamy czy komunikacja odbywa się POSTem, ale w Twoim wypadku powinno na tę chwilę wystarczyć. :)

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $db = new Mysqli ('localhost', 'root', '', 'baza');
     
    $notatka = $_POST['todoMessage'];
    $user_id = $_SESSION['id'];
     
    $sql = "INSERT INTO notatki (id, user_id, notes) VALUES (NULL, '$user_id', '$notatka')";
     
    $wynik = $db -> query($sql);
}

Po co ta kondycja? Nie wysłałeś jeszcze formularza z danymi, a próbujesz odnieść się do właśnie tych danych... trochę nielogiczne musisz przyznać.

komentarz 14 kwietnia 2020 przez jupikajej Początkujący (440 p.)

Przed dodaniem tego if'a gdy w $notatka sam przysypiałem jakąś wartość np.

$notatka = "testowa notatka";

to dodawało mi to do bazy.

Teraz co prawda zniknął błąd o którym pisałem w poprzednim poście ale nie działa ten if - tak jakby za każdym razem wynikiem tego if'a był false.

komentarz 15 kwietnia 2020 przez HaKIM Szeryf (87,590 p.)

Oczywiście, że powyższy kod z danymi "testowa notatka" dodawało Ci do bazy, gdyż nie odnosiłeś się do danych z formularza, nim te mogły zaistnieć.

Spróbuj w takim wypadku czegoś mniej eleganckiego:

if ($_POST['todoMessage']) {

}

Zamiast ifa z POSTem i daj znać jaki rezultat.

komentarz 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)
if(!empty($_POST['todoMessage']))

dopiero to zadziałało

0 głosów
odpowiedź 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)

Mam jeszcze pytanie jak usunąć zawartość ze zmiennej notatka:

$notatka = $_POST['todoMessage'];

próbowałem unset ale nie działa - po odświeżeniu strony zapisuje do bazy drugi raz tą samą wartość

komentarz 15 kwietnia 2020 przez HaKIM Szeryf (87,590 p.)
Jeśli to windows/linux z chrome:

ctrl + f5 / Otworzyć nowego taba.

To normalne zachowanie przeglądarki co opisujesz.
komentarz 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)
Korzystam z opery ale z tego co pamiętam to na chrome również skrót ctrl + f5 to odświeżenie strony a nie otworzenie nowej karty.

Wracają do problemu można jakoś usunąć ten problem, wyczyścić zmienną?
komentarz 15 kwietnia 2020 przez HaKIM Szeryf (87,590 p.)
ctrl + f5 to refresh + czyszczenie ciasteczek, które o ile dobrze pamiętam pomagało mi aby pozbyć się przedawnionego posta.

Najprościej to by było rozdzielić front od backendu fizycznie t.j. plikami, przez co uniknąłbyś trzymaniem tego samego zapytania w przeglądarce dla strony X.
komentarz 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)

Jestem początkujący :) więc wiesz... nie umiem takich rzeczy.

Mógłbyś wytłumaczyć dlaczego nie działa mi unset

komentarz 15 kwietnia 2020 przez tangarr Mędrzec (154,780 p.)
Może podczas odświeżania strony znowu jest wysyłany ten sam formularz (wykonywana jest metoda POST).

Jeżeli tak to po dodaniu wpisu do bazy zrób przekierowanie na GET.
komentarz 15 kwietnia 2020 przez HaKIM Szeryf (87,590 p.)

Sugeruję zobaczyć jak przeglądarka (tutaj opera) przetrzymuje dane z posta. Gdybym już to zrozumiał, zastosowałbym odpowiednie rozwiązanie.

 

Jestem początkujący :) więc wiesz... nie umiem takich rzeczy.

Tworzysz x1 plik:

form.php

oraz x2:

handle-form.php

W 1 pakujesz kod html a w 2 wszystko pomiedzy <?php ?> i dodajesz do formluarza:

action="/handle-form.php" aby ten przekierował ruch na ten drugi plik.

komentarz 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)
Mógłbyś wytłumaczyć jak zrobić to przekierowanie??
1
komentarz 15 kwietnia 2020 przez tangarr Mędrzec (154,780 p.)

Podejrzewam, że wystarczy dodać header w obsłudze posta

<?php
header("Location: moj_plik.php");
exit;
?>

 

komentarz 15 kwietnia 2020 przez jupikajej Początkujący (440 p.)
Chyba działa. Dziękuję bardzo <3

Podobne pytania

–1 głos
1 odpowiedź 373 wizyt
pytanie zadane 24 stycznia 2017 w PHP przez Zychu Użytkownik (710 p.)
+1 głos
1 odpowiedź 174 wizyt
pytanie zadane 27 marca 2022 w PHP przez jamie80 Początkujący (320 p.)
–1 głos
2 odpowiedzi 415 wizyt
pytanie zadane 8 maja 2016 w PHP przez niezalogowany

92,453 zapytań

141,262 odpowiedzi

319,088 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!

...